初识SpringMVC(SpringMVC学习笔记一)

1 、还是熟悉的配方,先创建一个父Maven项目(忘记怎么创建项目了就去前面翻笔记),导入通用的配置依赖

XML 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>SprinMVC_Father</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>SprinMVC_Father Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!--导入junit依赖方便后续测试      -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
    <!--导入SpringMVC依赖    -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>
    <!--导入servlet依赖    -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
    <!--导入jsp依赖    -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>
    <!--导入jsptl依赖    -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>SprinMVC_Father</finalName>
  </build>
</project>

2、创建子项目,并确定子项目支持web项目

给子项目也导入servlet和jsp的依赖(双重导入确保不会出错,正常的话父项目导入了子项目不导入也可以,这里我们导入两次确保不会出问题)

XML 复制代码
 <!--导入servlet依赖    -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
    <!--导入jsp依赖    -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>

3、创建一个helleservlet类继承httpservlet用来处理用户的请求,实现父类的doGet和doPost方法

XML 复制代码
package com.li.myservlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HellServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、获取前段参数
        String method = req.getParameter("method");
        if(method.equals("add")){
            req.getSession().setAttribute("msg","执行了add方法");
        }
        if(method.equals("delete")){
            req.getSession().setAttribute("msg","执行了delete方法");
        }
        //2、调用业务层 暂时没有业务成

        //3、视图转发或重定向
        req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

顺便在web里写个测试页面

html 复制代码
 Date: 2024/4/6
  Time: 16:45
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

再写个表单测试

html 复制代码
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/4/6
  Time: 17:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>表单</title>
</head>
<body>
<form action="/hello" method="post">
<input type="text" name="method">
    <input type="submit" >
</form>
</body>
</html>

3、写完servlet的第一件事情就是给它去web.xml中注册上

web.xml的头文件

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">

  
</web-app>

注册完后的web.xml

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">

      <!--注册servlet  -->

        <servlet>
          <servlet-name>hello</servlet-name>
          <servlet-class>com.li.myservlet.HellServlet</servlet-class>
        </servlet>
        <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello</url-pattern>
        </servlet-mapping>

        <!--还有一些其他的配置        -->
        <!--可以设置session的超时时间    这里设置15分钟    -->
<!--        <session-config>-->
<!--          <session-timeout>15</session-timeout>-->
<!--        </session-config>-->

        <!--也可以在这里设置欢迎页面  默认的是 index.jsp     -->
<!--        <welcome-file-list>-->
<!--          <welcome-file>xxx.jsp</welcome-file>-->
<!--        </welcome-file-list>-->
</web-app>

最后目录如下:

3、一切都写完了就配置tomcat

3、初识SpringMVC

SpringMVC的原理如下

4、对 SpringMVC有初步了解之后我们再来创建一次项目

第一步创建视图
第二步:确保最后发布的项目中导入了SpringMVC的依赖
第三步:在web.xml配置文件中配置我们的DispatchServlet
复制代码
<?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:这个是SpringMVC的核心:请求分发器,前端控制器-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--DispatchServlet要绑定一个Spring-mvc的配置文件  其实就是spring的配置文件,
         只是spring可以做很多事情,我们细分下来叫Spring-mvc的配置文件
         -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <!--这里配置文件取名字就是按照上面的servlet-name的名字取的xxx-servlet   -->
                <param-value>classpath:springmvc-servlet.xml</param-value>
            </init-param>
        <!--设置启动级别为1 -->
            <load-on-startup>1</load-on-startup>
        </servlet>



