文章目录
概念
基于Servlet封装的用于实现MVC控制的web框架,实现前端和服务端的交互
优势
- 严格遵守了MVC分层思想
- 采用了松耦合、插件式结构;相比较于我们封装的BaseServlet以及其他的一些MVC框架来说更灵活、更具扩展性
- SpringMVC是基于Spring的扩展、提供了一套完善的MVC注解
- SpringMVC在数据绑定、视图解析都提供了多种处理方式,可灵活配置
- SpringMVC对RESTful URL设计方法提供了良好的支持
1入门项目部署
- 新建项目,补全目录
- 引入依赖
- 创建SpringMVC配置文件
- 配置前端控制器
- 创建控制器
- 创建视图页面
- 程序测试
1.1 创建项目
不使用骨架,创建普通maven项目,补全缺失目录及配置文件,参考上一节内容。
webapp>WEB-INF>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">
</web-app>
1.2 引入相关依赖
修改pom.xml
添加<packaging>war</packaging>
<?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>springMvcDemo1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<spring.version>5.2.8.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}/version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
</project>
1.3 创建配置文件
resources>springmvc.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: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
http://www.springframework.org/schema/context/spring-context.xsd
">
<context:component-scan base-package="com.yiwu"/>
<mvc:annotation-driven/>
</beans>
1.4 配置前端控制器
SpringMVC提供了一个名为DispatcherServlet的类(SpringMVC前端控制器),用于拦截用户请求交由SpringMVC处理
更改
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">
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
1.5 创建控制器
在SpringMVC中,将接收用户请求,处理用户请求的类称之为Controller(控制器)
- Spring注解扫描的范围内创建controllers包:
com.yiwu.controllers
- 创建一个普通java类
- 类上添加注解@Controller,对应方法添加 @RequestMapping注解
- 模拟处理处理过程,省略的service与dao的相关操作,直接返回成功页面。
package com.yiwu.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@RequestMapping("/add")
public String addUser(){
//System.out.println("访问到了插入用户");
return "success.jsp";
}
@RequestMapping("/delete")
public String deleteUser(){
System.out.println("访问到了删除用户");
return "success.jsp";
}
}
1.6 创建视图页面
在webapp下创建success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
successful
</body>
</html>
1.7 访问测试
http://localhost:8080/demo2_war/add
目前案例项目结构如下:
2入门程序注意要点
2.1 访问路径问题
可以在类上使用注解@RequestMapping(“/user”)。
package com.yiwu.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/add")
public String addUser(){
System.out.println("访问到了插入用户");
return "../success.jsp";
}
@RequestMapping("/delete")
public String deleteUser(){
System.out.println("访问到了删除用户");
return "../success.jsp";
}
}
http://localhost:8080/demo2_war/user/add
2.2 静态资源访问配置
<servlet-mapping>
<servlet-name>Spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
/* 拦截所有的HTTP请求,包括.jsp的请求,都做为控制器类的请求路径来处理
/ 拦截所有的HTTP请求,但不包括.jsp的请求,但不会放行静态资源请求(html/js/css/图片)
需要放行静态资源,在springmvc-config.xml
配置放置如下,表示所有符合/pages/**请求路径,都会到pages文件夹下寻找资源(包含子目录)。
<mvc:resources mapping="/pages/**" location="/pages/"/>
目录结构如下:
可以通过以下链接访问到对应资源
http://localhost:8080/demo2_war/pages/index.html
http://localhost:8080/demo2_war/pages/a/index2.html