SpringMVC第二天笔记.docx
- 文档编号:10880623
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:34
- 大小:448.37KB
SpringMVC第二天笔记.docx
《SpringMVC第二天笔记.docx》由会员分享,可在线阅读,更多相关《SpringMVC第二天笔记.docx(34页珍藏版)》请在冰豆网上搜索。
SpringMVC第二天笔记
SpringMVC第二天
昨天的内容
一、什么是springmvc?
一个类似struts2的前端web框架。
二、Springmvc的入门程序
1、实现controller接口
2、实用性HttpRequestHandler接口
3、使用注解形式开发controller
a)在Controller上加上@Controller注解
b)方法上加上@RequestMapping注解
c)需要在springmvc的配置文件中添加一个包扫描器。
三、Springmvc的框架结构
请求先到前端控制器DispatcherServlet,到处理器映射器中找url对应的handler,返回HandlerExecutionChain,执行链中包含拦截器和handler。
执行handler使用处理器适配器执行,执行完handler返回ModelAndView对象,需要视图解析器将逻辑视图转换成物理视图,渲染视图。
4、springmvc整合mybatis
整合的思路是spring容器关联mapper对象、server、Controller。
事务配置在service层由spring容器关联
5、参数映射
a)简单数据类型,需要页面中input的name属性和方法的形参名称一致。
不一致,使用@Requestparam注解转换
b)Pojo类型name属性和pojo中的属性名称一致。
c)默认支持的参数类型
i.HttpServletRequest
ii.httpservletResponse
iii.HttpSession
iv.Model/ModelMap
d)自定义参数绑定
1、实现converter接口,需要泛型一个是Source、Target
2、配置到springmvc.xml中
3、配置的converterService配置到Annotation-driven标签中。
课程计划
1、参数绑定的高级应用
a)绑定包装的pojo类型
b)集合类型
i.List
ii.数组
iii.Map
2、Handler的返回值
3、有效性验证validation(了解)
4、参数回显(掌握)
5、异常处理,架构级别的异常处理(了解)
6、上传图片(掌握)
7、Json数据交换(掌握)
8、Restful风格的实现,url模板映射(了解)
9、拦截器(掌握)
参数绑定的高级应用
包装pojo类型的绑定
多条件查询时就会用到包装类型的pojo
创建一个queryVo对象,包含Items对象。
实现步骤
创建一个QueryVo
publicclassQueryVo{
privateItemsitems;
publicItemsgetItems(){
returnitems;
}
publicvoidsetItems(Itemsitems){
this.items=items;
}
}
修改Controller
在itemsList方法中添加一个QueryVo参数。
查询省略。
修改jsp
集合类型的参数绑定
当批量删除是需要页面向后台传递一个id数组类型。
绑定数组类型
修改queryVo
publicclassQueryVo{
privateItemsitems;
privateInteger[]ids;
publicInteger[]getIds(){
returnids;
}
publicvoidsetIds(Integer[]ids){
this.ids=ids;
}
publicItemsgetItems(){
returnitems;
}
publicvoidsetItems(Itemsitems){
this.items=items;
}
}
修改jsp页面
绑定List
修改QueryVo
添加一个Items列表,目的是让页面传递过来一个商品列表,就可以批量更新商品信息。
修改jsp
forEachitems="${itemsList}"var="items"varStatus="s"> value=" formatDatevalue="${items.createtime}"pattern="yyyy-MM-ddHH: mm: ss"/>"/> id=${items.id}">修改
forEach>
实现效果
绑定Map类型(自己实现)
在包装类中定义Map对象,并添加get/set方法,action使用包装对象接收。
包装类中定义Map对象如下:
PublicclassQueryVo{
privateMap
//get/set方法..
}
页面定义如下:
姓名:
年龄:
......
Contrller方法定义如下:
publicStringuseraddsubmit(Modelmodel,QueryVoqueryVo)throwsException{
System.out.println(queryVo.getStudentinfo());
}
Handler的返回值
一个handler就是一个方法,对应一个url。
ModelAndView
返回模型数据和视图名称。
返回String类型
字符串代表的就是视图的名称,也就是逻辑视图。
返回String类型中重定向redirect
商品修改完毕后跳转到商品列表。
@RequestMapping("/editItemsSubmit")
publicStringeditItemsSubmit(Itemsitems)throwsException{
//Itemsitems=newItems();
//items.setId(id);
//items.setName(name);
//items.setCreatetime(createtime);
//items.setDetail(detail);
//items.setPrice(price);
//更新数据库
itemsService.updateItmes(items);
//return"success";
//商品更新完毕后跳转到商品列表页面,使用redirect
return"redirect:
/itemsList.action";
}
返回String类型中重定向forward
@RequestMapping("/editItemsSubmit")
publicStringeditItemsSubmit(Itemsitems)throwsException{
//Itemsitems=newItems();
//items.setId(id);
//items.setName(name);
//items.setCreatetime(createtime);
//items.setDetail(detail);
//items.setPrice(price);
//更新数据库
itemsService.updateItmes(items);
//return"success";
//商品更新完毕后跳转到商品列表页面,使用redirect
//return"redirect:
/itemsList.action";
//forward跳转是共享request,当前request中包含id属性,跳转到editItems处理器中同样request中包含id属性。
//方法是forwardj+:
+要跳转的url
return"forward:
/editItems.action";
}
返回void
@RequestMapping("/itemsList2")
//返void
publicvoiditemsList2(QueryVoqueryVo,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
//查询商品列表
List
//将结果返回到页面
request.setAttribute("itemsList",itemsList);
//跳转到页面
//使用request时必须是jsp的全路径
request.getRequestDispatcher("/WEB-INF/jsp/itemsList.jsp").forward(request,response);
}
返回json数据或者是xml数据
//返void
publicvoiditemsList2(QueryVoqueryVo,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
//查询商品列表
List
//将结果返回到页面
request.setAttribute("itemsList",itemsList);
//跳转到页面
//使用request时必须是jsp的全路径
//request.getRequestDispatcher("/WEB-INF/jsp/itemsList.jsp").forward(request,response);
//返回json数据
response.setCharacterEncoding("utf-8");
response.setContentType("application/xml;charset=utf-8");
Stringxml="
xmlversion=\"1.0\"encoding=\"UTF-8\"?
>\n"+
" xsi=\"http: //www.w3.org/2001/XMLSchema-instance\"\n"+ "xmlns=\"xmlns: web=\"+ "xsi: schemaLocation=\"+ "id=\"WebApp_ID\"version=\"2.5\">\n"+ " " " " " " " " "\n"+ " --spring容器配置-->\n"+ " --加载spring容器-->\n"+ " " " spring/ApplicationContext-*.xml\n"+ "\n"+ " " "\n"+ " --springmvc的前端控制器-->\n"+ " " " " --contextConfigLocation不是必须的,如果不配置contextConfigLocation,springmvc的配置文件默认在: WEB-INF/servlet的name+\"-servlet.xml\"-->\n"+ " " " spring/springmvc.xml\n"+ "\n"+ " "\n"+ " " " "\n"+ " --解决post乱码-->\n"+ " " " " " " "\n"+ "\n"+ " " " "\n"+ ""; response.getWriter().write(xml); } @RequestMapping注解 1、配置url到handler的映射关系 2、窄化请求映射 如果url中不加任何修饰是就是一个相对路径,相对当前路径来说。 限定请求方法 @RequestMapping(value="/editItemsSubmit",method=RequestMethod.POST) Springmvc和struts2的区别 1、前端控制器springmvc是DispatcherServlet。 Struts2是Filter。 2、Springmvc处理请求是使用使用方法来处理,接收页面传递过来的参数是使用方法的形参。 Struts2接收页面参数使用类级成员变量就是类的属性。 如果是使用属性接收参数是线程不安全的,struts2配置时需要配置成多例。 Springmvc使用方法的形参接收参数。 是线程安全的,springmvc中controller都是单例的。 3、返回值传递方法,springmvc是使用request传递参数。 Struts2使用值栈。 有效性验证validation(了解) 一般使用js校验。 不太安全,如果安全性要求高的话需要使用后台校验。 原理 Springmvc实现了jsr-303标准,是oracle公司出的标准。 但是springmvc中并没有实现,想使用校验需要加上实现类。 Hibernate提供了以实现的校验器。 和hibernate框架无任何关系。 需要加入hibernate校验器的jar包。 需求 修改商品时,对商品的有效性进行验证,验证商品的名称字符必须是大于1小于30,商品的价格必须输入。 实现步骤 第一步: 配置validator。 在springmvc.xml中配置。 然后再添加到annotation-driven节点中。 第二步: 编写校验规则。 需要添加到pojo类中 第三步: 接收错误消息。 需要在controller中接收。 1、需要在pojo参数前加@Validator注解 2、Pojo参数后添加一个参数BindingResult参数。 一个pojo后紧跟一个BindingResult 第四步: 需要把错误消息添加到request域中传递到页面 第五步: 在页面显示错误消息。 配置validator --配置validator--> --校验器--> class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> --校验器--> --指定校验使用的资源文件,如果不指定则默认使用classpath下的ValidationMessages.properties--> --校验错误信息配置文件--> class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> --资源文件名--> CustomValidationMessages --资源文件编码格式--> --对资源文件内容缓存时间,单位秒--> --注解驱动,配置了这个节点就相当于配置了注解形式的处理器映射器和适配器--> annotation-drivenconversion-service="conversionService"validator="validator"/> CustomValidationMessages.properties items.name.size.error=商品名称的长度必须大于1小于30 items.price.isnull=商品价格不能为空 添加校验规则 Controller添加校验 @RequestMappin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SpringMVC 第二 笔记