【自学java笔记#第五十一天#】springmvc day02 文件上传和拦截器
作者:互联网
一、springmvc响应数据和结果视图
二、springmvc实现文件上传
1、传统方式(不跨服务器)上传文件
①提交的表单:
<form action="user/testDay02" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="upload"><br> 提交:<input type="submit" value="提交"> </form>
②处理器代码:
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("/testDay02") public String testDay02(HttpServletRequest request) throws Exception { System.out.println("testDay02方法执行了..."); String path = request.getSession().getServletContext().getRealPath("/uploads"); File file=new File(path); if(!file.exists()){ file.mkdirs(); } DiskFileItemFactory factory=new DiskFileItemFactory(); ServletFileUpload upload=new ServletFileUpload(factory); List<FileItem> fileItems = upload.parseRequest(request); for(FileItem fileItem:fileItems){ if(fileItem.isFormField()){ }else{ String name = fileItem.getName(); file=new File(file,name); fileItem.write(file); fileItem.delete(); } } return "success"; } }
③注意事项:
a.表单enctype属性取值必须是multipart/form-data
b.表单method属性取值必须是post
c.必须有一个文件选择域,即type的类型为file
2、Springmvc(不跨服务器)实现文件上传:
①提交的表单:
<form action="user/testDay02" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="upload"><br> 提交:<input type="submit" value="提交"> </form>
②处理器代码:
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("/testDay02") public String testDay02(MultipartFile upload) throws Exception { System.out.println("testDay02方法执行了..."); String path=request.getSession().getServletContext().getRealPath("/uploads"); File file=new File(path); if(!file.exists()){ file.mkdirs(); } String filename = upload.getOriginalFilename(); file=new File(path,filename); upload.transferTo(file); return "success"; } }
③配置文件解析器:
<!--配置文件解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760"></property> </bean>
④注意事项:
文件解析器的id值是特定的,改成其他样式,就无法完成参数绑定。
3、Springmvc(跨服务器)实现文件上传:
①提交的表单:
<form action="user/testDay02" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="upload"><br> 提交:<input type="submit" value="提交"> </form>
②应用服务器的处理器代码:
@Controller @RequestMapping("/user") public class FileUploadController {
@RequestMapping(value = "/fileUpload1") public String fileUpload1(MultipartFile upload) throws Exception { //定义文件服务器的请求路径 String path="http://localhost:8090/springmvctest2_war_exploded/uploads/"; //拿到文件的名称 String fileName = upload.getOriginalFilename(); //生成文件名的唯一标识码 String randomName = UUID.randomUUID().toString(); fileName=randomName+fileName; //创建客户端对象 Client client=Client.create(); //连接图片服务器 WebResource webResource = client.resource(path + fileName); //上传文件 webResource.put(upload.getBytes()); return "success"; } }
③配置文件解析器:
<!--配置文件解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760"></property> </bean>
④注意事项:
a.文件解析器的id值是特定的,改成其他样式,就无法完成参数绑定。
b.文件服务器的目录结构一定要是完整的,否则Tomcat无法找到上传路径,会报404错误。
c.两个模块都要以带后缀expload的形式部署。
三、springmvc的异常处理
在实际开发中,如果持久层和业务层出现异常,是可以往上层抛出异常的。但是对于异常,我们不能放之不管。所以当它被抛到前端控制器,就需要进行处理。否则错误信息直接显示在页面上,会带给客户不好的体验感。一般按照以下步骤进行异常处理:
1、编写自定义异常类:
public class MyException extends Exception{ private String message; public MyException(String message) { this.message=message; } @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
2、编写异常处理器(必须要实现HandlerExceptionResolver接口):
public class ExceptionHandler implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { MyException myException=null; if(ex instanceof MyException){ myException=(MyException)ex; }else{ ex=new MyException("请联系管理员"); } ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("message",myException.getMessage()); modelAndView.setViewName("error"); return modelAndView; } }
3、配置异常处理器
<bean id="myException" class="com.lulu.ExceptionHandler"></bean>
四、springmvc中的拦截器
springmvc的拦截器只对处理器中的方法起作用,并不能像过滤器一样拦截资源。使用拦截器的步骤如下:
1、编写拦截器类
public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){ System.out.println("处理器前面的方法"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("处理器后面的方法"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("所有方法后面的方法"); } }
2、配置拦截器
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean id="myInterceptor" class="com.lulu.interceptor.MyInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
标签:拦截器,java,String,upload,file,第五十一,new,message,public 来源: https://www.cnblogs.com/yizhinailu/p/12953714.html