毕设学习第八天SSM框架之SpringMVC
SpringMVC
Spring MVC 是 Spring 框架中基于 MVC 设计模式的 Web 开发模块,通过 DispatcherServlet 作为前端控制器统一处理请求,协调 HandlerMapping、Controller 和 ViewResolver 等组件实现分层开发:用户请求由控制器处理业务逻辑并封装数据(Model),视图层渲染数据生成响应。它支持注解驱动(如 @Controller、@RequestMapping),无缝集成 Spring 生态(如依赖注入、AOP),提供灵活的数据绑定、RESTful 接口开发能力,适用于构建结构清晰、松耦合的 Web 应用及 API 服务
MVC
MVC(Model-View-Controller)是一种软件设计模式,用于将应用程序的逻辑、数据和用户界面分离,以提高代码的可维护性和扩展性。
其核心思想是将系统分为三个独立且协作的组件:
Model(模型)
负责管理数据和业务逻辑(如数据库操作、状态管理)。
独立于用户界面,不直接处理用户交互,仅提供数据操作接口。
View(视图)
负责展示数据(如UI界面、网页、图表)。
从Model获取数据并渲染,但不处理业务逻辑。
Controller(控制器)
接收用户输入(如点击、表单提交),协调Model和View。
根据用户请求更新Model,并通知View同步更新显示。
Model由dao和service层以及javabean组成,Controller由Servlet组成,View为JSP和html组成
原始的web项目
传统的web项目都是一个页面需要注册一个Servlet,有个注意事项就是web项目需要在web下面新建一个lib目录把所有依赖复制进去才能部署到tomcat里面,不然会报空指针异常,同时页面如果输入框为空则传给后台的是空字符串而非null
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.dao.UserMapper">
<insert id="add" parameterType="org.example.pojo.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
INSERT INTO
user (`name`, `age`, `sex`, `address`)
VALUES
<foreach collection="userList" item="user" index="idx" separator=",">
(#{user.name}, #{user.age}, #{user.sex}, #{user.address})
</foreach>
</insert>
<delete id="delete" parameterType="_int">
DELETE FROM user WHERE id = #{id}
</delete>
<update id="update" parameterType="org.example.pojo.User">
UPDATE user
<set>
<if test="name != null">
name = #{name}
</if>
<if test="age != null">
age = #{age}
</if>
<if test="sex != null">
sex = #{sex}
</if>
<if test="address != null">
address = #{address}
</if>
</set>
WHERE id = #{id}
</update>
<sql id="age_sex">
<if test="age != null">
AND age = #{age}
</if>
<if test="sex != null">
AND sex = #{sex}
</if>
</sql>
<select id="query" parameterType="map" resultMap="user">
SELECT *
FROM user
<where>
<choose>
<when test="name != null and name != ''">
name LIKE CONCAT('%', #{name}, '%')
</when>
<when test="address != null and address != ''">
AND address LIKE CONCAT('%', #{address}, '%')
</when>
<otherwise>
<include refid="age_sex"/>
</otherwise>
</choose>
</where>
</select>
<select id="getAccount" resultType="org.example.pojo.Account">
SELECT * FROM account WHERE id = #{account_id}
</select>
<select id="getRoles" resultType="org.example.pojo.Role">
SELECT * FROM role R INNER JOIN user_role UR ON R.id = UR.r_id
WHERE UR.u_id = #{id}
</select>
<resultMap id="user" type="org.example.pojo.User">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
<association column="account_id" property="account" javaType="org.example.pojo.Account" select="getAccount"/>
<collection column="id" property="roles" ofType="org.example.pojo.Role" select="getRoles"/>
</resultMap>
<select id="queryOne" resultMap="user_account">
SELECT
U.id AS user_id,
U.name AS user_name,
U.age,
U.sex,
U.address,
A.id AS account_id,
A.name AS account_name,
A.password AS account_password,
R.id AS role_id,
R.name AS role_name,
R.description AS role_description
FROM user AS U
INNER JOIN account AS A
ON U.account_id = A.id
INNER JOIN user_role AS UR
ON U.id = UR.u_id
INNER JOIN role AS R
ON UR.r_id = R.id
WHERE U.id = #{id}
</select>
<resultMap id="user_account" type="org.example.pojo.User">
<!-- User 字段映射 -->
<result column="user_id" property="id"/>
<result column="user_name" property="name"/>
<result column="age" property="age"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/> <!-- 修正此处 -->
<!-- Account 关联对象映射 -->
<association property="account" javaType="org.example.pojo.Account">
<result column="account_id" property="id"/>
<result column="account_name" property="name"/>
<result column="account_password" property="password"/>
</association>
<collection property="roles" ofType="org.example.pojo.Role">
<result column="role_id" property="id"/>
<result column="role_name" property="name"/>
<result column="role_description" property="description"/>
</collection>
</resultMap>
</mapper>
<?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>user</servlet-name>
<servlet-class>org.example.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>user</servlet-name>
<url-pattern>/user</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
package org.example.servlet;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.example.dao.UserMapper;
import org.example.pojo.User;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
if (name == null) name = "";
String sex = req.getParameter("sex");
if (sex == null) sex = "";
String address = req.getParameter("address");
if (address == null) address = "";
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "%"+name+"%");
map.put("sex",sex);
map.put("address","%"+address+"%");
String resource = "mybatis-config.xml";
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource)).openSession(true);
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
List<User> userList = userDao.query(map);
req.setAttribute("userList", userList);
req.getRequestDispatcher("/WEB-INF/jsp/user.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户信息表单</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
}
.container {
width: 50%;
margin: 50px auto;
background-color: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
h1 {
text-align: center;
color: #333;
}
form {
display: flex;
flex-direction: column;
}
input[type="text"] {
padding: 10px;
margin: 10px 0;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
input[type="radio"] {
margin-right: 5px;
}
.radio-group {
margin: 10px 0;
}
input[type="submit"] {
padding: 10px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
box-sizing: border-box;
}
input[type="submit"]:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="container">
<h1>用户信息</h1>
<form action="/user" method="get">
<input type="text" name="name" placeholder="用户名" />
<div class="radio-group">
<label>
<input type="radio" name="sex" value="男" /> 男
</label>
<label>
<input type="radio" name="sex" value="女" /> 女
</label>
</div>
<input type="text" name="address" placeholder="地址" />
<input type="submit" value="提交" />
</form>
</div>
</body>
</html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户信息</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
}
table {
width: 80%;
margin: 50px auto;
border-collapse: collapse;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
th, td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #ddd;
}
th {
background-color: #f2f2f2;
color: #333;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
tr:hover {
background-color: #f1f1f1;
}
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>用户名</th>
<th>年龄</th>
<th>性别</th>
<th>地址</th>
<th>角色</th>
<th>账户用户名</th>
</tr>
</thead>
<tbody>
<c:forEach var="user" items="${userList}">
<tr>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.sex}</td>
<td>${user.address}</td>
<td>
<c:forEach var="role" items="${user.roles}">
${role.name}: ${role.description}<br>
</c:forEach>
</td>
<td>${user.account.name}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>


前端和页面控制器
前端控制器是一种设计模式,旨在集中处理所有客户端请求。在这种模式下,所有的请求都被发送到一个统一的控制器,由它来分发请求到相应的处理程序。这种方式有助于简化请求处理流程,增强系统的可维护性和扩展性。
页面控制器是一种设计模式,每个页面都有一个独立的控制器来处理与该页面相关的请求。每个控制器负责处理特定页面的请求和响应,通常与特定的视图相对应。这种方式使得每个页面的逻辑和视图紧密结合,便于管理和维护。
相比于传统的MVC,Spring MVC和其他许多Web框架一样,是围绕前端控制器模式设计的,其中一个中央 Servlet,即 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">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationcontext.xml</param-value>
</context-param>
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationcontext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="/user" class="org.example.controller.UserController"/>
</beans>
package org.example.controller;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.example.dao.UserMapper;
import org.example.pojo.User;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
String name = request.getParameter("name");
if (name == null) name = "";
String sex = request.getParameter("sex");
if (sex == null) sex = "";
String address = request.getParameter("address");
if (address == null) address = "";
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "%"+name+"%");
map.put("sex",sex);
map.put("address","%"+address+"%");
String resource = "mybatis-config.xml";
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource)).openSession(true);
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
List<User> userList = userDao.query(map);
modelAndView.addObject("userList", userList);
modelAndView.setViewName("user");
return modelAndView;
}
}
SpringMVC进行配置将所有的Servlet都放入容器中统一管理,并且还添加一个DispatcherServlet作为所有Servlet和页面之间的中介
处理流程:
客户端请求 → DispatcherServlet → HandlerMapping → HandlerExecutionChain → HandlerAdapter → Controller → ModelAndView → ViewResolver → View渲染 → 响应
注解开发
由于配置文件过于繁琐,为了简化现在大部分的项目都是采用注解进行开发的方式
| 对比维度 | Model | ModelAndView |
|---|---|---|
| 创建方式 | 自动由Spring注入控制器方法参数 | 需手动通过new ModelAndView()创建 |
| 数据传递方法 | model.addAttribute(key, value) |
mav.addObject(key, value) |
| 视图控制方法 | 无法直接指定视图,需返回视图名称 | 通过构造函数或setViewName()指定视图 |
| 返回值类型 | 通常返回字符串(视图名称) | 直接返回ModelAndView对象 |
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="org.example.controller"/>
<!--
该配置启用Spring MVC的默认Servlet处理器。它允许Spring MVC将静态资源(如图片、CSS、JavaScript等)请求交给容器的默认Servlet(通常是DefaultServlet)处理,而不是让Spring的DispatcherServlet来处理这些请求。
-->
<mvc:default-servlet-handler/>
<!--
该配置启用Spring MVC的注解驱动模式。它允许Spring MVC根据控制器中的注解(如@RequestMapping、@ResponseBody、@ModelAttribute等)来处理请求和响应。
-->
<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>
package org.example.controller;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.example.dao.UserMapper;
import org.example.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class UserController{
@RequestMapping("/user")
public String myUserLIst(
@RequestParam("name") String name,
@RequestParam("sex") String sex,
@RequestParam("address") String address,
Model model) throws IOException {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name",name);
map.put("sex",sex);
map.put("address",address);
String resource = "mybatis-config.xml";
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource)).openSession(true);
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
List<User> userList = userDao.query(map);
model.addAttribute("userList", userList);
return"user";
}
}
<?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">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationcontext.xml</param-value>
</context-param>
<!-- 配置DispatcherServlet以及Spring的上下 -->
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationcontext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Spring整合Mybatis

