初学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,运行后地址栏添加后缀即可

输出成功!

相关推荐
lj90772264426 分钟前
Dockerfile部署xxljob
java·docker
多则惑少则明36 分钟前
idea 编辑器常用插件集合
java·编辑器·intellij-idea
BLUcoding1 小时前
RabbitMQ08_保证消息可靠性
java·rabbitmq
MogulNemenis1 小时前
力扣415周赛
java·数据结构·算法·leetcode
ai安歌1 小时前
【JavaWeb】利用IDEA2024+tomcat10配置web6.0版本搭建JavaWeb开发项目
java·开发语言·后端·tomcat·web·intellij idea
2407-2 shw1 小时前
weblogic CVE-2018-2894 靶场攻略
java·运维·服务器·安全·weblogic
尘浮生1 小时前
Java项目实战II基于Java+Spring Boot+MySQL的作业管理系统设计与实现(源码+数据库+文档)
java·开发语言·数据库·spring boot·后端·mysql·spring
lizhou8282 小时前
win10下使用docker、k8s部署java应用
java·docker·kubernetes
程序员阿鹏2 小时前
ArrayList 与 LinkedList 的区别?
java·开发语言·后端·eclipse·intellij-idea
18你磊哥2 小时前
java重点学习-JVM类加载器+垃圾回收
java·jvm