Spring MVC
Spring MVC介绍
- 什么是MVC
它是Spring框架的一部分,负责表示层 - MVC的好处
- MVC设计模式
引入MVC框架
- 没有使用MVC框架时候的不足
请求参数封装很麻烦
结果视图耦合性强(比如xxx.jsp里边不知道有多少乱七八糟的页面)
url和(controller里的方法)映射不方便(用注解直接填url)
controller的实现有约束 - MVC和SpringMVC
MVC是一种架构,是一种设计思想
而SpringMVC是这种架构下的MVC层的一个框架(工具类)
Spring MVC 的架构
- MVC框架 接收请求,获取数据,分配任务,结果转向(之前在servlet做)
高级框架的底层都是JavaEE规范(servlet、cookies、session等等)
导包
逻辑链
web.xml中初始化DispatcherServlet,并且用init-param说明spring的配置文件,告诉Servlet去这里创建Bean,
在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_3_1.xsd"
version="3.1"
metadata-complete="true">
<!--你要调用的核心控制器的id 和全类名DispatcherServlet-->
<servlet>
<servlet-name>springmvcservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--初始化参数,将applicationContext.xml传给contextConfigLocation-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
</servlet>
<!--你要调用的核心控制器的id和能够访问到这个servlet的url-->
<servlet-mapping>
<servlet-name>springmvcservlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
在Springmvc.xml(src文件夹里的xml文件,沿用之前的applicationContext.xml)配置Spring mvc依赖的Bean
实现请求处理类,并且配置访问URL
- 浏览器中输入了hello.do,由于已经配置了BeanNameUrlHandlerMapping,它会帮你找到hello.do对应的handler
而handler是如何实现的呢? - 继承org.springframework.web.servlet.mvc.Controller,重写方法
@Controller
public class FirstController implements org.springframework.web.servlet.mvc.Controller {
@Autowired
Service myservice;
public void test(){
System.out.println("haha12345");
}
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
System.out.println("haha12345");
return null;
}
}
撸一遍逻辑
- 先在web.xml中配核心servlet——DispatcherServlet;
- 用户输入URL,DispatcherServlet接收到以后转向里边配置好的contextConfigLocation,转向它的value(applicationContext.xml),获得spring的BeanContainer的控制权,可以获得Bean;
- 实例化applicationContext.xml中的bean,其中的HandlerMapping根据你输入的url转向名叫url的bean(这个bean继承了controller类,并且重写了handleRequest方法),并且通过HandlerAdaper找到对应的handler方法进行处理;
- HandlerAdaper把ModelAndView传给核心,核心给ViewResolver进行视图解析、View进行数据填充,最后把生成的结果保存咋response里边返回给用户。