1文件上传
当enctype="multipart/form-data"时request.getParameter()方法失效
单文件上传
导入坐标
<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.6</version>
</dependency>
<form action="${pageContext.request.contextPath}/user/quick22" method="post" enctype="multipart/form-data">
名称<input type="text" name="username"><br>
文件<input type="file" name="uploadFile1"><br>
文件<input type="file" name="uploadFile2"><br>
文件<input type="submit" value="提交"><br>
</form>
配置文件上传解析器
在spring-mvc.xml中加入
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--上传文件编码类型-->
<property name="defaultEncoding" value="UTF-8"></property>
<!--单文件总大小-->
<property name="maxUploadSize" value="500000"></property>
<!--文件总大小-->
<property name="maxUploadSizePerFile" value="1044000"></property>
</bean>
这里上传到webapp下
@RequestMapping(value = "/quick22")
@ResponseBody
public void save22(String username, MultipartFile uploadFile1, MultipartFile uploadFile2) throws IOException {
System.out.println(username);
String originalFilename1 = uploadFile1.getOriginalFilename();
String originalFilename2 = uploadFile2.getOriginalFilename();
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
ServletContext servletContext =
webApplicationContext.getServletContext();
String realPath = servletContext.getRealPath("/");
uploadFile1.transferTo(new File(realPath+originalFilename1));
uploadFile2.transferTo(new File(realPath+originalFilename2));
}
多文件上传
前台
<form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data">
名称<input type="text" name="username"><br>
文件<input type="file" name="uploadFile"><br>
文件<input type="file" name="uploadFile"><br>
文件<input type="submit" value="提交"><br>
</form>
客户端用数组接循环存储就行
@RequestMapping(value = "/quick23")
@ResponseBody
public void save23(String username, MultipartFile[] uploadFile) throws IOException {
System.out.println(username);
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
ServletContext servletContext = webApplicationContext.getServletContext();
String realPath = servletContext.getRealPath("/");
for (MultipartFile multipartFile : uploadFile) {
String originalFilename = multipartFile.getOriginalFilename();
multipartFile.transferTo(new File(realPath+originalFilename
));
}
}
2,springMVC拦截器
类似Servlet开发中的过滤器Filter 用于处理器的预处理和后处理
不会拦截js,css html jsp
1)创建MyInterceptorl一个类实现implements HandlerInterceptor
有三个方法
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return flase;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--对所有的目标方法都拦截-->
<mvc:mapping path="/**"/>
<bean class="com.flatly.interceptor.MyInterceptorl"/>
</mvc:interceptor>
</mvc:interceptors>
@Controller
public class TargetController {
@RequestMapping("/target")
public ModelAndView show(){
System.out.println("目标资源执行。。");
ModelAndView modelAndView =new ModelAndView();
modelAndView.addObject("name","flatly");
modelAndView.setViewName("index");
return modelAndView;
}
}
preHandle方法返回true才会执行目标方法
postHandle可以修改视图modelAndView
测试
携带参数param是yes放行index不然重定向error
public class MyInterceptorl implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle..");
String param = request.getParameter("param");
if("yes".equals(param)){
return true;
}else {
request.getRequestDispatcher("/error.jsp").forward(request,response);
return false;
}
}
}
在目标方法中存储name
modelAndView.addObject("name","flatly");
返回试图前执行postHandle
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
modelAndView.addObject("name","flatlypostuppd");
System.out.println("postHandle");
}
在页面上取${name}为flatlypostuppd
配置多个拦截器
顺序(先过去再执行)
1preHandle 2preHandle 目标 postHandle2 postHandle1 afterCompletion2 afterCompletion1
3 异常处理机制
1spring提供简单异常处理机制SimpleMappingExceptionResolver
在spring-mvc.xml
<!--配置异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<--这是默认的跳转页面视图-->
<property name="defaultErrorView" value="error"/>
<--异常类型与之匹配-->
property name="exceptionMappings">
<map>
<entry key="java.lang.ClassCastException" value="error1"/>
<entry key="com.itheima.exception.MyException" value="error2"/>
</map>
</property>
</bean>
2自定义异常处理步骤
实现HandlerExceptionResolver
public class MyExceptionResolver implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
if(e instanceof MyException){
modelAndView.addObject("info","自定义异常");
}else if(e instanceof ClassCastException){
modelAndView.addObject("info","类转换异常");
}
modelAndView.setViewName("error");
return modelAndView;
}
}
在前端取数据${info}
<!--自定义异常处理器-->
<bean class="com.itheima.resolver.MyExceptionResolver"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)