springmvc 异常处理、文件上传以及拦截器相关知识
来源:互联网 发布:电信网络电视怎么收费 编辑:程序博客网 时间:2024/05/18 11:47
七 异常处理器(异常处理机制)
系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。
系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理
1、首先声明自定义异常
/**自定义异常 * @author liuxuan * */public class MyException extends Exception{ public MyException(String message) { // TODO Auto-generated constructor stub super(message); }}
2、编写自定义异常处理器
package cn.lx.springmvc.exception;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;/**自定义异常处理器 * 需要实现 HandlerExceptionResolver接口 * @author liuxuan * */public class MyExceptionHandlerResolver implements HandlerExceptionResolver{ public MyExceptionHandlerResolver() { // TODO Auto-generated constructor stub } /** * 异常解析 * */ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { //打印错误信息 ex.printStackTrace(); MyException myException = null; //判断异常的种类,如果是自定义异常,则进行处理,不是的话,转换为自定义异常 if(ex instanceof MyException){ myException = (MyException) ex; }else{ myException = new MyException(ex.getMessage()); } ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message",myException.getMessage()); modelAndView.setViewName("/WEB-INF/jsp/error.jsp"); return modelAndView; }}
3、配置自定义异常处理器
在springmvc.xml中进行配置
<!-- 异常处理器 --> <bean id="handlerExceptionResolver" class="cn.itcast.ssm.controller.exceptionResolver.CustomExceptionResolver"/>
4、异常信息显示页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <!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>您的操作出现错误如下:<br/>${message }</body></html>
八 上传文件
上传文件同样使用commons-fileUpload 和commons-io技术
8.1 页面处理
1、表单提交方式为post
2、文件域 name属性重要
<input type="file" name="pictureFile"/>
3、form表单上配置ectye=”multipart/form-data”
8.2 springmvc.xml中配置文件上传处理器
<!-- 文件上传 图片上传处理器 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置上传文件的最大尺寸为5MB --> <property name="maxUploadSize"> <value>5242880</value> </property></bean>
8.3 controller方法中处理图片上传
Multipart pictureFile中封装了文件上传信息,注意 形参中的参数名称必须和页面file文件域的名称一致
@RequestMapping("insertitem")public ModelAndView insertitem(Items items,HttpServletRequest request,MultipartFile pictureFile) throws IllegalStateException, IOException{ /*items.setCreatetime(new Date());*/ //处理图片上传 pictureFile中封装了图片 if(pictureFile != null){ //获取文件名称 String oldFileName = pictureFile.getOriginalFilename(); long size = pictureFile.getSize(); //上传文件的大小 System.out.println("上传图片的大小:"+size); String path = request.getServletContext().getRealPath("/")+"/WEB-INF/upload/"+oldFileName; System.out.println(path); File file = new File(path); //如果目录不存在,就创建目录 if(!file.getParentFile().exists()){ file.getParentFile().mkdirs(); } //读写文件 pictureFile.transferTo(file); } itemService.insertItem(items); return findAllItems();}
九 json数据交互
9.1 导入相应的jar包
9.2 页面准备
注意加上contentType声明请求类型是json
<script type="text/javascript"> $(function(){ $.ajax({ type:"post", url:"${pageContext.request.contextPath }/item/ajaxItem.action", contentType:"application/json;charset=utf-8", data:'{"name":"测试商品","price":99.9}', success:function(data){ alert(data); } }); });</script>
9.3 controller中方法代码编写
@RequestMapping(value="/ajaxItem",method=RequestMethod.POST)public @ResponseBody Items ajaxItem(@RequestBody Items item) throws MyException{ //自动将数据封封装给pojo类 System.out.println(item); return item;}
9.4 配置json解析器
注意:如果使用<mvc:annotation-driven /> 则不需要配置解析器
9.5 相应API解释
1 @RequestBody作用:@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。本例子应用:@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象2 @ResponseBody作用:该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端本例子应用:@ResponseBody注解实现将controller方法返回对象转换为json响应给客户端
十、 自定义拦截器
Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。
10.1 编写自定义拦截器
实现HandlerInterceptor接口,如下:
Public class HandlerInterceptor1 implements HandlerInterceptor{ /** * controller执行前调用此方法 * 返回true表示继续执行,返回false中止执行 * 这里可以加入登录校验、权限拦截等 */ @Override Public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub Return false; } /** * controller执行后但未返回视图前调用此方法 * 这里可在返回用户前对模型数据进行加工处理,比如这里加入公用信息以便页面显示 */ @Override Public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub } /** * controller执行后且视图返回后调用此方法 * 这里可得到执行controller时的异常信息 * 这里可记录操作日志,资源清理等 */ @Override Public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub }}
10.2 配置自定义拦截器
springmvc.xml中配置自定义拦截器
<!--拦截器 --><mvc:interceptors> <!--多个拦截器,顺序执行 --><mvc:interceptor> <!--拦截器拦截路径--> <mvc:mapping path="/**"/> <!--自定义拦截器类--> <bean class="cn.itcast.springmvc.filter.HandlerInterceptor1"></bean></mvc:interceptor></mvc:interceptors>
十一、 RESTful支持
11.1 什么是restful?
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格,是对http协议的诠释。资源定位:互联网所有的事物都是资源,要求url中没有动词,只有名词。没有参数Url格式:http://blog.csdn.net/beat_the_world/article/details/45621673资源操作:使用put、delete、post、get,使用不同方法对资源进行操作。分别对应添加、删除、修改、查询。一般使用时还是post和get。Put和Delete几乎不使用。
11.2 URL 模板模式映射
@RequestMapping(value="/ viewItems/{id}"):{×××}占位符,请求的URL可以是“/viewItems/1”或“/viewItems/2”,通过在方法中使用@PathVariable获取{×××}中的×××变量。@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。
@RequestMapping("/viewItems/{id}") public @ResponseBody viewItems(@PathVariable("id") String id,Model model) throws Exception{ //方法中使用@PathVariable获取useried的值,使用model传回页面 //调用 service查询商品信息 ItemsCustom itemsCustom = itemsService.findItemsById(id); return itemsCustom;}
如果RequestMapping中表示为”/viewItems/{id}”,id和形参名称一致,@PathVariable不用指定名称。
// 查询商品列表@RequestMapping("/queryItem/${id}")public ModelAndView queryItem(String id ) throws Exception { // 商品列表 List<Items> itemsList = itemService.findItemsList(null); System.out.println(id); // 创建modelAndView准备填充数据、设置视图 ModelAndView modelAndView = new ModelAndView(); // 填充数据 modelAndView.addObject("itemsList", itemsList); // 视图 modelAndView.setViewName("item/itemsList"); return modelAndView;}
11.3 静态资源访问
spingmvc如果配置的拦截路径是”/”。就不能直接访问静态资源了,需要配置过滤, 才能访问如果在DispatcherServlet中设置url-pattern为 /则必须对静态资源进行访问处理。spring mvc 的<mvc:resources mapping="" location="">实现对静态资源进行映射访问。location是页面引用的路径,mapping是映射的服务器中的路径第一个*代表当前路径下的所有文件第二个*代表子目录下的所有文件及目录如下是对js文件访问配置:<mvc:resources location="/js/" mapping="/js/**"/>
0 0
- springmvc 异常处理、文件上传以及拦截器相关知识
- Struts2文件上传,以及上传拦截异常国际化处理
- SpringMVC 上传文件异常处理
- SpringMVC自定义拦截器与异常处理
- SpringMVC自定义拦截器与异常处理
- Springmv知识六------拦截器&异常处理
- 异常解析家族应用点源码讲解:SpringMVC全局异常捕获及SpringMVC文件上传报错的优雅解决方式以及@Exception拦截异常注意点
- springmvc如何拦截上传文件最大限制异常
- springmvc文件上传和拦截器
- SpringMvc文件上传、下载和拦截器
- 框架学习之springMvc整合框架-02文件上传、下载、国际化、拦截器、异常框架
- Spring MVC—拦截器,文件上传,中文乱码处理,Rest风格,异常处理机制
- SpringMVC文件上传、拦截器、与Spring的整合以及与Struts2的比较
- springmvc异常拦截器
- Struts中文件上传时的空指针异常处理以及获取不到上传文件相关属性
- Springmvc知识五------处理JSON&国际化&文件上传
- SpringMVC文件上传(三)异常栈处理
- 四.SpringMVC中的 拦截器与异常处理
- nginx配置信息的解析流程
- 深度学习的背景
- 度量学习(Distance Metric Learning)介绍
- DFS-Network Saboteur
- 安装Ruby环境和下载和安装CocoaPods
- springmvc 异常处理、文件上传以及拦截器相关知识
- 类模板的小结理论篇(转)
- Promise实现原理
- VC实现显示文件复制的进度
- javascript深入理解js闭包
- 部分安卓机型 页面无法跳转
- 349. Intersection of Two Arrays
- Java——网络
- iOS 音频视频合成相关