目录:
一、目录结构:
二、ReqAction控制器,@RequestMapping注解:
package com.user.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/a")//访问路径
public class ReqAction {
/**
* action类相当于HttpServlet,规定一个路径,客户端可以通过路径访问action
* action中所有功能的实现都是由方法来完成的
* action类的方法相当于doGet和doPost,但比doGet和doPost更加灵活,action类方法的规范:
* (1)访问权限必须是public(doGet是protected类型)
* (2)方法的返回值任意(doGet必须是void类型)
* (3)方法名称任意(只能是doGet)
* (4)方法参数任意(必须是HTTPServletRequest、HTTPServletResponse类型)
* (5)需要在方法和类上加@RequestMapping注解来声明一个访问路径,类似@WebServlet。
*/
//接收get请求
@RequestMapping(value = "/req.action", method = RequestMethod.GET)
public String req1(){
System.out.println("我处理get请求");
return "main";
}
//接收post请求
@RequestMapping(value = "/req.action", method = RequestMethod.POST)
public String req2(){
System.out.println("我处理post请求");
return "main";
}
}
三、springmvc核心配置文件,添加视图解析器:
<?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: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/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--添加包扫描,通过扫描包内的注解使用IOC创建对象-->
<context:component-scan base-package="com.user.controller"></context:component-scan>
<!--添加视图解析器
视图解析器作用:
比如我们要访问/admin/main.jsp时,传统页面跳转需要输入完整URI访问路径,
而使用了视图解析器后,会自动在访问路径前后添加配置前缀和配置后缀,
比如配置了如下前缀和后缀后,我们要访问/admin/main.jsp,访问路径只需要写main就可以了
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀-->
<property name="prefix" value="/admin/"></property>
<!--配置后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
四、web.xml,配置DispatcherServlet前置控制器:
<?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">
<!--在xml中注册SpringMVC框架,并配置DispatcherServlet控制器-->
<!--关于DispatcherServlet:
SpringMVC的核心就是DispatcherServlet,DispatcherServlet实质也是一个HttpServlet。
DispatcherSevlet负责拦截请求,并将其分配给相应的controller控制器来处理。
DispatcherServlet是前置控制器,配置在web.xml文件中的。
拦截匹配的请求,拦截规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。
DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。
-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--init-param初始化springmvc核心配置文件的配置-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--url-pattern规定拦截的请求的样式,只有符合该样式的请求才会被拦截,进而被springmvc处理。
例如:http://localhost:8080/demo.action会被springmvc拦截
http://localhost:8080/demo.jsp不会被springmvc拦截
-->
<url-pattern>*.action</url-pattern>
<!--
<url-pattern>/</url-pattern>
该样式会拦截所有请求并处理,如果@controller中有方法处理该请求,则交由该方法进行处理,例如访问http://localhost:8080/demo,controller中有一个@RequestMapping("/demo"),则会被处理。
如果@controller中没有方法处理该请求,则寻找相应的资源并进行加载。例如访问http://localhost:8080/main.jsp,会寻找资源并进行访问。
-->
</servlet-mapping>
</web-app>
五、pom.xml,添加spring6依赖:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>datasubmit</artifactId>
<version>1.0-</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<!--maven里程碑仓库,spring6在里程碑仓库里才有-->
<repositories>
<repository>
<id>Spring Milestones Repository</id>
<name>Spring Milestones Repository</name>
<url>https://repo.spring.io/milestone/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--springmvc依赖-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>6.0.0-M4</version>
</dependency>
<!--jakarta依赖-->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
六、index.jsp,项目执行流程说明:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form method="get" action="${pageContext.request.contextPath}/a/req.action">
<input type="submit" value="提交">
</form>
<%--
提交表单后访问xmm/req.action,因为后缀是.action,所以会被springmvc的DispatcherServlet捕获并处理,
根据URI跳转到ReqAction控制器中带有@RequestMapping("/req.action")注解且接收get请求的方法,
req1方法返回"main","main"会被视图解析器添加前后缀,变成/admin/main.jsp,接着以转发的方式访问该URI。
DemoAction相当于HttpServlet,返回"main"相当于在servlet中使用转发机制访问服务器中的另一个资源
发出请求index.jsp<--------------->DispatcherServlet前置控制器,不会被拦截<------------------->SpringMVC的处理器DemoAction(是一个普通的方法)
发出请求demo.action <--------------->DispatcherServlet前置控制器,被拦截<------------------->SpringMVC的处理器DemoAction(是一个普通的方法)
发出请求main.jsp <--------------->DispatcherServlet前置控制器,不会被拦截<------------------->SpringMVC的处理器DemoAction(是一个普通的方法)
--%>
</body>
</html>
七、main.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>main...</h1>
</body>
</html>
八、运行结果:
打开webapp项目默认访问index.jsp:
点击提交按钮后跳转到相应servlet: