第11章 Spring MVC入门

发布时间 2023-04-25 02:02:35作者: 冬日限定
学习目标
● 了解Spring MVC的特点
● 掌握Spring MVC入门程序的编写
● 熟悉Spring MVC的工作流程
11.1 Spring MVC概述
Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。
· 是Spring框架的一部分,可以方便地利用Spring所提供的其他功能。
· 灵活性强,易于与其他框架集成。
· 提供了一个前端控制器DispatcherServlet,使开发人员无须额外开发控制器对象。
· 可自动绑定用户输入,并能正确的转换数据类型。
· 内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入表单。
· 支持国际化。可以根据用户区域显示多国语言。
· 支持多种视图技术。它支持JSP、Velocity和FreeMarker等视图技术。
· 使用基于XML的配置文件,在编辑后,不需要重新编译应用程序。
11.2 第一个Spring MVC应用
1.jar包
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
   
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
2.web.xml配置前端控制器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.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>
</web-app>
3.Controller
public class FirstController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//        创建modelandview对象
        ModelAndView modelAndView = new ModelAndView();
//        向模型对象中添加数据
        modelAndView.addObject("msg","firs springmvc program");
//        设计逻辑视图名
        modelAndView.setViewName("/WEB-INF/jsp/first.jsp");
//        返回modelandview对象
        return modelAndView;
    }
}
4.springmvc-config.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-4.3.xsd">
<!-- 配置处理器Handle,映射“/firstController”请求 -->
    <bean name = "/firstController" class="com.itheima.controller.FirstController"/>
<!--    处理器映射器,将处理器Handle的name作为url进行查找-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--    处理器适配器,配置对处理器中handleRequest()方法的调用-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--    视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>
Spring 4.0以后,如果不配置处理器映射器、处理器适配器和视图解析器,也会使用Spring内部默认的配置来完成相应的工作
5.创建视图(View)页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
 
 
<!DOCTYPE html>
<html lang="zh-CN">
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
<title>入门程序</title>
<body>
    ${msg}
</body>
</html>
6.启动服务器测试
 
问题:pom.xml文件中成功引入了依赖但是却无法使用
解决方案:删除.idea
 
问题:javax.servlet.http.HttpServletResponse爆红
解决方案:
 
访问不到,就连上面的hello01.html都访问不到了
11.3 Spring MVC的工作流程
(1)用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet所拦截。
(2)DispatcherServlet拦截到请求后,会调用HandlerMapping处理器映射器
(3)处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
(4)DispatcherServlet会通过返回信息选择合适的HandlerAdapter(处理器适配器)。
(5)HandlerAdapter会调用并执行Handler(处理器),这里的处理器指的就是程序中编写的Controller类,也被称之为后端控制器。
(6)Controller执行完成后,会返回一个ModelAndView对象,该对象中会包含视图名或包含模型和视图名。
(7)HandlerAdapter将ModelAndView对象返回给DispatcherServlet。
(8)DispatcherServlet会根据ModelAndView对象选择一个合适的ViewReslover(视图解析器)。
(9)ViewReslover解析后,会向DispatcherServlet中返回具体的View(视图)。
(10)DispatcherServlet对View进行渲染(即将模型数据填充至视图中)。
(11)视图渲染结果会返回给客户端浏览器显示。
 
【思考题】
1.请简述Spring MVC框架的优点。
spring原生框架,spring可提供强大的支持。
可移植性强,兼容各种数据库和其他框架。
轻量级,易于开发。
适合高并发的大型互联网项目。
2.请简述Spring MVC框架的工作执行流程。
用户发送请求到服务器,前段控制器dispatcherservlet拦截请求,调用handlermapping请求适配器,根据url找出适合的xxx,返回给前端控制器,然后调用handleradapter请求拦截器,调用并返回拦截器实例,调用viewcontroller视图解析器,返回view,前端控制器对其进行渲染后返回给用户。