`
qingyu11068
  • 浏览: 63267 次
文章分类
社区版块
存档分类
最新评论

Spring Web MVC工作原理

阅读更多
  1. 主要组件

    • DispactherServlet

      作用:主控制器,用于接收客户端请求,进行业务分发处理

    • HandlerMapping

      作用:维护请求和Controller业务控制器方法映射关系

      SimpleUrlHandlerMapping:维护一个<props>列表
      RequestMappingHandlerMapping:利用@RequestMapping("请求")

    • Controller

      作用:业务控制器,用于调用模型M组件处理请求

    • ViewResolver

      作用:视图解析器,用于生成视图响应结果(响应HTML、JSON数据等等)
      InternalResourceViewResolver:可以调用JSP或HTML视图组件。

  2. 主要流程

    请求-->主控制器DispatcherServlet-->RequestMappingHandlerMapping -->Controller组件-->ViewResolver-->JSP解析成HTML-->响应输出

Spring Web MVC应用

  1. 环境搭建

    引入jar包和配置文件

2.编写流程缺失组件

  • JSP视图组件 涉及技术:JSP、EL、JSTL、前端技术

  • Controller组件 涉及规则:如何获取请求参数、如何向响应JSP传值、如何使用Session、如何重定向等

        public classLoginController{
    
            public ModelAndView/String xxx();
    
        }
    

Interceptor拦截器

作用:拦截器可以对原有SpringMVC流程进行拦截,有3个拦截点,第一个是在Controller之前;第二个是 官网:www.fhadmin.org  在Controller之后ViewResolver之前;第三个是在JSP解析之后,结果输出之前.
拦截器在实际应用时可以在上述3个点插入额外功能,便于功能重用、灵活性(配置)。

  1. 使用规则

    • 编写拦截器实现类,实现HandlerInterceptor接口

        public classCheckLoginInterceptorimplementsHandlerInterceptor{
      
            //在请求处理完毕后,响应输出之前执行官网:www.fhadmin.org
            publicvoidafterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {
                System.out.println("---执行afterCompletion方法---"+arg2);
            }
      
            //Controller之后执行
            publicvoidpostHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {
                System.out.println("---执行PostHandle方法---"+arg2);
      
            }
      
            //在Controller之前执行
            publicbooleanpreHandle(HttpServletRequest request, 
                    HttpServletResponse response, Object arg2)throws Exception {
                System.out.println("---执行PreHandel方法---"+arg2);
                return true;//返回true继续执行Controller;返回false阻止Controller执行
            }
      
        }
      
    • 配置拦截器,指定拦截哪些请求

        <mvc:interceptors>
            <mvc:interceptor>
                <!-- 指定拦截的请求 官网:www.fhadmin.org-->
                <mvc:mappingpath="/list.do"/>
                <!-- 指定不拦截的请求 -->
                <!-- 
                <mvc:exclude-mapping path="/tologin.do"/>
                <mvc:exclude-mapping path="/login.do"/>
                 -->
                <beanclass="com.xdl.interceptor.CheckLoginInterceptor"></bean>
            </mvc:interceptor>
        </mvc:interceptors>
      
  1. 登录检查功能

    思路:在preHandle方法中追加拦截逻辑,检查session是否存在用户信息,如果存在表示登录;不存在表示未登录

     publicbooleanpreHandle(HttpServletRequest request, 
             HttpServletResponse response, Object arg2)throws Exception {
         System.out.println("---执行PreHandel方法---"+arg2);
         //检查用户是否登录
         HttpSession session = request.getSession();
         if(session.getAttribute("user") == null){
             //未登录
             response.sendRedirect("tologin.do");
             return false;//返回false阻止Controller执行
         }
         return true;//返回true继续执行Controller;
     }
    
  1. 权限控制设计

  1. 拦截器和过滤器区别

    • 过滤器Filter属于Java Web;拦截器属于Spring Web MVC;
    • 请求发送过来先执行过滤器Filter,然后进入框架流程再执行拦截器
    • 拦截器可以访问框架内部特殊的对象元素;过滤器不行
    • 拦截器一般采用反射和代理技术实现调用;Filter采用回调机制调用;

异常处理

  1. 全局异常处理

    使用SimpleMappingExceptionResolver异常处理器。任何一个Controller请求方法出错误,都会调用该异常处理器处理。

     <beanclass="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
         <propertyname="exceptionMappings">
             <props>
                 <propkey="java.lang.Exception">error500</prop>
                 <!-- 
                 <prop key="异常类型">错误页面名称</prop>
                 <prop key="java.lang.NumberFormatException">error500</prop>
                  -->
             </props>
         </property>
     </bean>
    

  1. 局部异常处理

    在Controller组件中使用@Exceptionhandler注解标记定义一个方法,当Contoller抛异常后会优先调用@ExcepitonHadler方法处理。

     public String xxx(Exception e,...);
     public ModelAndView xxx(Exception e,...);
    
  1. Controller之外异常

    可以通过在web.xml追加配置

       <error-page>
           <error-code>404</error-code>
           <location>/WEB-INF/error404.jsp</location>
       </error-page>
    
  2. 自定义异常处理器

    • 编写异常处理器类

        public classMyExceptionResolverimplementsHandlerExceptionResolver{
            public ModelAndView resolveException(
                    HttpServletRequest arg0, 
                    HttpServletResponse arg1, 
                    Object arg2,
                    Exception arg3) {
                //追加异常处理逻辑官网:www.fhadmin.org
            }
        }
      
    • 使用时,追加< bean>定义即可

        <bean class="com.xdl.util.MyExceptionResolver">
        </bean>
      

验证码应用

验证码意义:防止频繁提交表单。

  • 案例:显示验证码(字节流响应)

    image.do-->DispatcherServlet-->HandlerMapping-->ImageController-->返回一个图片流

    ImageController主要代码如下:

       @RequestMapping("/image.do")
       public void createImage(HttpServletResponse response) throws Exception{
              //生成一个验证码图片
              BufferedImage image = new BufferedImage(80, 30, BufferedImage.TYPE_INT_RGB);
              Graphics graphic = image.getGraphics();//获取画笔
              //TODO 画图片字符和干扰线信息
              //将图片流使用response输出
              ImageIO.write(image, "jpeg", response.getOutputStream());
       }
    
  • 案例:验证码校验(JSON字符串响应)

(Ajax)   checkImage.do-->DispatcherServlet-->HandlerMapping-->ImageController-->返回一个JSON字符串结果

分享到:
评论

相关推荐

    the-mvc-spring-and-web-study.rar_Java spring mvc_The Web_mvc_spr

    mvc中的spring web 学习及 spring 原理

    编程语言+JAVAspring+MVC框架+Web开发

    编程语言+JAVAspring+MVC框架+...它介绍了JAVAspring的MVC框架的概念、原理和作用,以及如何使用JAVAspring的MVC框架来开发Web应用,包括控制器、模型、视图、拦截器、异常处理等内容,以及一些配置文件和注解的用法。

    Spring框架+Spring工作原理+AOP面向切面编程+JDK代理+Cglib代理

    Spring框架是一个开放源代码的J2EE应用程序框架,是对bean的生命周期进行管理的轻量...Spring框架主要由七部分组成,分别是Spring Core,Spring AOP,Spring ORM,Spring DAO,Spring Context,Spring Web和Spring Web MVC。

    spring-mvc-demo:关于Spring MVC 4工作原理的简短演示

    关于Spring MVC 4工作原理的简短演示: 如何建立一个简单的网页 Spring表单和验证如何工作 自定义注释 通过使用ControllerAdvice的异常处理程序 通过使用WebAppInitializer类来摆脱web.xml配置。 这适用于Servlet ...

    Spring技术内幕:深入解析Spring架构与设计原理(第2部分)

     Spring如何在Web环境中集成IoC容器并为Web应用开发提供利器?  我们耳熟能详的MVC模式在Spring中是如何实现的?  Spring MVC如何灵活地集成各种丰富的视图展现方案?  Spring实现远端调用的方案有很多种,你...

    全面掌握Spring MVC:从基础到高级的实践指南

    作为架构师和Java开发者,深入理解Spring MVC的原理和实践应用是非常重要的。本文通过分析Spring MVC的核心组件和执行流程,提供了一个全面的学习指南。 Spring MVC基于Model-View-Controller(MVC)架构模式,优化...

    互联网轻量级SSM框架解密:Spring、Spring MVC、MyBatis源码深度剖析

    Spring、Spring MVC、MyBatis源码深度剖析》Spring 源码剖析篇基于Spring 4.3.2 版本,剖析了Spring 上下文、Spring AOP 和Spring 事务的实现,并通过实例展示了框架陷阱的隐蔽性及学习框架原理的必要性。...

    Spring技术内幕:深入解析Spring架构与设计原理

     spring如何在web环境中集成ioc容器并为web应用开发提供利器?  我们耳熟能详的mvc模式在spring中是如何实现的?  spring mvc如何灵活地集成各种丰富的视图展现方案?  spring实现远端调用的方案有很多种,你...

    spring MVC HelloWorld

    我自己写的Spring MVC的一个HelloWold,从建HelloWorld工程,搭建环境Install spring,配置web.xml,配置SpringMVC的配置文件springDispatcherServlet-servlet.xml,添加控制器类,建jsp页面,部署 Tomcat,最后运行...

    Spring MVC MYBatis企业应用实战

    Spring MVC MYBatis企业应用实战,详细描述spring mvc原理及注解,怎么与mybatis整合,构建企业级web实战

    Spring技术内幕:深入解析Spring架构与设计原理(第1部分)

     Spring如何在Web环境中集成IoC容器并为Web应用开发提供利器?  我们耳熟能详的MVC模式在Spring中是如何实现的?  Spring MVC如何灵活地集成各种丰富的视图展现方案?  Spring实现远端调用的方案有很多种,你...

    Spring技术内幕:深入解析Spring架构与设计原理(第一部分)

     Spring如何在Web环境中集成IoC容器并为Web应用开发提供利器?  我们耳熟能详的MVC模式在Spring中是如何实现的?  Spring MVC如何灵活地集成各种丰富的视图展现方案?  Spring实现远端调用的方案有很多种,你...

    Spring MVC 框架搭建及详解

    Spring MVC 框架搭建及详解,现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要...不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。

    Maven+Hibernate+Spring+Spring MVC开发新闻发布系统

    1、深入理解Maven工作原理 2、熟练掌握Maven基础应用 3、熟练掌握Maven企业级开发 四、课程大纲 第1课 Maven 概述及安装 第2课 使用Maven构建Java项目 第3课 理解Maven核心概念(一) 第4课 使用Maven核心概念(二...

    Spring攻略(第二版 中文高清版).part1

    8.1 用Spring MVC开发简单的Web应用 280 8.1.1 问题 280 8.1.2 解决方案 281 8.1.3 工作原理 283 8.2 用@RequestMapping映射请求 293 8.2.1 问题 293 8.2.2 解决方案 294 8.2.3 工作原理 294 8.3 ...

    Spring MVC 框架搭建配置方法及详解

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的... Spring 2.5.6:spring.jar、spring-webmvc.jar、commons-logging.jar、cglib-nodep-2.1_3.jar  Hibernat

    Spring技术内幕:深入解析Spring架构与设计原理 1/2

     spring如何在web环境中集成ioc容器并为web应用开发提供利器?  我们耳熟能详的mvc模式在spring中是如何实现的?  spring mvc如何灵活地集成各种丰富的视图展现方案?  spring实现远端调用的方案有很多种,你...

    Spring攻略(第二版 中文高清版).part2

    8.1 用Spring MVC开发简单的Web应用 280 8.1.1 问题 280 8.1.2 解决方案 281 8.1.3 工作原理 283 8.2 用@RequestMapping映射请求 293 8.2.1 问题 293 8.2.2 解决方案 294 8.2.3 工作原理 294 8.3 ...

    看透SpringMVC源代码分析与实践(扫描版)

     系统理解Spring MVC框架,为灵活开发高质量产品打下坚实基础。  深入理解Spring MVC的编程技巧和设计理念,提高综合思考、整体架构的能力。  学习作者自研的源代码分析方法——器用分析法,高效学习程序源代码。

Global site tag (gtag.js) - Google Analytics