SpringMVC

来源:互联网 发布:c语言数据溢出怎么办 编辑:程序博客网 时间:2024/06/05 15:56

本文涉及的内容是关于springmvc 上传文件以及intercepter拦截器的使用.

multipartResolver

springmvc使用multipartResolver来文件上传.在springmvc配置文件上加上以下内容:

        <!--文件上传使用, 配置multipartResolver,id名为约定好的 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <!-- 配置文件(每次上传的所有文件总大小)大小,单位为b, 1024000表示1000kb  --><property name="maxUploadSize" value="1024000" /></bean><!--PropertiesFactoryBean对properties文件可用 ,可以用来注入properties配置文件的信息 --><bean id="uploadProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"><property name="location" value="classpath:upload.properties"></property></bean>


案例:

上传文件需要导入commons-fileupload-1.2.2.jar, commons-io-2.0.1.jar

创建一个表单Model:

package yzr.model;import java.io.Serializable;import java.util.Arrays;import org.springframework.web.multipart.MultipartFile;public class Customer implements Serializable {/** * generated serialVersionUID */private static final long serialVersionUID = -4695849092692785616L;private String name;private MultipartFile[] files;public String getName() {return name;}public void setName(String name) {this.name = name;}public MultipartFile[] getFiles() {return files;}public void setFiles(MultipartFile[] files) {this.files = files;}@Overridepublic String toString() {return "Customer [name=" + name + ", files=" + Arrays.toString(files)+ "]";}public Customer(){}}


创建控制器Controller:

package yzr.controller;import java.io.File;import java.io.IOException;import javax.annotation.Resource;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import org.apache.commons.io.FileUtils;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.mvc.multiaction.MultiActionController;import yzr.model.Customer;import yzr.util.FileUploadUtil;@Controller  @RequestMapping("/customer")public class CustomerController extends MultiActionController {@ResourceServletContext servletContext;@Resourceprivate FileUploadUtil fileUploadUtils;public CustomerController(){System.out.println("CustomerController构造器被创建!");}@RequestMapping(value="/upload")public String Index(Customer customer,HttpServletRequest request){MultipartFile[] files=customer.getFiles();for(MultipartFile file:files){if(file.isEmpty()){System.out.println("文件为空");}else{System.out.println("文件不为空!");System.out.println("格式:" + file.getContentType());System.out.println("原名:" + file.getOriginalFilename());System.out.println("大小:" + file.getSize());System.out.println("表单控件的名称" + file.getName());try {FileUtils.copyInputStreamToFile(file.getInputStream(), new File(servletContext.getRealPath("/")+"upload/"+file.getOriginalFilename()));} catch (IOException e) {e.printStackTrace();}}}System.out.println("---调用业务逻辑进行业务处理---");return "forward:/modules/Customer.jsp";}}

创建上传页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>My JSP 'upload.jsp' starting page</title>  </head>  <body>    <form action="customer/upload.action" method="post" enctype="multipart/form-data">     姓名:<input type="text" name="name"><br/>     请选择文件:<br/><input type="file" name="files"><br/>     <input type="file" name="files"><br/>     <input type="submit" value="文件上传测试">         </form>        </body></html>

跳转页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>My JSP 'Customer.jsp' starting page</title>      </head>    <body>  ${requestScope.customer}  </body></html>
完整的springmvc配置文件:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-3.1.xsd    http://www.springframework.org/schema/mvc     http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"><!-- 注解 --><mvc:annotation-driven></mvc:annotation-driven><context:component-scan base-package="*" />    <!--文件上传使用, 配置multipartResolver,id名为约定好的 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <!-- 配置文件(每次上传的所有文件总大小)大小,单位为b, 1024000表示1000kb  --><property name="maxUploadSize" value="1024000" /></bean><!--PropertiesFactoryBean对properties文件可用 ,可以用来注入properties配置文件的信息 --><bean id="uploadProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"><property name="location" value="classpath:upload.properties"></property></bean></beans>


为了解决中文乱码问题,在web.xml中添加springmvc过滤器:

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><servlet><servlet-name>mvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>mvc</servlet-name><url-pattern>*.action</url-pattern></servlet-mapping>        <!-- 中文乱码问题 --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

测试:


对上传上来的文件(重命名等)进行处理:

package yzr.util;import java.io.File;import java.io.IOException;import java.util.UUID;import org.apache.commons.io.FileUtils;import org.apache.commons.io.FilenameUtils;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;@Component(value = "fileUploadUtils")// 普通的bean注入public class FileUploadUtil {/* * 注入字符串,#{}为spel语言,其中uploadProperties,是xml配置文件中注入properties文件的bean id, * path为properties文件的其中一个key ,也可以通过下边的set方法注入 */@Value("#{uploadProperties.path}")private String path;// private String path="e:/testupload";// path也可以通过set方法注入// @Value("#{uploadProperties.path}")// public void setPath(String path) {// this.path = path;// }private String getExtName(MultipartFile file) {return FilenameUtils.getExtension(file.getOriginalFilename());}private String createNewName(MultipartFile file) {return UUID.randomUUID().toString() + "." + getExtName(file);}public String uploadFile(MultipartFile file) {try {String newName = createNewName(file);FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path, newName));return newName;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();throw new RuntimeException(e);}}}


在upload.properties文件内写入文件存放的位置:

path=c\:\\testdir\\upload\\

调用的时候使用:fileUploadUtils.uploadFile(file);即可.


springmvc拦截器:HandlerInterceptor

实现此接口:

package yzr.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class MyIntercepter implements HandlerInterceptor {@Overridepublic void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {System.out.println("---访问请求资源后不管理有没有异常都一定执行此方法---");}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3) throws Exception {System.out.println("---访问请求资源后,如果没有异常,将执行此方法---");}@Overridepublic boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2) throws Exception {System.out.println("---访问请求资源前执行,如果此方法返回false,将不能访问请求资源---");return true;}}


在springmvc配置文件中注册:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-3.1.xsd    http://www.springframework.org/schema/mvc     http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"><!-- 注解 --><mvc:annotation-driven></mvc:annotation-driven><context:component-scan base-package="*" />    <!-- 配置spring mvc拦截器 --><mvc:interceptors>    <!-- 默认拦截DispatcherServlet指定的后缀(这里是.action) --><bean class="yzr.interceptor.MyIntercepter"></bean></mvc:interceptors><!--文件上传使用, 配置multipartResolver,id名为约定好的 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <!-- 配置文件(每次上传的所有文件总大小)大小,单位为b, 1024000表示1000kb  --><property name="maxUploadSize" value="1024000" /></bean><!--PropertiesFactoryBean对properties文件可用 ,可以用来注入properties配置文件的信息 --><bean id="uploadProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"><property name="location" value="classpath:upload.properties"></property></bean></beans>



1 0
原创粉丝点击