基于表明的SpringMVC框架开拓的步骤第一个大略SpringMVC项目的预期构造新建maven项目,选择webapp模板修正目录构造,添加缺失落的目录,修正目录属性修正pom.xml文件,添加SpringMVC依赖,添加Servlet的依赖
<?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>com.example</groupId> <artifactId>ch01-springmvc-demo</artifactId> <version>1.0.0</version> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <!-- junit测试依赖 --> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <!-- 添加spring-webmvc的依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.5.RELEASE</version> </dependency> <!-- 添加javax-servlet依赖--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <!-- 添加资源文件指定 --> <resources> <!-- 资源文件指定1 --> <resource> <directory>src/main/java</directory> <includes> <include>/.xml</include> <include>/.properties</include> </includes> </resource> <!-- 资源文件指定2 --> <resource> <directory>src/main/resources</directory> <includes> <include>/.xml</include> <include>/.properties</include> </includes> </resource> </resources> </build></project>
在src/main/resources/下添加springmvc.xml配置文件(SpringMVC的核心配置文件),指定包扫描,添加视图解析器包扫描:用于交给Spring容器来创建掌握层工具视图解析器:根据掌握器中的action方法返回的字符串,依据配置前缀和配置后缀拼接出须要跳转的页面路径,本例为:/admin/main.jsp,添加完视图解析器之后,只要返回"main"字符串即可,简化了页面跳转和数据返回操作
<?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"> <!-- 添加包扫描 --> <context:component-scan base-package="com.example.controller"/> <!-- 添加视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置前缀--> <property name="prefix" value="/admin/"/> <!-- 配置后缀--> <property name="suffix" value=".jsp"/> </bean></beans>
删除web.xml文件(模板天生的web.xml文件的版本较低,不用),并新建web1.xml文件,将web1.xml改名为web.xml(又直接新建web.xml的话,天生的还是旧文件,不支持EL表达式,必须这么折腾一下)在项目构造管理中删除和新建web.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"> <!-- 注册SpringMVC框架 --> <servlet> <servlet-name>springmvc</servlet-name> <!-- 注册底层利用的servlet --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 要让SpringMVC的核心处理器知道SpringMVC的核心配置文件,相称于把web项目交给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> <!-- 拦截处理所有以action为后缀名的要求 --> <url-pattern>.action</url-pattern> </servlet-mapping> </web-app>
在webapp目录下新建admin目录,在admin目录下新建main.jsp页面,删除index.jsp并新建index.jsp(旧的index.jsp内容太少),向做事器发送要求
<!-- index.jsp --><%-- Created by IntelliJ IDEA. User: wangxun Date: 2022/8/30 Time: 下午8:07 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>index.jsp</title></head><body><a href="${pageContext.request.contextPath}/demo.action">访问做事器</a></body></html>
开拓掌握器(只是一个普通的类)
package com.example.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/ 业务管理器:包含很多完成详细需求的方法 /@Controllerpublic class DemoAction { / DemoAction中的所有功能实现都是由方法来完成的 这些方法的规范 1.访问权限:public 2.方法的返回值:任意 3.方法名称:任意 4.方法参数:可以没有,如果有可以是任意类型 5.表明:须要利用@RequestMapping表明来声明一个访问路径(名称),这里不用再写:demo.action项目要求路径后面的后缀 由于该后缀是给web.xml中注册的DispatcherServlet看的,起到拦截要求的浸染,符合拦截哀求的要求才交给底层servlet处理 / @RequestMapping("/demo") public String demo(){ System.out.println("做事器被访问......"); return "main"; }}
添加tomcat进行功能测试启动tomcat
注册SpringMVC的核心处理器:DispatcherServlet index.jsp <--------> DispatcherServlet <--------> SpringMVC的掌握器是一个普通方法 one.jsp <--------> DispatcherServlet <--------> SpringMVC的掌握器是一个普通方法
@RequestMapping表明该表明可以用在方法上,为此方法注册一个可以访问的名称(路径)此表明可以加在类上,相称于包名(虚拟路径),用于差异不同掌握器中相同的action方法名称添加在类上做表明的演示:修正index.jsp,变成两个不同要求路径下的要求,但这两个要求的结尾都是demo.action
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>index.jsp</title></head><body><a href="${pageContext.request.contextPath}/test01/demo.action">访问做事器test01</a><br><a href="${pageContext.request.contextPath}/test02/demo.action">访问做事器test02</a></body></html>
在admin目录下新增main2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>main2.jsp</title></head><body><h2>main2......page.......</h2></body></html>
修正原有DemoAction,新增类上表明:@RequestMapping("/test01")
package com.example.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/ 业务管理器:包含很多完成详细需求的方法 /@Controller@RequestMapping("/test01")public class DemoAction { / DemoAction中的所有功能实现都是由方法来完成的 这些方法的规范 1.访问权限:public 2.方法的返回值:任意 3.方法名称:任意 4.方法参数:可以没有,如果有可以是任意类型 5.表明:须要利用@RequestMapping表明来声明一个访问路径(名称),这里不用再写:demo.action项目要求路径后面的后缀 由于该后缀是给web.xml中注册的DispatcherServlet看的,起到拦截要求的浸染,符合拦截哀求的要求才交给底层servlet处理 / @RequestMapping("/demo") public String demo(){ System.out.println("做事器test01被访问......"); return "main"; }}
新增SpringMVC掌握器:DemoAction2,同样包含类上表明
package com.example.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/ 业务管理器:包含很多完成详细需求的方法 /@Controller@RequestMapping("/test02")public class DemoAction2 { / DemoAction中的所有功能实现都是由方法来完成的 这些方法的规范 1.访问权限:public 2.方法的返回值:任意 3.方法名称:任意 4.方法参数:可以没有,如果有可以是任意类型 5.表明:须要利用@RequestMapping表明来声明一个访问路径(名称),这里不用再写:demo.action项目要求路径后面的后缀 由于该后缀是给web.xml中注册的DispatcherServlet看的,起到拦截要求的浸染,符合拦截哀求的要求才交给底层servlet处理 / @RequestMapping("/demo") public String demo(){ System.out.println("做事器test02被访问......"); return "main2"; }}
启动tomcat测试网站首页和两次访问到的页面