初识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配置

相关推荐
数据的世界0142 分钟前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐1 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
OopspoO3 小时前
qcow2镜像大小压缩
学习·性能优化
A懿轩A4 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
居居飒4 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
kkflash34 小时前
提升专业素养的实用指南
学习·职场和发展
Hejjon4 小时前
SpringBoot 整合 SQLite 数据库
笔记
1 9 J5 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
6.946 小时前
Scala——身份证号码查询籍贯
学习·scala
爱吃西瓜的小菜鸡6 小时前
【C语言】矩阵乘法
c语言·学习·算法