【自学java笔记#第五十一天#】springmvc day02 文件上传和拦截器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【自学java笔记#第五十一天#】springmvc day02 文件上传和拦截器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5435字,纯文字阅读大概需要8分钟。
内容图文
![【自学java笔记#第五十一天#】springmvc day02 文件上传和拦截器](/upload/InfoBanner/zyjiaocheng/631/42335e29815d4f459f042e8640dde963.jpg)
一、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笔记#第五十一天#】springmvc day02 文件上传和拦截器全部内容,希望文章能够帮你解决【自学java笔记#第五十一天#】springmvc day02 文件上传和拦截器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。