您的位置:首页 > 编程语言 > Java开发

SpringMVC学习第三天--08-08

2020-08-08 15:39 246 查看

文件上传、拦截器、异常处理

文件上传

也是请求的一部分,只不过传递的参数为多部分表单形式
具体流程
1.maven导坐标
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
2.配置上传解析器

示例
** spring-mvc.xml 中上传解析器的配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/> // 文件上传编码
<property name="maxUploadSize" value="50000000"/> // 文件总大小
</bean>

** form表单(主要是enctype的值)
<form method="post" enctype="multipart/form-data" action="/user5">
姓名<input type="text" name="username"/><br/>
请选择<input type="file" name="uploadFile"/><br/>
请选择<input type="file" name="uploadFile"/><br/>
<input type="submit" value="提交"/>
</form>

** controller类(参数名需要和表单name值对应)
@RequestMapping("/user5")
@ResponseBody // 如果不进行跳转,需要加,否则视图解析器抛异常
public void save5(String username, MultipartFile[] uploadFile) throws IOException {
System.out.println(username);
for (MultipartFile multipartFile : uploadFile) {
String originalFilename = multipartFile.getOriginalFilename(); // 获取文件名
multipartFile.transferTo(new File("E:\\aa\\"+originalFilename));
// 上传文件到某个位置
}
}

拦截器

类似filter,只拦截controller类中方法对应映射路径,不会拦截.js/.css等静态资源
使用流程
1.创建一个类实现HandlerInterceptor接口
2.配置拦截路径

示例
** HandlerInterceptor实现类
public class MyInterceptor implements HandlerInterceptor {
@Override // 在被拦截的方法之前执行,返回值绝对是否放行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String name = request.getParameter("name");
return "张三".equals(name);  // 如果参数name为张三即放行
}

@Override  // 在被拦截的方法执行之后,ModelAndView对象返回之前执行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("posHandle");
}

@Override  // 在被拦截的方法执行之后,ModelAndView对象返回之后执行
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("after..");
}
}

** spring-mvc.xml 拦截器配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="interceptor.MyInterceptor"/>
</mvc:interceptor>
// 可配置多个形成拦截器链,执行顺序为进去时从上到下,出来时从下到上,与filter链一致
</mvc:interceptors>

异常处理

springMVC内置的异常处理机制,发生异常只需从Dao层依次往上抛,最后由前端控制器调用异常处理器来处理
在配置文件中进行配置即可

** 默认异常处理
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error.jsp"/> // 默认异常跳转页面(下面都未匹配到)
<property name="exceptionMappings"> // 根据异常类型进行对应页面跳转
<map>
<entry key="异常类名" value="需要跳转的页面"/>
</map>
</property>
</bean>

** 自定义异常处理
自定义一个类来实现 HandlerExceptionResolver 接口,根据接口内方法的Exception对象来进行处理,将此类
放入容器即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: