• spring学习四:springMVC


    ref:http://www.cnblogs.com/ysocean/tag/SpringMVC%E5%85%A5%E9%97%A8%E7%B3%BB%E5%88%97/

    Spring MVC的处理流程与相关组件

    • 1:处理流程

          

      

    第一步:用户发送请求到前端控制器(DispatcherServlet)。
    
    第二步:前端控制器请求 HandlerMapping 查找 Handler,可以根据 xml 配置、注解(@Controller与@ControllerMapping)进行查找。
    
    第三步: 处理器映射器 HandlerMapping 向前端控制器回 Handler
    
    第四步:前端控制器调用处理器适配器去执行 Handler
    
    第五步:处理器适配器执行 Handler
    
    第六步:Handler 执行完成后给适配器返回 ModelAndView
    
    第七步:处理器适配器向前端控制器返回 ModelAndView
    
        ModelAndView 是SpringMVC 框架的一个底层对象,包括 Model 和 View
    
    第八步:前端控制器请求试图解析器去进行视图解析
    
        根据逻辑视图名来解析真正的视图。
    
    第九步:试图解析器向前端控制器返回 view
    
    第十步:前端控制器进行视图渲染
    
        就是将模型数据(在 ModelAndView 对象中)填充到 request 域
    
    第十一步:前端控制器向用户响应结果
    • 相关组件的介绍:
      1、前端控制器DispatcherServlet(不需要程序员开发)。
        作用:接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度。
      2、处理器映射器HandlerMapping(不需要程序员开发)。
        作用:根据请求的url查找Handler。
      3、处理器适配器HandlerAdapter(不需要程序员开发)。
        作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler。
      4、处理器Handler(需要程序员开发)。
        注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
      5、视图解析器ViewResolver(不需要程序员开发)。
        作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
      6、视图View(需要程序员开发jsp)。
        注意:View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)
      ps:不需要程序员开发的,需要程序员自己做一下配置即可。

    Spring MVC的配置与实现(注解方式):

    1、web.xml配置前端处理器DispatcherServlet:                                   

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3      xmlns="http://java.sun.com/xml/ns/javaee"
     4      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     5      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
     6   <display-name>SpringMVC_01</display-name>

    <!-- 配置前端控制器DispatcherServlet --> 8 <servlet> 9 <servlet-name>springmvc</servlet-name> 10 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 11 <!--springmvc.xml 是自己创建的SpringMVC全局配置文件,用contextConfigLocation作为参数名来加载 12 如果不配置 contextConfigLocation,那么默认加载的是/WEB-INF/servlet名称-servlet.xml,在这里也就是 springmvc-servlet.xml 13 --> 14 <init-param> 15 <param-name>contextConfigLocation</param-name> 16 <param-value>classpath:springmvc.xml</param-value> 17 </init-param> 18 </servlet> <!--拦截器--> 20 <servlet-mapping> 21 <servlet-name>springmvc</servlet-name> 22 <!--第一种配置:*.do,还可以写*.action等等,表示以.do结尾的或者以.action结尾的URL都由前端控制器DispatcherServlet来解析 23 第二种配置:/,所有访问的 URL 都由DispatcherServlet来解析,但是这里最好配置静态文件不由DispatcherServlet来解析 24 错误配置:/*,注意这里是不能这样配置的,应为如果这样写,最后转发到 jsp 页面的时候,仍然会由DispatcherServlet进行解析, 25 而这时候会找不到对应的Handler,从而报错!!! 26 --> 27 <url-pattern>/</url-pattern> 28 </servlet-mapping> 29 </web-app>

    2、springmvc.xml中配置映射器、适配器、视图解析器                             

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3       ...>

    18 <!--注解处理器映射器 --> 19 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> 20 21 <!--注解处理器适配器 --> 22 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> 23 24 <!--使用mvc:annotation-driven可以代替上面的映射器和适配器 25 这里面会默认加载很多参数绑定方法,比如json转换解析器就默认加载,所以优先使用下面的配置 26 --> 27 <!-- <mvc:annotation-driven></mvc:annotation-driven> --> 28 29 30 <!--单个配置Handler --> 31 <!-- <bean class="com.ys.controller.HelloController"></bean> --> 32 33 <!--批量配置Handler,指定扫描的包全称,对该包下的注解如@Controlller@Resource等生成bean--> 34 <context:component-scan base-package="com.ys.controller"></context:component-scan> 35 36 37 <!--配置视图解析器 --> 38 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 39 <!-- 返回视图页面的前缀 --> 40 <property name="prefix" value="/WEB-INF/view/"></property><!--前后不要丢掉/--> 41 <!-- 返回页面的后缀 --> 42 <property name="suffix" value=".jsp"></property> 43 </bean> 44 </beans>

    3、编写handler                                                                                

    • 注解@Controller标记一个类,那么该类就是一个SpringMVC Controller对象。
    • 注解@ControllerMapping真正实现了请求处理器。当拦截到该url时,使用对应方法进行处理,可以用在类上;
     1 package com.ys.controller;
     2  
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.RequestMapping;
     5 import org.springframework.web.servlet.ModelAndView;
     6  
     7 //使用@Controller注解表示这个类是一个Handler
     8 @Controller
     9 public class HelloController {
    10  
    11     //@RequestMapping注解括号里面的表示访问的URL,任何以/hello形式访问的路径都会交给hello方法处理;
    12     @RequestMapping("hello")
    13     public ModelAndView hello(){
    14         ModelAndView modelView = new ModelAndView();
    15         //类似于 request.setAttribute()
    16         modelView.addObject("name","张三");
    17         //配置返回的视图名,由于我们在springmvc.xml中配置了前缀和后缀,这里直接写视图名就好
    18         modelView.setViewName("index");
    19         //modelView.setViewName("/WEB-INF/view/index.jsp");注意这里是地址,不是随便起的名字
    20         return modelView;
    21     }
    22  
    23 }

    最后:编写index.jsp。配置Tomcat后访问:http://localhost:8080/springmvc-project-name/hello;

  • 相关阅读:
    netstat命令查看服务器运行情况
    分布式架构进化之路
    显示器 Linux 性能 18 (一个命令行工具传递)
    _00024 尼娜抹微笑伊拉克_云计算ClouderaManager以及CHD5.1.0群集部署安装文档V1.0
    CMDeviceMotion使用
    Ubuntu 安装和配置minicom
    树阵
    HTML5在input背景提示文本(placeholder)的CSS美化
    PowerDesigner反projectM连接ySql没有mySql odbc驱动器
    Flume 1.5日志收集和存款mongodb安装结构
  • 原文地址:https://www.cnblogs.com/whtblog/p/9067188.html
Copyright © 2020-2023  润新知