什么是Spring MVC?
Spring MVC是Spring framework的一部分,是基于java的实现MVC的web框架。
Spring MVC 特点
Spring MVC 执行原理
实线都是Spring MVC做的
中心控制器:该框架主要就是围绕DispactcherServlet设计的,DispatcherServlet的作用就是将请求分发到不同的处理器。
Model&View
Model&View是DispatcherServlet的一个必须实现的方法
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
//业务代码
String result ="Hello SpringMVC!!!";
//
mv.addObject("msg",result);
//视图跳转
mv.setViewName("test");
return mv;
}
}
执行原理
HandlerMapping:处理器映射器,根据请求找到Controller处理器
<!--HandlerMapping需要bean-->
<bean id="/hello" class="com.liu.controller.HelloController"/>
HandlerExecution:将解析后的信息传递给DispatcherServlet,如处理器映射器等
HandlerAdapter:处理器适配器,按照特定的规则执行Handler,找到Controller,让其执行;Controller键执行后的信息返回给Adapter,如ModelAndView
HandlerAdapter再将ModelAndView返回给DispatcherServlet
DispatcherServlet通视图解析器ViewResolver来解析HandlerAdapter传递的信息(视图名称)
<!--视图解析器-->
<!--
1.获取ModelAndView中的数据
2.获取视图名称并拼接好 /WEB-INF/jsp/test.jsp
3.将数据渲染到该视图上
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
视图解析器返回信息(视图名)给DispatcherServlet
DispatcherServlet调用视图
使用步骤
1.配置DispactcherServlet(web.xml)
<?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">
<!--核心:配置DispatchServlet请求分发器,前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--绑定spring mvc 的配置文件-->
<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>
<!--
"/"和"/*"的区别:
/:只匹配所有的请求,不匹配jsp
/*:匹配所有的请求,和jsp
-->
</servlet-mapping>
</web-app>
2.mvc配置文件 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"/>
<!--视图解析器-->
<!--
1.获取ModelAndView中的数据
2.获取视图名称并拼接好 /WEB-INF/jsp/test.jsp
3.将数据渲染到该视图上
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--BeanNameUrlHandlerMapping需要bean-->
<bean id="/hello" class="com.liu.controller.HelloController"/>
</beans>
3.Controller编写
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
//业务代码
String result ="Hello SpringMVC!!!";
//
mv.addObject("msg",result);
//视图跳转
mv.setViewName("test");
return mv;
}
}
“/” “/*”
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
<!--
"/"和"/*"的区别:
/:只匹配所有的请求,不匹配jsp
/*:匹配所有的请求,和jsp
-->
</servlet-mapping>
</web-app>
可能遇到的问题:
可能需要在IDEA的项目结构中,添加一个“lib”依赖
狂神博客链接:https://blog.csdn.net/qq_33369905/article/details/106647313?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162322186916780274127024%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=162322186916780274127024&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-2-106647313.nonecase&utm_term=mvc&spm=1018.2226.3001.4450