springmvc基础:(3)拦截器与文件上传

Springmvc与Struts2的区别

      springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。
      springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
      Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,
    将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

springmvc拦截器在java文件里面的写法:

    preHandle:在控制器方法调用前执行, 返回值为是否中断:true,表示继续执行(下一个拦截器或处理器);false则会中断后续的所有操作,所以我们需要使用response来继续响应后续请求
    afterCompletion:整个请求完成,即视图渲染结束后调用,这个时候可以做些资源清理工作,或日志记录
    postHandle:在控制器方法调用后,解析视图前调用,我们可以对视图和模型做进一步渲染或修改,可在modelAndView中加入数据,比如当前时间          
    
    配置拦截器,在springmvc.xml中添加配置:    

        <!--配置拦截器, 多个拦截器,顺序执行 -->
        <mvc:interceptors>
            <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->
               <mvc:interceptor>
                 <mvc:mapping path="/**"/>
                 <mvc:exclude-mapping path="/user/login"/>
                 <bean class="cn.interceptor.LoginIntercetor"></bean>
             </mvc:interceptor>
        <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
        </mvc:interceptors>

文件上传:
    springmvc与struts2默认使用的上传组件都是fileupload.
    步骤1:添加spring依赖的jar文件fileupload组件所依赖的jar文件
    步骤2:在web.xml中配置前端控制器         

          <servlet>
              <servlet-name>springmvc</servlet-name>
              <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
              <init-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>classpath:springmvc.xml</param-value>
              </init-param>
              <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
              <servlet-name>springmvc</servlet-name>
              <url-pattern>/</url-pattern>
          </servlet-mapping>

    步骤3:在src下新建spring的配置文件springmvc.xml         

         <!-- 注解扫描 --> 
         <context:component-scan base-package="cn"></context:component-scan>
          <!-- springmvc使用<mvc:annotation-driven> -->
        <!-- 自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,
        可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。 -->
         <mvc:annotation-driven></mvc:annotation-driven>
         <!-- 视图解析器 -->
         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
             <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
             <property name="prefix" value="/"></property>
             <property name="suffix" value=".jsp"></property>
         </bean>
         <!-- 处理静态资源 -->
         <mvc:default-servlet-handler/>
         <!-- 上传文件的视图解析器 -->
         <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
         <!-- 设置上次文件的最大大小,单位为字节 -->
         <property name="maxUploadSize" value="100000000"></property>
         </bean>

    步骤4:编写UploadController      

        @Controller
        public class UploadController {
        @RequestMapping("/upload")
        public String upload(@RequestParam("uploadFile") MultipartFile uploadFile,HttpServletRequest request){
            //获取服务器端的路径
            String realPath =  request.getServletContext().getRealPath("/");
            File uploadDir = new File(realPath,"upload");
            if(!uploadDir.exists())
                uploadDir.mkdirs();
            //获取待上传的原始文件名称
            String fileName =  uploadFile.getOriginalFilename();
            //FileUtils.copyFile(uploadFile, new File(uploadDir,fileName));
            try {
                uploadFile.transferTo(new File(uploadDir,fileName));
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "success";
        }

    步骤5:编写上传页面upload.jsp        

       注意:form表单添加属性enctype="multipart/form-data"支持文件上传
        <form action="upload" method="post" enctype="multipart/form-data">
              文件:<input type="file" name="uploadFile"/>
            <input type="submit" value="上传"/>
          </form>

 

猜你喜欢

转载自blog.csdn.net/u012060033/article/details/82701592