美文网首页
Spring MVC原理

Spring MVC原理

作者: 拼搏男孩 | 来源:发表于2020-03-05 21:16 被阅读0次

1、Spring MVC与Structs2的区别

  • 框架机制:Structs2采用Filter实现,Spring MVC则采用Servlet实现
  • Structs2是类级别的拦截,每次请求都会创建一个Action,一个Action对应一个request与response上下文。Spring MVC是方法级别的拦截,一个方法对应一个request上下文
  • Structs2的属性参数是让多个方法共享的。Spring MVC一个方法对应一个request上下文,所以方法之间是独立的,独享request与response数据,方法之间不共享变量。
  • Struct2只能多例开发,Spring MVC可以单例开发
  • Spring MVC集成了Ajax,使用非常方便,只需要一个注解@ResponseBody就可以实现,然后直接返回响应文本即可。Structs2也继承了Ajax,但是Action中处理时一般必须安装插件或者自己写代码集成,使用起来相对不便。
  • Sttucts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,Spring MVC实现了零配置,基于方法的拦截,加载一次单例模式注入,所以开发效率和性能高于Structs2
  • Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大。
  • Spring MVC和Spring是无缝的,项目的管理和安全上也比Structs2高,Structs2配置起来比Spring MVC麻烦。

2、Spring MVC原理

1.用户发送请求至前端控制器DispatcherServlet(也叫中央处理器).
2.DispatcherServlet收到请求调用HandlerMapping处理器映射器
3.处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet.
4.DispatcherServlet调用HandlerAdapter处理器适配器。
5.HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6.Controller执行完成返回ModelAndView.
7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet.
8.DisPatcherServlet将ModelAndView传给ViewResolver视图解析器。
9.ViewReslover解析后返回具体View.
10.DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11.DispatcherServlet响应用户。


Spring MVC原理 (2).png

3、结合用户的登录请求解释Spring MVC原理

用户在前端页面填写好账号与密码后发送请求(/login)到前端控制器DispatcherServlet,DispatcherServlet收到请求后根据url调用HandlerMapping处理器映射器,处理器映射器根据xml配置或者注解查找到具体的处理器,比如login方法,然后生成这个类的对象一并返回给前端控制器,前端控制器拿到这个处理器对象后调用HandlerAdapter处理器适配器,由它去调用具体的处理器(Controller),在Controller中的login方法中拿到当前用户的账号密码,调用service方法,service层中又调用dao层,dao层根据账号密码在数据库中进行查询,并返回是否查找到的结果,一层一层返回给Controller,控制器根据查询结果返回不同的ModelAndView,存放的是虚拟的View,查询成功返回主页虚拟视图,查询失败返回当前页面的虚拟视图和错误信息,处理器适配器再将ModelAndView返回给前端控制器,前端控制器将ModelAndView传给ViewResolver视图解析器,两种不同的ModelAndView经过视图解析器解析后返回具体的View。前端控制器再根据具体的View进行视图渲染最后将渲染后的视图返回给用户。

4、文件上传

  • 添加依赖

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>
    
  • 配置xml文件

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="maxUploadSize" value="81920"/>
        <property name="uploadTempDir" value="temp"/>
    </bean>
    

第一个属性指定的默认编码是UTF-8,第二个属性指定了最大上传文件的大小,单位是byte,第三个指定了上传文件的缓存路径。

PostMapping("/uploadFile")
public String uploadFile(@RequestParam("userName") String userName, @RequestParam("password") String password, @RequestParam("file")MultipartFile file) throws IOException {
    System.out.println("userName = "+userName);
    System.out.println("password = "+password);

    if(!file.isEmpty()){
        System.out.println("original fileName"+file.getOriginalFilename());
        File dest = new File("d:\\ceshi\\"+file.getOriginalFilename());
        file.transferTo(dest);
        BufferedReader br = new BufferedReader(new FileReader(dest));
        String str;
        while((str=br.readLine())!=null){
            System.out.println(str);
        }
        br.close();
    }
    return "redirect:/main/employees";
}

Spring MVC上传文件特别简单,最重要的一步是file.transferTo(dest)。

相关文章

网友评论

      本文标题:Spring MVC原理

      本文链接:https://www.haomeiwen.com/subject/reqkrhtx.html