这里我采用的是第二行的版本搭配
<?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>untitled</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.13</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.3.13</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.9</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="org.example.controller"/>
<!--
该配置启用Spring MVC的默认Servlet处理器。它允许Spring MVC将静态资源(如图片、CSS、JavaScript等)请求交给容器的默认Servlet(通常是DefaultServlet)处理,而不是让Spring的DispatcherServlet来处理这些请求。
-->
<mvc:default-servlet-handler/>
<!--
该配置启用Spring MVC的注解驱动模式。它允许Spring MVC根据控制器中的注解(如@RequestMapping、@ResponseBody、@ModelAttribute等)来处理请求和响应。
-->
<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>
<!-- 通过IOC创建dataSource,sqlSessionFactory和sqlSessionTemplate的实例 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&useSSL=false&characterEncoding=utf8"/>
<property name="username" value="billsaifu"/>
<property name="password" value="123456"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:org/example/dao/*.xml"/>
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<bean id="userMapper" class="org.example.dao.UserMapperImpl">
<property name="sqlSession" ref="sqlSessionTemplate"/>
</bean>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="org.example.dao"/>
<package name="org.example.pojo"/>
</typeAliases>
</configuration>
package org.example.dao;
import org.example.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class UserMapperImpl implements UserMapper{
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public int add(List<User> userList) {
return sqlSession.getMapper(UserMapper.class).add(userList);
}
@Override
public int delete(int id) {
return sqlSession.getMapper(UserMapper.class).delete(id);
}
@Override
public int update(User user) {
return sqlSession.getMapper(UserMapper.class).update(user);
}
@Override
public List<User> query(Map<String, Object> map) {
return sqlSession.getMapper(UserMapper.class).query(map);
}
@Override
public User queryOne(int id) {
return sqlSession.getMapper(UserMapper.class).queryOne(id);
}
}
package mybatis;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.example.dao.UserMapper;
import org.example.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MybatisTest {
public Logger log = Logger.getLogger(MybatisTest.class);
@Test
public void test1() throws IOException {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
log.info("开启会话");
UserMapper userDao = ac.getBean("userMapper", UserMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("name","%%");
map.put("address","%%");
List<User> users = userDao.query(map);
for (User user : users) {
user.userPrint();
}
userDao.queryOne(1).userPrint();
log.info("关闭会话");
}
}
还可以更加简化,并且加上事物配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="org.example.controller"/>
<!--
该配置启用Spring MVC的默认Servlet处理器。它允许Spring MVC将静态资源(如图片、CSS、JavaScript等)请求交给容器的默认Servlet(通常是DefaultServlet)处理,而不是让Spring的DispatcherServlet来处理这些请求。
-->
<mvc:default-servlet-handler/>
<!--
该配置启用Spring MVC的注解驱动模式。它允许Spring MVC根据控制器中的注解(如@RequestMapping、@ResponseBody、@ModelAttribute等)来处理请求和响应。
-->
<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>
<!-- 通过IOC创建dataSource,sqlSessionFactory和sqlSessionTemplate的实例 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&useSSL=false&characterEncoding=utf8"/>
<property name="username" value="billsaifu"/>
<property name="password" value="123456"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:org/example/dao/*.xml"/>
</bean>
<bean id="userMapper" class="org.example.dao.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!-- 声明事物 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add"/>
<tx:method name="update"/>
<tx:method name="delete"/>
<tx:method name="query"/>
<tx:method name="queryOne"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 事物的切入点 -->
<aop:pointcut id="txPointcut" expression="execution(* org.example.dao.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
</beans>
package org.example.dao;
import org.example.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper{
@Override
public int add(List<User> userList) {
return getSqlSession().getMapper(UserMapper.class).add(userList);
}
@Override
public int delete(int id) {
return getSqlSession().getMapper(UserMapper.class).delete(id);
}
@Override
public int update(User user) {
return getSqlSession().getMapper(UserMapper.class).update(user);
}
@Override
public List<User> query(Map<String, Object> map) {
return getSqlSession().getMapper(UserMapper.class).query(map);
}
@Override
public User queryOne(int id) {
return getSqlSession().getMapper(UserMapper.class).queryOne(id);
}
}
package org.example.controller;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.example.dao.UserMapper;
import org.example.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class UserController{
@Autowired
@Qualifier("userMapper")
private UserMapper userDao;
@RequestMapping("/user")
public String myUserLIst(String name, String sex, String address, Model model) throws IOException {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name",name);
map.put("sex",sex);
map.put("address",address);
List<User> userList = userDao.query(map);
model.addAttribute("userList", userList);
return"user";
}
}
但是启动后报错了

原因和解决办法

<?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">
<!-- 明确绝对排序 -->
<absolute-ordering/>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationcontext.xml</param-value>
</context-param>
<!-- 配置DispatcherServlet以及Spring的上下文 -->
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationcontext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
RestFul风格
RestFul风格是一种基于HTTP协议的软件架构风格,强调简洁、高效和易用性,其核心思想是通过统一的HTTP方法(如GET、POST、PUT、DELETE)对资源进行增删改查(CRUD)操作,而非依赖URL参数或自定义动作。
| 对比维度 | 传统风格 | RESTful风格 |
|---|---|---|
| URL设计 | 包含动作动词(如/getUser?id=1) |
仅用名词(如/users/1) |
| 参数传递 | 查询字符串(?key=value) |
路径变量(/users/{id}) |
| 操作区分 | 依赖URL或参数(如action=delete) |
通过HTTP方法区分(如DELETE请求) |
| 状态管理 | 可能依赖Session或Cookie | 完全无状态 |
| 可读性 | 低,URL冗长且语义模糊 | 高,URL简洁且自描述 |
HTTP方法
| HTTP方法 | 语义 | 幂等性 | 安全性 | 典型场景 | 示例 |
|---|---|---|---|---|---|
| GET | 获取资源 | 是 | 是 | 查询数据,无副作用 | GET /users/1 |
| POST | 创建资源 | 否 | 否 | 提交新数据,服务端生成ID | POST /users |
| PUT | 全量替换资源 | 是 | 否 | 更新已知ID的资源(全部字段) | PUT /users/1 |
| PATCH | 部分更新资源 | 否 | 否 | 仅修改资源的指定字段 | PATCH /users/1 {name: "Alice"} |
| DELETE | 删除资源 | 是 | 否 | 移除指定资源 | DELETE /users/1 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户信息表单</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
}
.container {
width: 50%;
margin: 50px auto;
background-color: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
h1 {
text-align: center;
color: #333;
}
form {
display: flex;
flex-direction: column;
}
input[type="text"] {
padding: 10px;
margin: 10px 0;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
input[type="radio"] {
margin-right: 5px;
}
.radio-group {
margin: 10px 0;
}
input[type="submit"] {
padding: 10px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
box-sizing: border-box;
}
input[type="submit"]:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="container">
<h1>用户信息</h1>
<form id="userForm" method="post">
<input type="text" name="name" placeholder="用户名" id="name">
<div class="radio-group">
<label><input type="radio" name="sex" value="男">男</label>
<label><input type="radio" name="sex" value="女">女</label>
</div>
<input type="text" name="address" placeholder="地址" id="address">
<input type="submit" value="提交">
</form>
</div>
</body>
</html>
<script>
document.getElementById('userForm').addEventListener('submit', function(e) {
e.preventDefault();
var name = document.getElementById('name').value;
var sex = document.querySelector('input[name="sex"]:checked')?.value || '';
var address = document.getElementById('address').value;
var actionUrl = '/user/' + name + '/' + sex + '/' + address;
this.action = actionUrl;
this.submit();
});
</script>
package org.example.controller;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.example.dao.UserMapper;
import org.example.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class UserController{
@Autowired
@Qualifier("userMapper")
private UserMapper userDao;
// 设置多个url处理空参问题
@RequestMapping(
value = {"/user",
"/user/{name}",
"/user/{name}/{sex}",
"/user/{name}/{sex}/{address}"},
method = RequestMethod.POST)
public String myUserLIst(@PathVariable(required = false) String name,@PathVariable(required = false) String sex,@PathVariable(required = false) String address, Model model) throws IOException {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name",name);
map.put("sex",sex);
map.put("address",address);
List<User> userList = userDao.query(map);
model.addAttribute("userList", userList);
return"user";
}
}
<?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">
<absolute-ordering/>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationcontext.xml</param-value>
</context-param>
<!-- 配置DispatcherServlet以及Spring的上下文 -->
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationcontext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 处理编码问题 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Json格式
基本结构
- 键值对(Key-Value Pairs):
数据以"key": value形式表示,键必须用双引号包裹,值可以是多种数据类型,之间用,隔开。
数据类型:
| 类型 | 示例 |
|---|---|
| 字符串(String) | "name": "张三" |
| 数字(Number) | "age": 30 或 "price": 99.5 |
| 布尔值(Boolean) | "isStudent": true |
| 空值(Null) | "address": null |
| 对象(Object) | "address": { "city": "北京" } |
| 数组(Array) | "hobbies": ["阅读", "运动"] |
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.18.2</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="org.example.controller"/>
<!--
该配置启用Spring MVC的默认Servlet处理器。它允许Spring MVC将静态资源(如图片、CSS、JavaScript等)请求交给容器的默认Servlet(通常是DefaultServlet)处理,而不是让Spring的DispatcherServlet来处理这些请求。
-->
<mvc:default-servlet-handler/>
<!--
处理Json中文乱码问题
-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</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>
<!-- 通过IOC创建dataSource,sqlSessionFactory和sqlSessionTemplate的实例 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&useSSL=false&characterEncoding=utf8"/>
<property name="username" value="billsaifu"/>
<property name="password" value="123456"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:org/example/dao/*.xml"/>
</bean>
<bean id="userMapper" class="org.example.dao.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!-- 声明事物 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add"/>
<tx:method name="update"/>
<tx:method name="delete"/>
<tx:method name="query"/>
<tx:method name="queryOne"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 事物的切入点 -->
<aop:pointcut id="txPointcut" expression="execution(* org.example.dao.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
</beans>
package org.example.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.example.dao.UserMapper;
import org.example.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class UserController{
@Autowired
@Qualifier("userMapper")
private UserMapper userDao;
private static Logger logger = Logger.getLogger(UserController.class);
@ResponseBody
@RequestMapping(
value = {"/user",
"/user/{name}",
"/user/{name}/{sex}",
"/user/{name}/{sex}/{address}"},
method = RequestMethod.POST)
public String myUserLIst(@PathVariable(required = false) String name,@PathVariable(required = false) String sex,@PathVariable(required = false) String address, Model model) throws IOException {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name",name);
map.put("sex",sex);
map.put("address",address);
List<User> userList = userDao.query(map);
ObjectMapper mapper = new ObjectMapper();
String useristJson=mapper.writeValueAsString(userList);
// model.addAttribute("userList", userList);
return useristJson;
}
}

拦截器
拦截器(Interceptor)是 Spring MVC 提供的 请求处理流程中的扩展点,用于在请求到达 Controller 前、后或完成后插入自定义逻辑(如权限校验、日志记录)。
| 特性 | 拦截器(Interceptor) | 过滤器(Filter) |
|---|---|---|
| 归属 | Spring MVC 组件 | Servlet 规范 |
| 作用范围 | 仅拦截 Spring MVC 管理的请求 | 拦截所有请求(包括静态资源) |
| 依赖 | 可访问 Spring 上下文(Bean) | 无法直接使用 Spring 功能 |
| 执行时机 | Controller 前后 | 在 Servlet 前后(更底层) |
过滤器与拦截器的执行顺序: 过滤器在拦截器之前执行,拦截器在过滤器之后执行。
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="org.example.config.MyInterceptors"/>
</mvc:interceptor>
</mvc:interceptors>
package org.example.config;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptors implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String address = request.getParameter("address");
System.out.println(name+" "+sex+" "+address);
return true;
}
}

浙公网安备 33010602011771号