栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【SpringMVC框架入门】02- 请求参数绑定,controller方法返回值,整体异常处理,图片上传(fileupload),Json数据交互,RestFul支持,拦截器,登录权限验证

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【SpringMVC框架入门】02- 请求参数绑定,controller方法返回值,整体异常处理,图片上传(fileupload),Json数据交互,RestFul支持,拦截器,登录权限验证

总结: ☆1.参数绑定:(从请求中接收参数)
1)默认支持的类型:Request,Response,Session,Model
2)基本数据类型(包含String)
3)Pojo类型
4)Vo类型
5)Converter自定义转换器
6)数组
7)List
itemList.jsp
查询条件:
商品名称: 商品价格:
商品列表:
商品名称 商品价格 生产日期 商品描述 操作
"/> 修改
varStatus属性常用参数总结下:

${status.index} 输出行号,从0开始。
${status.count} 输出行号,从1开始。
${status.current} 当前这次迭代的(集合中的)项
${status.first} 判断当前项是否为集合中的第一项,返回值为true或false
${status.last} 判断当前项是否为集合中的最后一项,返回值为true或false
begin、end、step分别表示:起始序号,结束序号,跳跃步伐。

QueryVo.java
public class QueryVo {
	//商品对象
	private Items items;
	//订单对象...
	//用户对象....

	//批量删除使用
	private Integer[] ids;
	//批量修改使用
	private List itemsList;
ItemsController.java QueryVo.getIds();
@RequestMapping("/updateAll")
	//public String updateAll(String[] ids) throws Exception{
	public String updateAll(QueryVo vo) throws Exception{
		System.out.println(vo.getIds());
		return "";
	}
@RequestMapping("/updateAll")
	public String updateAll(QueryVo vo) throws Exception{
		System.out.println(vo.getItemsList());
		return "";
	}
窄化请求映射
@Controller
//窄化请求映射:为防止你和你的队友在conroller方法起名的时候重名,所以相当于在url中多加了一层目录,防止重名
//例如:当前list的访问路径   localhost:8081/ssm0523-1/items/list.action
@RequestMapping("/items")
public class ItemsController {

	@Autowired
	private ItemsService itmesService;
请求方法限定
@RequestMapping(method = RequestMethod.GET)

@RequestMapping(method = RequestMethod.POST)

☆2.controller方法返回值(指定返回到哪个页面, 指定返回到页面的数据) 1)ModelAndView
	modelAndView.addObject("itemList", list); 指定返回页面的数据
	modelAndView.setViewName("itemList");	  指定返回的页面
2)String(推荐使用) 返回普通字符串,就是页面去掉扩展名的名称, 返回给页面数据通过Model来完成
//指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/item/editItem.jsp
return "item/editItem";
返回的字符串以forward:开头为请求转发
//结果转发到editItem.action,request可以带过去
//request.getRequestDispatcher().forward(request,response)
return "forward:editItem.action";
返回的字符串以redirect:开头为重定向
//重定向到queryItem.action地址,request无法带过去
//response.sendRedirect()
return "redirect:queryItem.action";
3)返回void(使用它破坏了springMvc的结构,所以不建议使用)
	可以使用request.setAttribut 来给页面返回数据
	可以使用request.getRquestDispatcher().forward()来指定返回的页面
	如果controller返回值为void则不走springMvc的组件,所以要写页面的完整路径名称
相对路径:相对于当前目录,也就是在当前类的目录下,这时候可以使用相对路径跳转 绝对路径:从项目名后开始.
在springMvc中不管是forward还是redirect后面凡是以/开头的为绝对路径,不以/开头的为相对路径
例如:forward:/items/itemEdit.action 为绝对路径
	forward:itemEdit.action为相对路径
3.架构级别异常处理:
主要为了防止项目上线后给用户抛500等异常信息,所以需要在架构级别上整体处理.hold住异常
首先自定义全局异常处理器实现HandlerExceptionResolver接口
在spirngMvc.xml中配置生效

系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。
系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:

自定义异常 CustomException.java
//自定义异常类,用来处理自定义异常
public class CustomException extends Exception{
	//保存异常信息
	private String  message;

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

}

自定义异常处理器 CustomGlobalExceptionResolver.java
//自定义全局异常处理
public class CustomGlobalExceptionResolver implements HandlerExceptionResolver{

	@Override
	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, 
			Object arg2, Exception exc) {
		//保存异常信息
		String msg = "";
		
		//判断异常类型
		if(exc instanceof CustomException){
			//处理业务级别异常
			msg = ((CustomException)exc).getMessage();
		} else {
			//处理运行时异常
			msg = "系统异常, 亲,对不起, 请及时联系管理员哦!";
		}
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("msg", msg);
		modelAndView.setViewName("error");
		return modelAndView;
	}

}

错误页面 error.jsp



查询商品列表

 
${msg}



