上一篇文章实现Student 基本的实体CRUD操作。本文将展示如何Students Index页添加排序、筛选和分页功能。
以下是排序完成时、经过筛选和分页功能截图,您可以在列标题点击排序。
1.为 Students Index页面加入列排序链接
要为Students Index页面加入排序功能,你须要改动Student controller的Index方法,并为Student Index视图加入代码。
向Index方法加入排序功能
打开Controllers\StudentController.cs,使用以下的代码替换Index 方法
public ActionResult Index(string sortOrder)
{
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
ViewBag.DateSortParm = sortOrder == "Date" ?
"date_desc" : "Date"; var students = from s in db.Students select s; switch (sortOrder) { case "name_desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "date_desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: students = students.OrderBy(s => s.LastName); break; } return View(students.ToList()); }
上面的代码接收URL中的查询字符串作为sortOrder參数。该參数是"Name"或"Date"。使用三元运算符推断并加下划线和"desc"来指名这是一个降序排序,默认是按升序排序。
第一次訪问Index页面时是没有查询字符串的,students依照LastName作升序排序显示。这是由switch语句中的default指定的。当用户点击某列的标题链接时,URL的查询字符串中就含有了对应的sortOrder值。
这里使用了两个ViewBag变量以便视图能够将合适的查询字符串提供给列标题链接。
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ?
"name_desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ?
"date_desc" : "Date";
这里使用了三元运算符,上面第一个指明假如sortOrder參数为null或为空。则ViewBag.NameSortParm被赋值为"name_desc"。否则将其赋值为空。其排序规则为:
Current sort order
Last Name Hyperlink
Date Hyperlink
Last Name ascending
descending
ascending
Last Name descending
ascending
ascending
Date ascending
ascending
descending
Date descending
ascending
ascending
该方法使用LINQ to Entities来指明要排序的列,上面的代码在switch语句前新建了一个 IQueryable变量,然后在switch中改动它,最后在switch语句后调用ToList方法。当你创建并改动IQueryable变量时,并没有向数据库发送查询命令,直到调用ToList方法将IQueryable 对象转换为一个集合时才真正的运行查询命令。因此,直到return View语句,才会运行查询语句。
作为还有一种为每个排序编写不同的LINQ语句的替代方法。能够使用动态创建LINQ句。
为Student Index视图加入列标题链接
打开Views\Student\Index.cshtml,加入以下的代码
@Html.ActionLink("Create New", "Create")
@Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm })
First Name
@Html.ActionLink("Enrollment Date", "Index", new { sortOrder = ViewBag.DateSortParm })
@foreach (var item in Model) {
上面的代码使用ViewBag属性使用对应的查询字符串来设置列标题链接的值。
执行项目,点击Last Name和Enrollment Date行标题,验证排序功能
点击Last Name标题。students 将按降序排列
2.向Students Index页面加入搜索框
要在Students Index页面中加入搜索功能,你须要在视图中加入一个文本框和一个提交button并改动Index方法,通过在文本框中输入 first name或者last name 来搜索对应的Students数据。
在Index方法中加入筛选功能
打开Controllers\StudentController.cs,使用以下的代码替换Index方法
public ViewResult Index(string sortOrder, string searchString)
{
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
ViewBag.DateSortParm = sortOrder == "Date" ?
"date_desc" : "Date"; var students = from s in db.Students select s; if (!String.IsNullOrEmpty(searchString)) { students = students.Where(s => s.LastName.ToUpper().Contains(searchString.ToUpper()) || s.FirstMidName.ToUpper().Contains(searchString.ToUpper())); } switch (sortOrder) { case "name_desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "date_desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: students = students.OrderBy(s => s.LastName); break; } return View(students.ToList()); }
上面的代码将searchString參数加入到Index方法。你也能够向LINQ语句中加入where子句来查询那些first name 或者 last name中包括查询条件的student。
查询条件就是你所填写在Index视图的文本框中的字符串,仅仅有当文本框中由查询条件时。where语句才会运行。
注意:在非常多情况下,你能够调用不管该是Entity Framework实体集中的方法还是位于内存集合中的作为扩展的方法,得到的结果一般是一样的,可是有些情况下可能不同。
举例来说。.NET Framework实现了Contains方法,当你向该方法传递一个空字符串作为參数时,它将返回全部行,可是在SQL Server Compact 4.0的 Entity Framework提供程序中不反回不论什么行,因此上面的代码(将where语句放在if语句中)能够确保全部SQL Server版本号都能返回同样的结果。另外,.NET Framework实现的Contains方法默认是大写和小写敏感的,可是Entity Framework SQL Server 提供程序运行的比較是不区分大写和小写的。
因此。此处调用ToUpper方法来明白这里运行不区分大写和小写的比較,这样当接下来使用仓储模式时不须要改动代码就能够得到同样的结果(IEnumerable集合中的Contains方法是由 .NET Framework实现的,IQueryable对象中的Contains方法是由数据库提供程序实现的)。
对于不同的数据库提供程序或者使用IQueryable对象作比較或者使用IEnumerable集合作比較时,Null值得处理也是不同的。比如某些情况下,where条件比方table.Column !=0可能不返回那些包括null值得列。
在Student Index 视图中加入一个搜索框
打开Views\Student\Index.cshtml,加入例如以下代码
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm())
{
Find by name: @Html.TextBox("SearchString")
}
执行项目。输入要搜索的值,点击Search验证搜索功能是否正常
注意在URL中并不包括搜索字符串,这意味着假设你将此页面增加书签,然后通过书签来打开此页面。你将无法得到筛选后的结果。
在Students Index页面中加入分页功能
要向Students Index页面中加入分页,你须要安装PagedList.Mvc NuGet包。然后你能够在Index 方法中做一些改动并在Index视图中加入分页链接。PagedList.Mvc是ASP.NET MVC中众多分页和排序包中比較好的一个。这里仅仅是使用它来作为演示,并不是作为推荐选择。
安装PagedList.Mvc NuGet包
PagedList包作为PagedList.Mvc包的依赖项会自己主动安装到项目中。PagedList包为IQueryable和IEnumable集合加入了PagedList集合类型和扩展方法。
PagedList扩展方法为从IQueryabl或IEnumable集合产生的PagedList集合数据创建了一个单一的页面。而且PagedList集合提供了多个便于分页的属性和方法。PagedList.Mvc包中含有分页帮助器并可在页面中显示分页button。
依次打开Tools-> Library Package Manager-> Package Manager Console
在打开的Package Manager Console中确保Package source是nuget.org 而且Default project是 ContosoUniversity,最后输入Install-Package PagedList.Mvc命令
在Index方法中加入分页功能
打开Controllers\StudentController.cs,加入PagedList命名空间
using PagedList;
使用以下的代码替换Index方法
public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ?
"name_desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ?
"date_desc" : "Date"; if (searchString != null) { page = 1; } else { searchString = currentFilter; } ViewBag.CurrentFilter = searchString; var students = from s in db.Students select s; if (!String.IsNullOrEmpty(searchString)) { students = students.Where(s => s.LastName.ToUpper().Contains(searchString.ToUpper()) || s.FirstMidName.ToUpper().Contains(searchString.ToUpper())); } switch (sortOrder) { case "name_desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "date_desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: // Name ascending students = students.OrderBy(s => s.LastName); break; } int pageSize = 3; int pageNumber = (page ??
1); return View(students.ToPagedList(pageNumber, pageSize)); }
上面的代码加入了一个page參数,一个当前排序顺序參数,一个当前搜索条件參数
public ActionResult Index(string sortOrder, string currentFilter, string searchString, int? page)
页面第一次显示或者用户还没有点击分页或排序链接。全部參数值都为null。假设点击分页链接,page变量将包括要显示的页码。
ViewBag属性向视图提供了当前的排序顺序,由于在点击分页链接后必需要保持当前的排序顺序。
ViewBag.CurrentSort = sortOrder;
还有一个属性ViewBag.CurrentFiler向视图提供当前的搜索条件。该值必需要被包括在分页链接中以保证是针对搜索结果进行分页。同一时候在页面又一次显示时,搜索字符串必须显示在搜索框中。假设在分页时改动了搜索字符串。页码必需要被重置为1。由于新的搜索条件可导致不同的搜索结果。当向搜索框输入搜索字符串并点击提交button。这是searchString的值不为null。
if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}
在该方法的结尾部分,学生IQueryable对象的ToPagedList扩展方法将学生查询转换为一个支持分页的学生集合类型,并将该学生集合传递给视图
int pageSize = 3;
int pageNumber = (page ?
?
1); return View(students.ToPagedList(pageNumber, pageSize));
ToPagedList方法须要一个页码參数。两个问号表示空合并操作符(null-coalescing operator)。空合并操作符为nullable 类型指定默认值,表达式(page ?? 1)表示假设page值不为空就返回该值,否则返回1。
向 Student Index视图加入分页链接
打开Views\Student\Index.cshtml,使用以下的代码替换
@model PagedList.IPagedList
@using PagedList.Mvc;
@{
ViewBag.Title = "Students";
}
Students
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm("Index", "Student", FormMethod.Get))
{
Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
}
@Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm, currentFilter=ViewBag.CurrentFilter })
First Name
@Html.ActionLink("Enrollment Date", "Index", new { sortOrder = ViewBag.DateSortParm, currentFilter=ViewBag.CurrentFilter })
@foreach (var item in Model) {
@Html.DisplayFor(modelItem => item.LastName)
@Html.DisplayFor(modelItem => item.FirstMidName)
@Html.DisplayFor(modelItem => item.EnrollmentDate)
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
}
Page @(Model.PageCount < Model.PageNumber ?
0 : Model.PageNumber) of @Model.PageCount @Html.PagedListPager(Model, page => Url.Action("Index", new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))
页面顶部的@model语句指明视图如今获取的是PagedList对象而不是List对象。
using PagedList.Mvc语句能够使MVC帮助器提供分页button。
在代码中使用了 BeginForm 的重载方法并加入了FormMethod.Get 參数。
@using (Html.BeginForm("Index", "Student", FormMethod.Get))
{
Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
}
默认情况下BeginForm 使用POST方式提交表单数据,这意味着參数通过HTTP消息正文传递而不是通过URL查询字符串。当你指定使用HTTP GET时。表单数据通过URL查询字符串来传递。这样能够同意用户将URL保存为书签。
W3C guidelines for the use of HTTP GET推荐你应该在不会更新数据的方法中使用GET方式。
搜索框使用当前的搜索字符串进行初始化,以便在分页的时候不会丢失搜索字符串。
Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
列标题链接使用了搜索字符串并将其传递给控制器以便用户能够对搜索结果进行排序。
@Html.ActionLink("Last Name", "Index", new { sortOrder=ViewBag.NameSortParm, currentFilter=ViewBag.CurrentFilter })
显示当前页码和总页数
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
假设没有要显示的页。就显示"Page 0 of 0"
PagedListPager帮助器显示分页button
@Html.PagedListPager( Model, page => Url.Action("Index", new { page }) )
PagedListPager帮助器提供了多个选项。你能够自己定义URL和样式
执行项目
使用不同的排序方式。并点击分页button跳转至不同的页码,确保分页功能正常,然后输入查询条件,再次验证分页和搜索功能正常。
3.创建显示学生统计信息的About页面
要让About页面显示在每个入学日共同拥有多少学生登记,须要将学生分组并进行简单的计算,要做到这些。须要运行下列操作:
须要为要传递给视图的数据创建一个视图模型类
改动Home控制器中的About方法
改动About视图
创建视图模型 创建一个ViewModels目录并加入名为EnrollmentDataGroup.cs的类,使用以下的代码替换
using System;
using System.ComponentModel.DataAnnotations;
namespace ContosoUniversity.ViewModels
{
public class EnrollmentDateGroup
{
[DataType(DataType.Date)]
public DateTime? EnrollmentDate { get; set; }
public int StudentCount { get; set; }
}
}
改动Home控制器
打开HomeController.cs,在文件顶部加入using语句引入命名空间
using ContosoUniversity.DAL;
using ContosoUniversity.ViewModels;
为数据库上下文加入类变量
public class HomeController : Controller
{
private SchoolContext db = new SchoolContext();
使用以下的代码替换About方法
public ActionResult About()
{
IQueryable data = from student in db.Students
group student by student.EnrollmentDate into dateGroup
select new EnrollmentDateGroup()
{
EnrollmentDate = dateGroup.Key,
StudentCount = dateGroup.Count()
};
return View(data.ToList());
}
使用LINQ语句对Student实体依照enrollment date分组。计算每一个分组的实体数量,并将结果存储在EnrollmentDateGroup视图模型对象的集合中。
加入Dispose方法
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
改动About视图
打开Views\Home\About.cshtml ,使用以下的代码替换
@model IEnumerable
@{
ViewBag.Title = "Student Body Statistics";
}
Student Body Statistics
Enrollment Date
Students
@foreach (var item in Model) {
@Html.DisplayFor(modelItem => item.EnrollmentDate)
@item.StudentCount
}
执行项目,点击About链接。显示学生统计信息
欢迎转载,请注明文章出处:http://blog.csdn.net/johnsonblog/article/details/38795465
还大家一个健康的网络环境,从你我做起
项目源代码:https://github.com/johnsonz/MvcContosoUniversity
THE END
你可能感兴趣的:(MVC5 Entity Framework学习参加排序、筛选和排序功能)
单机和微服务的区别,微服务有什么问题?数据一致性问题怎么解决?幂等问题怎么解决?
蒂法就是我
微服务 架构 云原生
单机与微服务的区别架构模式:单机架构:整个应用程序部署在一台机器上,通常是一个大型的单体应用。所有的功能模块紧密耦合,难以单独进行升级与扩展。微服务架构:应用程序被拆分为一组小的、独立的服务,每个服务通过API进行通信。服务可以被独立开发、部署和扩展。部署与扩展:单机架构:任何变更都需重新部署整个应用,扩展通常需要增加更强的单一硬件。微服务架构:每个服务可以独立部署,支持快速迭代与独立扩展,容易应
基于STM32L4XX、HAL库的FM24CL16B铁电存储器 驱动程序设计
July工作室
STM32 外设驱动程序设计 stm32 嵌入式硬件 单片机
一、简介:FM24CL16B是一款由Cypress(现为Infineon)生产的16Kbit(2Kx8)串行FRAM(铁电随机存取存储器)芯片。FRAM结合了RAM和ROM的优点,具有非易失性、高速读写、低功耗等特点。FM24CL16B通过I2C接口与微控制器通信,支持标准模式(100kHz)和快速模式(400kHz)。二、硬件接口:FM24CL16B的硬件接口非常简单,主要引脚如下:VDD:电源
HTML5 Canvas制作雪花飘落动画
坚持坚持那些年
本文还有配套的精品资源,点击获取简介:HTML5引入了Canvas元素,它赋予网页设计师丰富的绘图能力,允许通过JavaScript实现复杂的动画效果。本文将介绍如何结合HTML5的Canvas元素和JavaScript创建一个全屏的雪花飘落背景动画。通过定义雪花对象、创建雪花数组、编写主循环并利用requestAnimationFrame来绘制和更新雪花位置,我们能够实现一个逼真的雪花飘落动画效
Poe AI推出Previews预览功能!对标Claude Artifacts!
AI信息Gap
人工智能 ai gpt OpenAI chatgpt
Anthropic在发布最新模型Claude3.5Sonnet时,同时官宣了一个针对ClaudeAI重要的更新,那就是Artifacts。新功能Artifacts允许Claude用户在与聊天机器人的对话之外,通过一个专门的窗口分享、编辑和构建重要的独立内容。这些内容通常是超过15行的文本、代码片段、HTML网页、SVG图像、图表和交互式React组件等。用户可以在专用窗口中查看、复制和编辑这些内容
服务器ws证书,C#使用带有ssl和服务器证书的ws-security webservice无法为具有权限的SSL / TLS Build 安全通道...
王振升
服务器ws证书
我必须使用带有SSL证书和服务器证书的javawebservice.我获得了TLS证书和WSS证书我的app.config:binding="customBinding"bindingConfiguration="customB"behaviorConfiguration="myBehavior"contract="ServiceReference1.MyClient"name="Name">me
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
web18285997089
面试 学习路线 阿里巴巴 spring boot java 后端
在SpringBoot项目中,有时候我们希望根据配置文件中的某个属性值来决定是否启用某个功能或加载某个组件。此时,@ConditionalOnProperty注解就可以发挥作用。它通过配置文件的属性值控制Bean或配置类的加载,使得我们的程序更具灵活性。本文将详细介绍@ConditionalOnProperty的用法,并通过功能开关和环境配置两个实际场景来展示它的强大之处。1.@Condition
Python机器学习实战:使用Flask构建机器学习API
AI天才研究院
DeepSeek R1 & 大数据AI人工智能大模型 AI大模型企业级应用开发实战 大厂Offer收割机 面试题 简历 程序员读书 硅基计算 碳基计算 认知计算 生物计算 深度学习 神经网络 大数据 AIGC AGI LLM Java Python 架构设计 Agent 程序员实现财富自由
Python机器学习实战:使用Flask构建机器学习API作者:禅与计算机程序设计艺术/ZenandtheArtofComputerProgramming1.背景介绍1.1问题的由来在数据科学和机器学习领域,模型训练和部署一直是重要的挑战。传统的机器学习项目往往采用独立的脚本或复杂的流程,难以实现模型的自动化、可视化和复现。为了解决这一问题,将机器学习模型封装成可访问的API变得越来越流行。Fla
ROS实践(三)xacro文件基础(urdf扩展)
简约少年
ROS 机器人 xacro
目录一、定义二、xacro文件常见组成部分1.命名空间声明2.定义宏3.调用宏4.定义参数5.条件语句6.转换xacro文件为urdf7.gazebo标签三、代码示例1.gazebo标签使用(仿真参数配置)2.引用仿真配置并定义机器人模型(结构)四、加载仿真模型(含传感器的机器人)1.编写launch文件。2.实际效果。一、定义通俗来说,xacro就是urdf文件的一种“进阶版”,它是用来简化和优
Html5学习教程,从入门到精通, HTML5超链接应用的详细语法知识点和案例代码(18)
知识分享小能手
网页开发 前端开发 编程语言如门 html5 学习 前端 html java 后端 css3
HTML5超链接应用的详细语法知识点和案例代码超链接(Hyperlink),也称为跃点链接,是互联网和文档编辑中的一种重要概念。超链接的定义超链接是指从一个网页指向一个目标的连接关系,这个目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是一个图片、动画、程序、电子邮件地址、文件,甚至是一个音视频文件。如果点击了这个链接,当前页面的位置就会跳转到被链接的目标位置。在文档编辑中,超链接可以链
jvm的gc过程
18你磊哥
jvm
先回忆一下JVM的内存结构和GC的基本原理。JVM的内存主要分为堆、栈、方法区等,而GC主要发生在堆内存里。堆又分为新生代和老年代,新生代包括Eden区、Survivor区(From和To),老年代则是长期存活的对象所在。首先,用户可能想了解GC是如何工作的,不同的垃圾收集器有什么不同,比如Serial、Parallel、CMS、G1、ZGC等。但可能他们需要的是基础流程,比如标记-清除、复制、标
Django框架的全面指南:从入门到高级
步入烟尘
Python超入门指南全册 django sqlite 数据库
本文已收录于《Python超入门指南全册》本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从基础到精通不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/mrdeam/category_12647587.html优点:订阅限时19.9付费专栏,私信博主还可进入全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以
Spring+SpringMVC项目中的容器初始化过程
m0_74824044
面试 学习路线 阿里巴巴 spring java 后端
文章目录容器初始化过程初始化过程简单概括初始化过程初始化流程图Filter、Servlet等无法自动注入Bean容器初始化过程web.xml配置文件ssmdemocontextConfigLocation/WEB-INF/spring/spring-context.xml启动spring容器org.springframework.web.context.ContextLoaderListenero
Spring Boot 集成 Kettle
m0_74824112
面试 学习路线 阿里巴巴 spring boot 后端 java
Kettle简介Kettle最初由MattCasters开发,是Pentaho数据集成平台的一部分。它提供了一个用户友好的界面和丰富的功能集,使用户能够轻松地设计、执行和监控ETL任务。Kettle通过其强大的功能和灵活性,帮助企业高效地处理大规模数据集成任务。主要组成部分Spoon:用途:Spoon是Kettle的图形化设计工具。用户可以使用Spoon设计和调试ETL转换和作业。功能:拖放式界面
书籍-《车辆动力学的控制应用》
自动驾驶人工智能无人驾驶汽车
书籍:ControlApplicationsofVehicleDynamics作者:JingshengYu,VladimirVantsevich出版:CRCPress编辑:陈萍萍的公主@一点人工一点智能下载:书籍下载-《车辆动力学的控制应用》01书籍介绍本书介绍了汽车动力学和控制理论的基本知识,并结合NILabVIEW软件产品的应用,为设计先进的车辆动力学及车辆系统控制器提供了实用且高度技术性的指
项目风险分析报告怎么写
项目风险评估
厘清项目背景、识别关键风险源、评估发生概率与影响、制定对应应对方案,是写好项目风险分析报告的四大核心步骤。看似简单的条目,却在实际操作中蕴含着深厚的方法论与经验积累。我个人特别强调“识别关键风险源”,因为若定位不准、范围过宽或过窄,都可能导致资源浪费或风险漏判。掌握准确的风险范围能帮助我们在后续的评估和应对阶段精准发力,避免将过多精力投入到不具备实际威胁的环节中。“识别关键风险源”的实质是通过系统
项目管理软件分类有哪些
项目管理
按功能分类、按部署方式分类、按行业特点分类、按项目管理思想分类,是当下主流的项目管理软件分类方式。其中,按功能分类可细分为进度管理、任务协作、风险控制、成本管控等多种类型,能够针对项目所需功能进行精确选型。项目管理软件选择需匹配企业现状和管理需求,如同“好马配好鞍”,才能事半功倍、提高效率与质量。在众多分类中,我个人尤其推荐按功能分类,因为它能让不同部门或不同阶段的工作需要一目了然,也更容易帮助管
探索Coco-Web:一款强大的H5创作工具
岑晔含Dora
探索Coco-Web:一款强大的H5创作工具去发现同类优质开源项目:https://gitcode.com/是一个开源的、基于Web的H5(HTML5)创作平台,旨在让开发者和设计师能够轻松地创建互动式的内容和应用。通过其直观的界面和丰富的功能,无论你是编程高手还是初学者,都能够利用Coco-Web制作出富有吸引力的数字内容。技术分析Coco-Web基于现代Web技术构建,包括:React.js:
探索CoreHTML5Canvas:创作动态Web图形的新工具
郁英忆
探索CoreHTML5Canvas:创作动态Web图形的新工具去发现同类优质开源项目:https://gitcode.com/是一个强大的JavaScript库,专为开发者设计,旨在简化和增强在Web上创建交互式和动画图形的能力。这个项目利用HTML5Canvas元素,提供了一个简洁且高效的API,让开发人员可以轻松地构建出丰富的2D渲染效果。技术分析HTML5Canvas是HTML5的一个重要特
websocket wss_使用wss和HTTPS / TLS保护WebSocket的安全
dnc8371
java python 数据库 安全 github
websocketwss这个博客的第50条提示,是的!技术提示#49说明了如何使用用户名/密码和Servlet安全机制保护WebSocket的安全。本技术提示将说明如何在WildFly上使用HTTPS/TLS保护WebSockets。让我们开始吧!创建一个新的密钥库:keytool-genkey-aliaswebsocket-keyalgRSA-keystorewebsocket.keystore
JavaEE 项目常见错误解决方案
一弦一柱
JavaEE 常见错误 中文乱码 JSP 404
JavaEE项目常见错误解决方案数据库连接JavaBean获取不到数据库字段值或出现意料之外的值业务中出现null或""404NOTFOUNDGET请求中文乱码form表单提交中文乱码最近的实训中,练了一个比较基础的项目,JSP+Servlet+JavaBean,完成两张表的CRUD操作,前端使用Bootstrap和JQuery,交互使用AJAX,IDE选用Eclipse,在时间比较仓促的情况下完
LLM大语言模型项目知识点总结——Gunicorn、Flask和Docker
NLP的小Y
语言模型 gunicorn flask
一、Flask框架1.1Blueprint流程:创建蓝图对象;在蓝图上定义路由和视图函数;在应用程序对象上注册蓝图(url_prefix参数指定蓝图的URL前缀)1.2CORS(app)Cross-OriginResourceSharing处理跨域的需求
[email protected] _request钩子函数,在正常执行的时候插入一些东西,先执行这个东西然后再正常执行(hook);并且先执行flas
如何实现和调试REST API中的摘要认证(Digest Authentication)
如何实现和调试RESTAPI中的摘要认证(DigestAuthentication)在保护RESTAPI时,开发者通常会在多种认证机制之间进行选择,其中摘要认证(DigestAuthentication)是一种常见的选择。本文探讨了使用摘要认证的原因,解释了其原理,提供了Java和Go语言的实现示例,并提供了测试该认证的工具和方法。为什么使用摘要认证来保护RESTAPI?摘要认证是一种安全的用户验
使用Spring Boot集成Kafka开发:接收Kafka消息的Java应用
YazIdris
java spring boot kafka
Kafka是一个分布式的流处理平台,它具有高吞吐量、可扩展性和容错性的特点。SpringBoot提供了与Kafka集成的便捷方式,使得开发者可以轻松地创建Kafka消息接收应用。本文将介绍如何使用SpringBoot集成Kafka开发,以及如何编写Java代码来接收Kafka消息。首先,确保你已经安装了Kafka和Zookeeper,并启动了它们。接下来,创建一个新的SpringBoot项目,并添
使用Nginx进行反向代理HTTPS服务
TechABC
nginx https 运维 服务器
Nginx是一款高性能的Web服务器和反向代理服务器,它能够处理大量并发连接并提供快速的服务。在本文中,我们将学习如何使用Nginx来配置反向代理HTTPS服务。下面是一个详细的配置示例,以帮助您实现此目标。首先,您需要确保已经安装了Nginx。您可以通过以下命令来安装Nginx:sudoaptupdatesudoaptinstallnginx安装完成后,您可以编辑Nginx的配置文件。该文件通常
一文详解,什么是外贸订单管理系统?有什么功能和特点?
随着全球贸易的快速发展,外贸企业面临订单处理效率低、流程复杂、数据管理混乱等挑战。如何通过数字化工具实现订单全生命周期管理?外贸订单管理系统应运而生。本文将以ZohoBooks为例,解析其核心功能与价值。一、什么是外贸订单管理系统?1、什么是外贸订单管理系统?外贸订单管理系统是一种专门用于管理国际贸易订单的软件工具。它帮助企业跟踪和管理从客户下单到订单完成的整个流程,包括订单录入、订单审核、订单分
【排序算法】选择排序
啥也不会干的小码
排序算法 排序算法 算法 c语言
一、定义:选择排序(Selectionsort)是一种简单直观的排序算法。第一次从待排序的数据(元素)中选出最小(或最大)的一个元素,存放在数组的起始位置,然后再从剩余的没有排序的元素中寻找到最小(大)元素,然后放到已排序的数组的末尾。以此类推,直到全部待排序的数据元素的个数为零。对于数据量大的排序就没啥用了,排的比较慢。二、原理:1、对于待排序的数组,我们从首元素开始,将首元素的下标用min记住
Sijia_y的个人经历以及计算机行业发展
Sijia_y
python
如今互联网发展的速度甚是快,以至于技术都在更新迭代。稍有不注意可能就会被淘汰甚至是替代。作为一名中专生,我的成绩也是很差。因为高中考不上的缘故,来到了江苏上学。计算机行业我了解的并不是很多,当时只是听说工资高,铁饭碗。我是一个很懒的人,也是很贪玩。并没有学习很高的兴趣。我接触编程语言,完全是因为我的朋友。因为他是自学C语言的,后面他参加比赛得奖了。我就觉得非常厉害。我就开始学习Python,学会一
10 大中文医学数据集汇总:涵盖神农中医药、中医药古籍、医学推理、医学问答……
医疗人工智能的快速发展离不开高质量数据集的支持。从疾病诊断到药物研发,再到个性化医疗,数据集在推动机器视觉、大模型等应用于医学领域中发挥着不可或缺的作用。医学数据集的形式多样,涵盖了不同维度和领域的数据资源。例如,在疾病诊断领域,像RJUA-QA这样的问答数据集推动了复杂医学知识的自动化应用;而在中医药领域,神农中医药数据集整合了传统中医药文献、临床案例和药方数据。针对于此,本文整理了医学领域的1
归并排序(二叉树的后续遍历思想和数组的双指针技巧)
冰火同学
力扣 算法 排序算法 数据结构
这次归并排序就只讲思路了,代码实现放到下次刷题再做首先确认一下归并排序的时间复杂度是NlogN的时间复杂度。实现归并排序的算法,我认为有几个困难需要克服掉1、首先就是要明确归并排序的算法思想,就是二叉数据的后序遍历,就是先从中间分割成两个子数组,然后继续分,直到只剩下一个元素,那么此时就是有序的,这个和构造二叉树时的分解思想十分相似,把子问题全部解决,那问题也就都解决了,至于我们只关注其中一个节点
讲一下Spark的shuffle过程
冰火同学
Spark spark 大数据 分布式
首先Spark的shuffle是Spark分布式集群计算的核心。Spark的shuffle可以从shuffle的阶段划分,shuffle数据存储,shuffle的数据拉取三个方面进行讲解。首先shuffle的阶段分为shuffle的shufflewrite阶段和shuffleread阶段。shufflewrite的触发条件就是上游的Stage任务shuffleMapTask完成计算后,会哪找下游S
java解析APK
3213213333332132
java apk linux 解析APK
解析apk有两种方法
1、结合安卓提供apktool工具,用java执行cmd解析命令获取apk信息
2、利用相关jar包里的集成方法解析apk
这里只给出第二种方法,因为第一种方法在linux服务器下会出现不在控制范围之内的结果。
public class ApkUtil
{
/**
* 日志对象
*/
private static Logger
nginx自定义ip访问N种方法
ronin47
nginx 禁止ip访问
因业务需要,禁止一部分内网访问接口, 由于前端架了F5,直接用deny或allow是不行的,这是因为直接获取的前端F5的地址。
所以开始思考有哪些主案可以实现这样的需求,目前可实施的是三种:
一:把ip段放在redis里,写一段lua
二:利用geo传递变量,写一段
mysql timestamp类型字段的CURRENT_TIMESTAMP与ON UPDATE CURRENT_TIMESTAMP属性
dcj3sjt126com
mysql
timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下:
1.
CURRENT_TIMESTAMP
当要向数据库执行insert操作时,如果有个timestamp字段属性设为
CURRENT_TIMESTAMP,则无论这
struts2+spring+hibernate分页显示
171815164
Hibernate
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。
1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:
public in
构建自己的Wrapper应用
g21121
rap
我们已经了解Wrapper的目录结构,下面可是正式利用Wrapper来包装我们自己的应用,这里假设Wrapper的安装目录为:/usr/local/wrapper。
首先,创建项目应用
&nb
[简单]工作记录_多线程相关
53873039oycg
多线程
最近遇到多线程的问题,原来使用异步请求多个接口(n*3次请求) 方案一 使用多线程一次返回数据,最开始是使用5个线程,一个线程顺序请求3个接口,超时终止返回 缺点 测试发现必须3个接
调试jdk中的源码,查看jdk局部变量
程序员是怎么炼成的
jdk 源码
转自:http://www.douban.com/note/211369821/
学习jdk源码时使用--
学习java最好的办法就是看jdk源代码,面对浩瀚的jdk(光源码就有40M多,比一个大型网站的源码都多)从何入手呢,要是能单步调试跟进到jdk源码里并且能查看其中的局部变量最好了。
可惜的是sun提供的jdk并不能查看运行中的局部变量
Oracle RAC Failover 详解
aijuans
oracle
Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。
Oracle 10g RAC 的Failover 可以分为3种:
1. Client-Si
form表单提交数据编码方式及tomcat的接受编码方式
antonyup_2006
JavaScript tomcat 浏览器 互联网 servlet
原帖地址:http://www.iteye.com/topic/266705
form有2中方法把数据提交给服务器,get和post,分别说下吧。
(一)get提交
1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。
对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:
JS初学者必知的基础
百合不是茶
js函数 js入门基础
JavaScript是网页的交互语言,实现网页的各种效果,
JavaScript 是世界上最流行的脚本语言。
JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。
JavaScript 被设计为向 HTML 页面增加交互性。
许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几乎每个人都有能力将小的
iBatis的分页分析与详解
bijian1013
java ibatis
分页是操作数据库型系统常遇到的问题。分页实现方法很多,但效率的差异就很大了。iBatis是通过什么方式来实现这个分页的了。查看它的实现部分,发现返回的PaginatedList实际上是个接口,实现这个接口的是PaginatedDataList类的对象,查看PaginatedDataList类发现,每次翻页的时候最
精通Oracle10编程SQL(15)使用对象类型
bijian1013
oracle 数据库 plsql
/*
*使用对象类型
*/
--建立和使用简单对象类型
--对象类型包括对象类型规范和对象类型体两部分。
--建立和使用不包含任何方法的对象类型
CREATE OR REPLACE TYPE person_typ1 as OBJECT(
name varchar2(10),gender varchar2(4),birthdate date
);
drop type p
【Linux命令二】文本处理命令awk
bit1129
linux命令
awk是Linux用来进行文本处理的命令,在日常工作中,广泛应用于日志分析。awk是一门解释型编程语言,包含变量,数组,循环控制结构,条件控制结构等。它的语法采用类C语言的语法。
awk命令用来做什么?
1.awk适用于具有一定结构的文本行,对其中的列进行提取信息
2.awk可以把当前正在处理的文本行提交给Linux的其它命令处理,然后把直接结构返回给awk
3.awk实际工
JAVA(ssh2框架)+Flex实现权限控制方案分析
白糖_
java
目前项目使用的是Struts2+Hibernate+Spring的架构模式,目前已经有一套针对SSH2的权限系统,运行良好。但是项目有了新需求:在目前系统的基础上使用Flex逐步取代JSP,在取代JSP过程中可能存在Flex与JSP并存的情况,所以权限系统需要进行修改。
【SSH2权限系统的实现机制】
权限控制分为页面和后台两块:不同类型用户的帐号分配的访问权限是不同的,用户使
angular.forEach
boyitech
AngularJS AngularJS API angular.forEach
angular.forEach 描述: 循环对obj对象的每个元素调用iterator, obj对象可以是一个Object或一个Array. Iterator函数调用方法: iterator(value, key, obj), 其中obj是被迭代对象,key是obj的property key或者是数组的index,value就是相应的值啦. (此函数不能够迭代继承的属性.)
java-谷歌面试题-给定一个排序数组,如何构造一个二叉排序树
bylijinnan
二叉排序树
import java.util.LinkedList;
public class CreateBSTfromSortedArray {
/**
* 题目:给定一个排序数组,如何构造一个二叉排序树
* 递归
*/
public static void main(String[] args) {
int[] data = { 1, 2, 3, 4,
action执行2次
Chen.H
JavaScript jsp XHTML css Webwork
xwork 写道 <action name="userTypeAction"
class="com.ekangcount.website.system.view.action.UserTypeAction">
<result name="ssss" type="dispatcher">
[时空与能量]逆转时空需要消耗大量能源
comsci
能源
无论如何,人类始终都想摆脱时间和空间的限制....但是受到质量与能量关系的限制,我们人类在目前和今后很长一段时间内,都无法获得大量廉价的能源来进行时空跨越.....
在进行时空穿梭的实验中,消耗超大规模的能源是必然
oracle的正则表达式(regular expression)详细介绍
daizj
oracle 正则表达式
正则表达式是很多编程语言中都有的。可惜oracle8i、oracle9i中一直迟迟不肯加入,好在oracle10g中终于增加了期盼已久的正则表达式功能。你可以在oracle10g中使用正则表达式肆意地匹配你想匹配的任何字符串了。
正则表达式中常用到的元数据(metacharacter)如下:
^ 匹配字符串的开头位置。
$ 匹配支付传的结尾位置。
*
报表工具与报表性能的关系
datamachine
报表工具 birt 报表性能 润乾报表
在选择报表工具时,性能一直是用户关心的指标,但是,报表工具的性能和整个报表系统的性能有多大关系呢?
要回答这个问题,首先要分析一下报表的处理过程包含哪些环节,哪些环节容易出现性能瓶颈,如何优化这些环节。
一、报表处理的一般过程分析
1、用户选择报表输入参数后,报表引擎会根据报表模板和输入参数来解析报表,并将数据计算和读取请求以SQL的方式发送给数据库。
2、
初一上学期难记忆单词背诵第一课
dcj3sjt126com
word english
what 什么
your 你
name 名字
my 我的
am 是
one 一
two 二
three 三
four 四
five 五
class 班级,课
six 六
seven 七
eight 八
nince 九
ten 十
zero 零
how 怎样
old 老的
eleven 十一
twelve 十二
thirteen
我学过和准备学的各种技术
dcj3sjt126com
技术
语言VB https://msdn.microsoft.com/zh-cn/library/2x7h1hfk.aspxJava http://docs.oracle.com/javase/8/C# https://msdn.microsoft.com/library/vstudioPHP http://php.net/manual/en/Html
struts2中token防止重复提交表单
蕃薯耀
重复提交表单 struts2中token
struts2中token防止重复提交表单
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年7月12日 11:52:32 星期日
ht
线性查找二维数组
hao3100590
二维数组
1.算法描述
有序(行有序,列有序,且每行从左至右递增,列从上至下递增)二维数组查找,要求复杂度O(n)
2.使用到的相关知识:
结构体定义和使用,二维数组传递(http://blog.csdn.net/yzhhmhm/article/details/2045816)
3.使用数组名传递
这个的不便之处很明显,一旦确定就是不能设置列值
//使
spring security 3中推荐使用BCrypt算法加密密码
jackyrong
Spring Security
spring security 3中推荐使用BCrypt算法加密密码了,以前使用的是md5,
Md5PasswordEncoder 和 ShaPasswordEncoder,现在不推荐了,推荐用bcrpt
Bcrpt中的salt可以是随机的,比如:
int i = 0;
while (i < 10) {
String password = "1234
学习编程并不难,做到以下几点即可!
lampcy
java html 编程语言
不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各 异,然而一旦掌握其中之一,其他的也就迎刃而解。作为初学者,你可能要先从Java或HTML开始学,一旦掌握了一门编程语言,你就发挥无穷的想象,开发 各种神奇的软件啦。
1、确定目标
学习编程语言既充满乐趣,又充满挑战。有些花费多年时间学习一门编程语言的大学生到
架构师之mysql----------------用group+inner join,left join ,right join 查重复数据(替代in)
nannan408
right join
1.前言。
如题。
2.代码
(1)单表查重复数据,根据a分组
SELECT m.a,m.b, INNER JOIN (select a,b,COUNT(*) AS rank FROM test.`A` A GROUP BY a HAVING rank>1 )k ON m.a=k.a
(2)多表查询 ,
使用改为le
jQuery选择器小结 VS 节点查找(附css的一些东西)
Everyday都不同
jquery css name选择器 追加元素 查找节点
最近做前端页面,频繁用到一些jQuery的选择器,所以特意来总结一下:
测试页面:
<html>
<head>
<script src="jquery-1.7.2.min.js"></script>
<script>
/*$(function() {
$(documen
关于EXT
tntxia
ext
ExtJS是一个很不错的Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力。ExtJS是一个用 javascript编写,与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。
ExtJs最开始基于YUI技术,由开发人员Jack
一个MIT计算机博士对数学的思考
xjnine
Math
在过去的一年中,我一直在数学的海洋中游荡,research进展不多,对于数学世界的阅历算是有了一些长进。为什么要深入数学的世界?作为计算机的学生,我没有任何企图要成为一个数学家。我学习数学的目的,是要想爬上巨人的肩膀,希望站在更高的高度,能把我自己研究的东西看得更深广一些。说起来,我在刚来这个学校的时候,并没有预料到我将会有一个深入数学的旅程。我的导师最初希望我去做的题目,是对appe