框架:Spring MVC

运行流程

1.   HTTP请求访问 WEB应用,WEB服务器加载web.xml,web.xml拦截请求进入Spring MVC入口DispatcherSevlet

2.   DispatcherSevlet 根据web.xml中<servlet-name> 找配置文件 {servlet-name}-servlet.xml

3.    {servlet-name}-servlet.xml配置 访问路径到控制类的映射

4.   控制类:实现接口Controlle, 处理来自对应的请求,返回ModelAndView对象给DispatcherServlet

        ModelAndView对象:包含了模型(Model)和视图(View)

5.   DispatcherServlet将View对象渲染出的结果返回给.jsp;

        ViewResoler视图解析器:视图定位。在Web应用中查找View对象,从而将响应结果渲染给客户

6.  .jsp页面:通过EL表达式显示的返回内容;

图解:

框架是围绕DispatcherServlet设计的,它处理所有的HTTP请求和响应。 请求处理工作流如下图所示:

  1. 在接收到HTTP请求后,DispatcherServlet会查询HandlerMapping以调用相应的Controller
  2. Controller接受请求并根据使用的GET或POST方法调用相应的服务方法。 服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet
  3. DispatcherServlet将从ViewResolver获取请求的定义视图。
  4. 当视图完成,DispatcherServlet将模型数据传递到最终的视图,并在浏览器上呈现。

HandlerMapping对象:客户请求到Controller之间的映射。借助于Spring提供的HandlerMapping定位到具体的Controller。 Spring默认使用BeanNameUrlHandlerMapping。还有SimpleUrlHandlerMappingCommonsPathMapHandlerMapping

1) web.xml:

初始化时,框架将尝试从位于应用程序的WebContent/WEB-INF目录中的名为[servlet-name]-servlet.xml的文件加载应用程序上下文。

需要通过使用web.xml文件中的URL映射来映射希望DispatcherServlet处理的请求。

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>  <!--拦截所有的请求,注1-->
    </servlet-mapping>

注1:*.do 只针对以'.do'结尾的请求进行处理,不再维护静态资源

2){servlet-name}-servlet.xml 映射配置:

用于创建定义的bean,它会覆盖在全局范围中使用相同名称定义的任何bean的定义

表示访问路径/index会交给id=indexController的bean处理;  id=indexController的bean配置为类:controller.Controller

<beans······>
    <!--表示从 包路径 下扫描有@Controller注解的类-->
    <context:component-scan base-package="包路径" />

    <!--定义用于解析视图名称的规则,前缀+后缀-->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/page/" />
        <property name="suffix" value=".jsp" />
    </bean>

<!--------------------------------------------------------------------------->
    <!--定义访问路径对应的处理类方法,可用注解方式替代-->
    <bean id="simpleUrlHandlerMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="访问路径">控制类indexController</prop>
            </props>
        </property>
    </bean>
    <bean id="控制类indexController" class="控制类indexController路径"></bean>
<!--------------------------------------------------------------------------->
</beans>

3)控制类Controller

DispatcherServlet将请求委派给控制器以执行特定于其的功能。 提供方法handleRequest处理请求。  通过 ModelAndView 对象把模型和视图结合在一起

@Controller 注释定义该类作为一个 Spring MVC 控制器,不再实现Controller接口

@RequestMapping 注释用于映射 URL 到整个类或一个特定的处理方法。

        @RequestMapping("/hello")表示访问路径/hello会映射到该方法上

        @RequestMapping(method = RequestMethod.GET)  声明方法作为控制器的默认service方法来处理 HTTP GET 请求

import......
----------------------------------------------------------------------xml方式
public class IndexController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("index");
//模型数据是message,内容是“Hello Spring MVC”
        mav.addObject("message", "Hello Spring MVC");
//返回给视图
        return mav;
    }
}
----------------------------------------------------------------------注解方式1
@Controller
@RequestMapping("/hello")
public class HelloController{
   @RequestMapping(method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }
}
----------------------------------------------------------------------注解方式2
@Controller
public class HelloController{
//写在此处表示/hello路径GET时触发
   @RequestMapping(value = "/hello", method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }
}
----------------------------------------------------------------------
//访问/index
    @RequestMapping("/index")
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("index");
        mav.addObject("message", "Hello Spring MVC");
        return mav;
    }
//访问/jump客户端跳转到/index
    @RequestMapping("/jump")
    public ModelAndView jump() {
        ModelAndView mav = new ModelAndView("redirect:/index");
        return mav;
    }  
----------------------------------------------------------------------
    //Model,ModelMap,ModelAndView三者区别
}

4)index.jsp

EL表达式显示message的内容:${message}

猜你喜欢

转载自blog.csdn.net/xyc1211/article/details/80008933