异常处理器配置SpringMvc.xml

	
异常测试
@RequestMapping("/list")
	public ModelAndView itemsList() throws Exception{
		//测试运行时异常
		//int i= 0/0;
		
		//测试自定义异常
//		if(true){
//			CustomException customException = new CustomException();
//			customException.setMessage("对不起哦, 您已经抢购过, 不要太贪心哦!");
//			throw customException;
//		}
		
		List list = itmesService.list();
		
		ModelAndView modelAndView = new ModelAndView();
		
		modelAndView.addObject("itemList", list);
		modelAndView.setViewName("itemList");
		
		return modelAndView;
	}
4.上传图片: 1)在tomcat中配置虚拟图片服务器.
在tomcat上配置图片虚拟目录,在tomcat下conf/server.xml中添加:


访问http://localhost:8080/pic即可访问F:developuploadtemp下的图片。

也可以通过eclipse配置:

2)导入fileupload的jar包

CommonsMultipartResolver

3)在springMvc.xml中配置上传组件

	
		
		
			5242880
		
	
4)在页面上编写上传域,更改form标签的类型

	
<%-- --%> 商品图片
5)在controller方法中可以使用MultiPartFile接口接收上传的图片
//spirngMvc可以直接接收pojo类型:要求页面上input框的name属性名称必须等于pojo的属性名称
	@RequestMapping("/updateitem")
	//public String update(Integer id, String name, Float price, String detail) throws Exception{
	public String update(MultipartFile pictureFile,Items items, Model model, HttpServletRequest request) throws Exception{
		//1. 获取图片完整名称
		String fileStr = pictureFile.getOriginalFilename();
		//2. 使用随机生成的字符串+源图片扩展名组成新的图片名称,防止图片重名
		String newfileName = UUID.randomUUID().toString() + fileStr.substring(fileStr.lastIndexOf("."));
		//3. 将图片保存到硬盘
		pictureFile.transferTo(new File("D:\java\pic\" + newfileName));
		//4.将图片名称保存到数据库
		items.setPic(newfileName);
		itmesService.updateItems(items);
		//返回数据
		//request.setAttribute("", arg1);
		//指定返回的页面(如果controller方法返回值为void,则不走springMvc组件,所以要写页面的完整路径名称)
		//request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);
		
		//重定向:浏览器中url发生改变,request域中的数据不可以带到重定向后的方法中
		//model.addAttribute("id", items.getId());
		//在springMvc中凡是以redirect:字符串开头的都为重定向
		return "redirect:itemEdit/"+items.getId();
		
		//请求转发:浏览器中url不发生改变,request域中的数据可以带到转发后的方法中
		//model.addAttribute("id", items.getId());
		//spirngMvc中请求转发:返回的字符串以forward:开头的都是请求转发, 
		//后面forward:itemEdit.action表示相对路径,相对路径就是相对于当前目录,当前为类上面指定的items目录.在当前目录下可以使用相对路径随意跳转到某个方法中
		//后面forward:/itemEdit.action路径中以斜杠开头的为绝对路径,绝对路径从项目名后面开始算
		//return "forward:/items/itemEdit.action";
	}
6)将文件名保存到数据库,将图片保存到磁盘中 5.Json数据交互: 需要加入jackson的jar包

配置json转换器
在注解适配器中加入messageConverters

	
		
		
		
		
		
	

注意:如果使用 则不用定义上边的内容。

@Requestbody:将页面传到controller中的json格式字符串自动转换成java的pojo对象
@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。

List.action?id=1&name=zhangsan&age=12


//导入jackson的jar包在 controller的方法中可以使用@RequestBody,让spirngMvc将json格式字符串自动转换成java中的pojo
	//页面json的key要等于java中pojo的属性名称
	//controller方法返回pojo类型的对象并且用@ResponseBody注解,springMvc会自动将pojo对象转换成json格式字符串
	@RequestMapping("/sendJson")
	@ResponseBody
	public Items json(@RequestBody Items items) throws Exception{
		System.out.println(items);
		return items;
	}
@ResponseBody:将java中pojo对象自动转换成json格式字符串返回给页面
该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端
测试结果

6.RestFul支持:
就是对url的命名标准,要求url中只有能名词,没有动词(不严格要求),但是要求url中不能用问号?传参
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格,是对http协议的诠释。
资源定位:互联网所有的事物都是资源,要求url中没有动词,只有名词。没有参数
Url格式:http://blog.csdn.net/beat_the_world/article/details/45621673
资源操作:使用put、delete、post、get,使用不同方法对资源进行操作。分别对应添加、删除、修改、查询。一般使用时还是post和get。Put和Delete几乎不使用。
添加DispatcherServlet的rest配置
  
	    default 
	    *.jpg    
	   
	      
	    default   
	    *.js   
	   
	       
	    default      
	    *.css     
	
	  
  
  
  	springMvc
  	org.springframework.web.servlet.DispatcherServlet
  	
  		contextConfigLocation
  		classpath:SpringMvc.xml
  	
  	
  	1
  
  
  	springMvc
  	



我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号