初学SpringMVC之执行原理

Spring MVC 是基于 Java 实现 MVC 的轻量级 Web 框架

导入 jar 包

pom.xml 文件导入依赖:

XML 复制代码
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

配置 web.xml 文件:

注册 DispatcherServlet

org.springframework.web.servlet.DispatcherServlet

关联一个 SpringMVC 的配置文件 <init-param>

启动级别 <load-on-startup>

/ 匹配所有的请求,不包括 .jsp

/* 匹配所有的请求,包括 .jsp

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"
         metadata-complete="true">
  
  <!-- 注册DispatcherServlet -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
    <!-- 关联一个SpringMVC的配置文件 -->
    <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>
  
  <!-- /匹配所有的请求,不包括.jsp -->
  <!-- /*匹配所有的请求,包括.jsp -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
</web-app>

关联 SpingMVC 的配置文件 springmvc-servlet.xml(放在 resources 目录下)

添加处理器映射

org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

添加处理器适配器

org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

添加视图解析器

org.springframework.web.servlet.view.InternalResourceViewResolver

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

    <!-- 视图解析器:DispatcherServlet 给它的 ModelAndView
    1.获取 ModelAndView 的数据
    2.解析 ModelAndView 的视图名字
    3.拼接视图名字,找到对应的视图  /WEB-INF/jsp/hello.jsp
    4.将数据渲染到这个视图上
    -->
    
    <!-- 添加处理器映射 -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!-- 添加处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!-- 添加视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- Handle -->
    <bean id="/hello" class="com.demo.controller.HelloController"/>

</beans>

实现 Controller 接口,重写方法

ModelAndView 模型和视图

封装对象、封装视图

java 复制代码
package com.demo.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

        //ModelAndView 模型和视图
        ModelAndView modelAndView = new ModelAndView();

        //封装对象,放在ModelAdnView中
        modelAndView.addObject("msg","HelloSpringMVC!");

        //封装要跳转的视图,放在ModelAndView中
        modelAndView.setViewName("hello"); //  /WEB-INF/jsp/hello.jsp

        return modelAndView;
    }
}

在 WEB-INF 目录下创建 jsp 目录

在 hello.jsp 页面写一行 ${msg}

注意 jsp 目录放在 WEB-INF 目录下

(之前放错了位置一直报 404,还在考虑是不是 web 环境问题,给我气笑了)

在 springmvc-servlet.xml 文件下添加一行

(注意:**一定要加 /,**不然找不到,又报 404)

XML 复制代码
<!-- Handle -->
<bean id="/hello" class="com.demo.controller.HelloController"/>

配置 Smart Tomcat,运行后地址栏添加后缀即可

输出成功!

相关推荐
挺菜的13 分钟前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法
掘金-我是哪吒1 小时前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
亲爱的非洲野猪1 小时前
Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
java·分布式·中间件·kafka
wfsm1 小时前
spring事件使用
java·后端·spring
微风粼粼2 小时前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo
缘来是庄2 小时前
设计模式之中介者模式
java·设计模式·中介者模式
rebel2 小时前
若依框架整合 CXF 实现 WebService 改造流程(后端)
java·后端
代码的余温3 小时前
5种高效解决Maven依赖冲突的方法
java·maven
慕y2743 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
paishishaba4 小时前
Maven
java·maven