springmvc入门已经写完了,现在补充一点它的主要深入的知识:高级参数绑定、@RequestMapping的几种用法、Controller方法返回值解析、springmvc异常处理、日期转换器实现、图片上传处理、json交互、restful风格实现及拦截器的实现,这些在企业中都是用的比较多的知识点。如果掌握了这些知识,恭喜你,springmvc可以说是掌握了。
下面我将分别对这些知识进行运用及总结:
一、高级参数绑定
1、数组的参数绑定
应用场景:批量删除(在页面上多选或者全选,获取它们的id数组,然后做批量删除操作)
(1)通过普通参数实现
jsp页面:
controller页面:
service层调用dao层,逆向工程:
(2)、通过包装类实现
jsp页面、dao层页面不需要修改,只需要添加一个包装类,修改controller参数
包装类:
package com.xue.utils;
/**
* 包装类
* @author xuexue
*
*/
public class Utils {
//商品id数组
private Integer[] ids;
public Integer[] getIds() {
return ids;
}
public void setIds(Integer[] ids) {
this.ids = ids;
}
}
controller页面:
2、List类型的参数绑定
应用场景:批量修改
包装类:
package com.xue.utils;
import java.util.List;
import com.xue.pojo.Item;
/**
* 包装类
* @author xuexue
*
*/
public class Utils {
//商品id数组
private Integer[] ids;
//商品集合
private List<Item> item;
public List<Item> getItem() {
return item;
}
public void setItem(List<Item> item) {
this.item = item;
}
public Integer[] getIds() {
return ids;
}
public void setIds(Integer[] ids) {
this.ids = ids;
}
@Override
public String toString() {
return "Utils [item=" + item + "]";
}
}
jsp页面:
controller页面:
@RequestMapping(value="update", method=RequestMethod.POST)
public String updateByItemList(Utils utils) {
//得到包装类的商品集合
List<Item> item = utils.getItem();
//创建一个新的集合,用来筛选被选中的商品
List<Item> itemCopy = new ArrayList<Item>();
//获取别选中商品的id
Integer[] ids = utils.getIds();
for (Integer id : ids) {
for (Item itemd : item) {
if (itemd.getId() == id) {//如果商品id等于被选中的商品id,则是要修改的商品id,添加到新的集合
itemCopy.add(itemd);
}
}
}
itemService.updateByItemList(itemCopy);
return "redirect:item.action";
}
service层调用逆向工程dao层:
@Override
public void updateByItemList(List<Item> itemCopy) {
for (Item item : itemCopy) {
itemMapper.updateByPrimaryKeySelective(item);
}
}
注意:400错误优先考虑参数传递出错!日期转换最容易出错,下面第五个知识点解决这一出错,手写日期转换器。
二、@RequestMapping注解使用
1、绑定地址
绑定多个地址用法 应用场景:刚开发时可能需要约定方法名,后面方法名修改了,可以多加个地址绑定
2、分目录管理
分目录管理项目 应用场景:当方法太多时,在类上加@RequestMapping("item"),方法也加。访问时多加/item/
3、请求方法限定
method=RequestMethod.POST等等默认是get,支持多个时,写:method={RequestMethod.POST,RequestMethod.GET}
注意:乱码解决:当get请求修改时,乱码,web.xml只能配置post编码格式转换。解决方法:1、默认是osi编码,把修改对象转码成utf-8(不推荐使用,太麻烦)2、在tomcat服务器中,修改配置文件server.xml,在<Connector 加URIEncoding="utf-8"
三、Controller方法返回值解析
1、方法返回void值,页面用转发和重定向实现(不推荐使用)
转发:通过原始request响应页面request.getRequestDispatcher("全路径").forward(request,response);注意,通过这个转发不经过视图解析器的,所以要全路径 。特点:地址不变,一次请求一次响应,客户端进行
重定向:response响应页面,response.sendRedirect();特点:地址改变,两次请求两次响应,在服务端进行
2、方法返回ModelAndView(模型与视图),入门篇已经介绍,不多说(不推荐使用)
3、方法返回String(推荐使用)
(1)、直接返回String,不需要后缀,视图解析器解析返回对应页面
(2)、通过转发和重定向返回String,需要后缀,将通过其它@RequestMapping对应页面
四、springmvc异常处理
实现步骤:
1、自定义异常处理器(需要实现HandlerExceptionResolver接口)
package com.xue.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
/**
* 全局异常处理器
* @author xuexue
*
*/
public class CustomerExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception e) {
ModelAndView mav = new ModelAndView();
mav.addObject("msg","页面出现错误了!");
mav.setViewName("msg");
return mav;
}
}
2、在springmvc核心配置文件声明自己定义的异常处理器
3、jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>异常错误提示</title>
</head>
<body>
${ msg }
</body>
</html>
4、controller页面(随便写一个1/0错误)
5、测试运行
五、json交互
见博客springmvc json数据交互 https://blog.csdn.net/qq_41055045/article/details/89414414
六、日期转换器实现
见博客springmvc 日期转换器实现 https://blog.csdn.net/qq_41055045/article/details/89429513
七、图片上传处理
见博客springmvc 图片上传处理 https://mp.csdn.net/postedit/89429869
八、restful风格实现
见博客springmvc restful风格实现 https://blog.csdn.net/qq_41055045/article/details/89449586
九、拦截器实现
见博客springmvc 拦截器的实现 https://blog.csdn.net/qq_41055045/article/details/89453977