springmvc

Spring MVC

一.基本操作(入门)

  1. 配置web.jsp

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <!--1.注册DispatcherServlet-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc-servlet.xml</param-value>
            </init-param>
            <!--启动级别-1-->
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <!--/ 匹配所有的请求;(不包括.jsp)-->
        <!--/* 匹配所有的请求;(包括.jsp)-->
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    </web-app>
    
  2. Controller.java

    public class HelloController implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            //ModelAndView 模型和视图
            ModelAndView mv = new ModelAndView();
    
            //封装对象,放在ModelAndView中。Model
            mv.addObject("msg","HelloSpringMVC!");
            //封装要跳转的视图,放在ModelAndView中
            mv.setViewName("hello"); //自动拼接: /WEB-INF/jsp/hello.jsp
            return mv;
        }
    }
    
    
  3. springmvc-servlet.jsp

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!--    1处理映射器-->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--    2处理器适配器-->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--    3视图解析器-->
        <!--视图解析器:DispatcherServlet给他的ModelAndView-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
            <!--前缀-->
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <!--后缀-->
            <property name="suffix" value=".jsp"/>
        </bean>
    <!--    bean的id可以替代web.jsp的servlet地址配置-->
        <bean id="/hello" class="com.controller.HelloController"/>
    </beans>
    
  4. hello.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        ${msg}
    </body>
    </html>
    

二.实现原理

图片

  1. DispatcherServlet,前置控制器,SpringMVC的控制中心,接收用户在浏览器发出的请求,并拦截请求。

    假设: http://localhost:8080/SpringMVC/hello

    拆分分析:

    http://localhost:8080 服务器域名

    (即SpringMVC部署在服务器上的web站点

    hello表示控制器)

    通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。

  2. HandlerMapping,处理器映射器,经过DispatcherServlet调用,根据请求url找到Handler

  3. HandlerExecution,具体的Handler,由HandlerMapping获取得到。主要作用是根据url查找控制器,比如hello。

  4. HandlerExecution将HandlerMapping获取到的控制器进行解析,得到解析信息传递给DispatcherServlet。

  5. HandlerAdapter,处理器适配器,按照特定的规则去执行Handler,Handler让具体的Controller执行。

  6. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView

  7. HandlerAdapter将ModelAndView传递给DispatcherServlet

  8. ViewResolver,视图解析器,经过DispatcherServlet的调用,解析HandlerAdapter传递的逻辑视图名

  9. ViewResolver将解析的逻辑视图名传给DispatcherServlet

  10. DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图,将最终视图呈现给用户。

posted @ 2021-12-23 13:40  Jmin-Channel  阅读(40)  评论(0)    收藏  举报