SpringMVC原理图解
SpringMVC概述
MVC是一种设计模式,SpringMVC是一个MVC框架。SpringMVC可以帮助我们进行更简洁的Web开发。
模型(Model):封装了应用程序的数据和一般他们会组成的POJO。
视图(View):呈现模型数据,一般生成HTML输出到客户端的浏览器。
控制器(Controller):处理用户请求,返回建立的模型,并把它传递给视图渲染。
SpringMVC的工作原理
- 用户只需要与DispatcherServlet交互,用户向DispatcherServlet发出请求,中间步骤由控制器自动完成,最终向用户返回响应。
- DispatcherServlet首先获取Handler的映射关系,然后适配相应的处理器执行业务操作,最后返回模型与视图对象到DispatcherServlet。
- DispatcherServlet把返回的模型传给视图渲染,最终返回给用户。
SpringMVC项目中对应的配置文件
- web.xml文件
此文件为DispatcherServlet相关配置
<?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">
<!-- 方法二 配置dispatcherServlet,这是springMVC的核心,请求分发器(前端控制器)-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--绑定spring的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动级别-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- / : 只匹配所有的请求,不会去匹配jsp页面-->
<!-- /* : 匹配所有的请求,包括jsp页面-->
</web-app>
- springmvc-servlet.xml文件
此文件为映射器,适配器和视图解析器相关配置
<?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">
<!-- 处理器/映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 处理器/适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 视图解析器 : 模板引擎 ThymeLeaf, Freemarker-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WED-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--BeanNameUrlHandlerMapping-->
<bean id="/hello" class="com.sheng.controller.MyController"/>
</beans>
- test.jsp
<%--
Created by IntelliJ IDEA.
User: ys
Date: 2021/1/24
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
4.MyController
为了呈现原理图中相关参数,MyController未使用注解,而是实现Controller接口。
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Author : ys
*/
public class MyController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView modelAndView = new ModelAndView();
//业务代码
String result = "HelloSpringMVC";
modelAndView.addObject("msg", result);
//视图跳转(test.jsp)
modelAndView.setViewName("test");
return modelAndView;
}
}