SpringMVC课堂笔记.docx
《SpringMVC课堂笔记.docx》由会员分享,可在线阅读,更多相关《SpringMVC课堂笔记.docx(19页珍藏版)》请在冰豆网上搜索。
SpringMVC课堂笔记
1SpringMVC课堂笔记
2高级参数绑定
2.1数组类型的参数绑定
基于批量删除商品操作完成参数传递。
Jsp修改
控制器修改
/**
*包装pojo传递演示
*第二天,演示数组参数的传递与List的传递
*@paramvo
*@return
*/
@RequestMapping("queryItem")
publicStringqueryItem(QueryVovo,Integer[]ids){
System.out.println(vo);
//输出传入的数组
if(ids!
=null&&ids.length>0){
for(Integerid:
ids){
System.out.println("传入的商品列表分别为:
"+id);
}
}
return"itemList";
}
2.2List类型的绑定
基于批量修改商品操作完成参数传递。
Jsp修改
控制器修改
POJO修改
3@RequestMapping注解的使用
3.1路径映射可以是数组
3.2@RequestMapping可以加在类头部,用于目录分级管理
3.3限定请求方法
4Controller方法返回值
4.1返回ModelAndView
参考第一天内容。
4.2返回void
4.2.1request
新建msg.jsp
4.2.2response
4.3返回String
4.3.1返回视图名字,参考第一天内容
4.3.2redirect与forward
5Springmvc中异常处理
思想:
做一个全局异常处理器,处理所有没有处理过的运行时异常用于更友好地提示用户。
5.1步骤
5.1.1创建全局异常处理器
/**
*全局异常处理器
*@authorSteven
*
*/
publicclassCustomerExceptionimplementsHandlerExceptionResolver{
@Override
publicModelAndViewresolveException(HttpServletRequestrequest,HttpServletResponseresponse,Objecthanlder,
Exceptione){
//记录日志
e.printStackTrace();
//错误消息
Stringmsg="很抱歉,系统发生异常了,请联系管理员";
//响应用户错误提示
ModelAndViewmav=newModelAndView();
//返回错误消息
mav.addObject("msg",msg);
//响应错误提示页面
mav.setViewName("msg");
returnmav;
}
}
5.1.2配置异常处理器
5.1.3测试访问queryVoid.action
5.1.4更智能、更友好的提示,解决方案
5.1.4.1新建自定义异常类
/**
*自定义异常
*@authorSteven
*
*/
publicclassMyExceptionextendsException{
//错误消息
privateStringmsg;
publicMyException(){
super();
}
publicMyException(Stringmsg){
super();
this.msg=msg;
}
publicStringgetMsg(){
returnmsg;
}
publicvoidsetMsg(Stringmsg){
this.msg=msg;
}
}
5.1.4.2修改异常处理器,加上异常判断
5.1.4.3测试访问queryVoid.action
6图片上传处理
6.1配置虚拟目录
6.2加入上传功能需要的jar包
6.3配置多媒体解析器
--配置多媒体处理器-->
--注意:
这里id必须填写:
multipartResolver-->
--最大上传文件大小-->
6.4jsp修改
6.5编写图片上传处理代码
//图片上传用MultipartFile接收文件
@RequestMapping(value="updateItem",method={RequestMethod.POST,RequestMethod.GET})
publicStringupdateItem(Itemitem,Modelmodel,MultipartFilepicFile)throwsException{
//图片新名字
Stringname=UUID.randomUUID().toString();
//图片原名字
StringoldName=picFile.getOriginalFilename();
//后缀名
StringexeName=oldName.substring(oldName.lastIndexOf("."));
Filepic=newFile("D:
\\WebWork\\"+name+exeName);
//保存图片到本地磁盘
picFile.transferTo(pic);
//更新商品图片信息
item.setPic(name+exeName);
itemServices.update(item);
model.addAttribute("item",item);
model.addAttribute("msg","修改商品成功");
return"itemEdit";
}
7json数据交互
7.1加入jar包
7.2编码
/**
*json数据交互演示
*
*@paramitem2
*@return
*/
@RequestMapping("getItem")
//@ResponseBody把pojo转成json串响应用户
@ResponseBody
//@RequestBody用于接收用户传入json串转成pojo
publicItemgetItem(@RequestBodyItemitem2){
System.out.println("接收到的json商品数据为:
"+item2);
Itemitem=itemServices.getItemById(3);
returnitem;
}
7.3测试,安装google浏览器测试工具
详情可查看教案上的安装谷歌浏览器工具节点
8Springmvc实现Restful
8.1编码
/**
*RESTful风格演示
*
*@paramids
*@parammodel
*@return
*/
//RESTful风格url上的参数通过{}点位符绑定
//点位符参数名与方法参数名不一致时,通过@PathVariable绑定
@RequestMapping("/item/{id}")
publicStringtestRest(@PathVariable("id")Integerids,Modelmodel){
Itemitem=itemServices.getItemById(ids);
model.addAttribute("item",item);
return"itemEdit";
}
8.2测试
测试直接访问url{http:
//localhost:
8080/项目名/item/1.action}即可。
9拦截器
9.1拦截器开发流程
9.1.1创建拦截器
9.1.1.1一号拦截器
/**
*自定义拦截器
*@authorSteven
*
*/
publicclassMyInterceptor1implementsHandlerInterceptor{
//在Controller方法执行后被执行
//处理异常、记录日志
@Override
publicvoidafterCompletion(HttpServletRequestarg0,HttpServletResponsearg1,Objectarg2,Exceptionarg3)
throwsException{
System.out.println("MyInterceptor1.afterCompletion.....");
}
//在Controller方法执行后,返回ModelAndView之前被执行
//设置或者清理页面共用参数等等
@Override
publicvoidpostHandle(HttpServletRequestarg0,HttpServletResponsearg1,Objectarg2,ModelAndViewarg3)
throwsException{
System.out.println("MyInterceptor1.postHandle.....");
}
//在Controller方法执行前被执行
//登录拦截、权限认证等等
@Override
publicbooleanpreHandle(HttpServletRequestarg0,HttpServletResponsearg1,Objectarg2)throwsException{
System.out.println("MyInterceptor1.preHandle.....");
//返回true放行,false拦截
returntrue;
}
}
9.1.1.2二号拦截器,复制一号,修改一下系统输出消息
9.1.2配置拦截器
--拦截器定义-->
interceptors>
--定义一个拦截器-->
interceptor>
--path配置**>拦截所有请求,包括二级以上目录,*>拦截所有请求,不包括二级以上目录-->
mappingpath="/**"/>
interceptor>
--定义一个拦截器-->
interceptor>
--path配置**>拦截所有请求,包括二级以上目录,*>拦截所有请求,不包括二级以上目录-->
mappingpath="/**"/>
interceptor>
interceptors>
9.1.3测试流程,可参考教案
9.2拦截器案例应用,登录拦截器
9.2.1思路
1、有一个登录页面,需要写一个controller访问页面
2、登录页面有一提交表单的动作。
需要在controller中处理。
a)判断用户名密码是否正确
b)如果正确想session中写入用户信息
c)返回登录成功,或者跳转到商品列表
3、拦截器。
a)拦截用户请求,判断用户是否登录
b)如果用户已经登录。
放行
c)如果用户未登录,跳转到登录页面。
9.2.2login.jsp
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
用户登录
用户名:
密码:
9.2.3UserController
/**
*登录拦截器
*@authorSteven
*
*/
@Controller
@RequestMapping("user")
publicclassUserController{
/**
*跳转登录页面
*@return
*/
@RequestMapping("toLogin")
publicStringtoLogin(){
return"login";
}
/**
*用户登录
*@return
*/
@RequestMapping("login")
publicStringlogin(Stringusername,Stringpassword,HttpSessionsession){
Stringresult="login";
//断定用户是否允许登录
if(username!
=null){
session.setAttribute("username",username);
//登录成功,跳转商品列表
result="redirect:
/itemList.action";
}
returnresult;
}
}
9.2.4LoginInterceptor拦截器编码
这里省略类声名和其它两个方法。
//处理执行前被执行
//登录拦截、权限验证
@Override
publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objectarg2)throwsException{
Objectattribute=request.getSession().getAttribute("username");
if(attribute!
=null){
//放行,执行处理器
returntrue;
}else{
response.sendRedirect(request.getContextPath()+"/user/tologin.action");
//放行,执行处理器
returnfalse;
}
}
9.2.5拦截器配置
--登录拦截器-->
interceptor>
--path配置**>拦截所有请求,包括二级以上目录,*>拦截所有请求,不包括二级以上目录-->
mappingpath="/**"/>
--配置不拦截请求的地址-->
--exclude-mappingpath="/user/toLogin.action"/>
exclude-mappingpath="/user/login.action"/>-->
exclude-mappingpath="/user/*"/>
interceptor>