<!--
    SpringMVC中/ 和 /* 的区别
    / :只匹配所有的请求,不会去匹配jsp页面
    /* :匹配所有的请求,包括jsp页面
    -->
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
</web-app>
第四步:编写springmvc的配置文件,其实就是spring的配置文件
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"/>
<!--视图解析器这个必须熟练掌握 后面还会学习一些模板引擎如 Thymeleaf Freemarker-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--需要配置两个参数,一个前缀,一个后缀-->
<!--  前缀    -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
<!--  后缀   -->
        <property name="suffix" value=".jsp"/>
    </bean>

    
</beans>
第五步:编写Controller
java 复制代码
package com.li.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 = new ModelAndView();

//       假设一个业务代码
        String result = "HelloSpringmvc";
        modelAndView.addObject("msg",result);

//        视图跳转
        modelAndView.setViewName("test");
        return modelAndView;
    }
}

4、真实的开发:(一般不会像上面这样用)

第一步:配置web.xml配置文件
XML 复制代码
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!--配置DispatchServlet:这个是SpringMVC的核心:请求分发器,前端控制器-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--DispatchServlet要绑定一个Spring-mvc的配置文件  其实就是spring的配置文件,
 只是spring可以做很多事情,我们细分下来叫Spring-mvc的配置文件
 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <!--这里配置文件取名字就是按照上面的servlet-name的名字取的xxx-servlet   -->
      <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>
    <!--设置启动级别为1 -->
    <load-on-startup>1</load-on-startup>
  </servlet>



  <!--
      SpringMVC中/ 和 /* 的区别
      / :只匹配所有的请求,不会去匹配jsp页面
      /* :匹配所有的请求,包括jsp页面
      -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>
第二步:创建并配置springmvct配置文件
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" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.li.controller"/>
    <!-- 让Spring MVC不处理静态资源 -->
    <mvc:default-servlet-handler />
    <!--
    支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们自动完成上述两个实例的注入。
     -->
    <mvc:annotation-driven />
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>

</beans>
第三步:创建controlle类
java 复制代码
package com.li.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
//@Controller是为了让Spring IOC容器初始化时自动扫描到;
//@RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/HelloController/hello;
    @Controller
    @RequestMapping("/HelloController")
    public class HelloController {
        //真实访问地址 : 项目名/HelloController/hello
        @RequestMapping("/hello")
//        方法中声明Model类型的参数是为了把Action中的数据带到视图中;
        public String sayHello(Model model){
            //向模型中添加属性msg与值,可以在JSP页面中取出并渲染
            model.addAttribute("msg","hello,SpringMVC");
//            方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp。
            return "hello";
        }
    }
第四步:常见视图层(注意要在springmvct配置文件中配置的路径下创建视图层)

这里的路径是:/WEB-INF/jsp/

XML 复制代码
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/4/13
  Time: 16:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>
总结:

实现步骤其实非常的简单:

  1. 新建一个web项目
  2. 导入相关jar包
  3. 编写web.xml , 注册DispatcherServlet
  4. 编写springmvc配置文件
  5. 接下来就是去创建对应的控制类 , controller
  6. 最后完善前端视图和controller之间的对应
  7. 测试运行调试.

使用springMVC必须配置的三大件:

处理器映射器、处理器适配器、视图解析器

通常,我们只需要手动配置视图解析器 ,而处理器映射器处理器适配器 只需要开启注解驱动即可,而省去了大段的xml配置

相关推荐
吴梓穆13 分钟前
UE5学习笔记 FPS游戏制作38 继承标准UI
笔记·学习·ue5
Three~stone36 分钟前
MySQL学习集--DDL
数据库·sql·学习
齐尹秦1 小时前
HTML 音频(Audio)学习笔记
学习
V---scwantop---信1 小时前
英文字体:大胆都市街头Y2Y涂鸦风格品牌海报专辑封面服装字体 Chrome TM – Graffiti Font
笔记·字体
瞌睡不来1 小时前
(学习总结32)Linux 基础 IO
linux·学习·io
Moonnnn.1 小时前
运算放大器(四)滤波电路(滤波器)
笔记·学习·硬件工程
吴梓穆2 小时前
UE5学习笔记 FPS游戏制作37 蓝图函数库 自己定义公共方法
笔记·学习·ue5
吴梓穆2 小时前
UE5学习笔记 FPS游戏制作41 世界模式显示UI
笔记·学习·ue5
虾球xz2 小时前
游戏引擎学习第200天
学习·游戏引擎
梅子酱~3 小时前
Vue 学习随笔系列二十二 —— 表格高度自适应
javascript·vue.js·学习