springmvc深入

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值