HttpServletRequest
对象在后端和前端之间起到了桥梁的作用,它包含了来自客户端的所有请求信息。通过 HttpServletRequest
对象,后端可以获取前端发送的请求参数、请求头、请求方法等信息,并根据这些信息进行相应的处理。以下是对 HttpServletRequest
对象与前端关系的详细解释:
前端请求
前端通常通过 HTML 表单、JavaScript AJAX 请求等方式向后端发送请求。以下是几种常见的前端请求方式:
1. HTML 表单
<form action="/typetable" method="get">
<label for="name">搜索:</label>
<input type="text" id="name" name="name">
<button type="submit">搜索</button>
</form>
在这个表单中,用户输入搜索关键词并点击“搜索”按钮,表单会以 GET 方法提交到 /typetable
路径,请求参数 name
会被包含在 URL 中。
2. JavaScript AJAX 请求
fetch('/typetable', {
method: 'GET',
params: {
name: 'example'
}
})
.then(response => response.json())
.then(data => {
console.log(data);
});
在这个 AJAX 请求中,JavaScript 通过 fetch
函数发送一个 GET 请求到 /typetable
路径,并携带请求参数 name
。
后端处理
在后端,HttpServletRequest
对象用于接收和处理前端发送的请求。以下是 HttpServletRequest
对象的主要功能:
1. 获取请求参数
String name = req.getParameter("name");
req.getParameter("name")
:获取请求参数name
的值。- 如果请求是通过表单提交的,
name
参数会出现在 URL 的查询字符串中,例如/typetable?name=example
。 - 如果请求是通过 AJAX 发送的,
name
参数也会作为查询字符串的一部分。
2. 获取请求头
String userAgent = req.getHeader("User-Agent");
req.getHeader("User-Agent")
:获取请求头中User-Agent
的值,表示客户端的浏览器信息。
3. 获取请求方法
String method = req.getMethod();
req.getMethod()
:获取请求的方法,例如GET
、POST
、PUT
、DELETE
等。
4. 获取请求 URI 和 URL
String requestURI = req.getRequestURI();
StringBuffer requestURL = req.getRequestURL();
req.getRequestURI()
:获取请求的 URI,例如/typetable
。req.getRequestURL()
:获取请求的完整 URL,例如http://example.com/typetable
。
5. 设置请求属性
req.setAttribute("typeList", typeList);
req.setAttribute("typeList", typeList)
:将typeList
设置为请求属性,属性名称为"typeList"
。- 这样,在视图中可以通过
${typeList}
访问这些数据。
示例代码解释
以下是你提供的代码段的详细解释:
@RequestMapping("typetable")
public String typeTable(HttpServletRequest req) {
if (!StringUtils.isEmpty(req.getParameter("name"))) {
String name = "%" + req.getParameter("name") + "%";
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
} else {
Iterable<SystemTypeList> typeList = typeDao.findAll();
req.setAttribute("typeList", typeList);
}
return "systemcontrol/typetable";
}
-
方法声明
@RequestMapping("typetable") public String typeTable(HttpServletRequest req) {
@RequestMapping("typetable")
:将该方法映射到/typetable
路径。public String typeTable(HttpServletRequest req)
:方法返回一个字符串,表示视图的名称。HttpServletRequest req
参数表示当前的 HTTP 请求对象。
-
检查请求参数
if (!StringUtils.isEmpty(req.getParameter("name"))) {
req.getParameter("name")
:获取请求参数name
的值。StringUtils.isEmpty
:检查字符串是否为空或仅包含空白字符。- 如果
name
参数存在且不为空,则进入条件分支。
-
处理模糊查询
String name = "%" + req.getParameter("name") + "%"; req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
String name = "%" + req.getParameter("name") + "%";
:将name
参数值前后加上%
,构建模糊查询条件。typeDao.findByTypeNameLikeOrTypeModelLike(name, name)
:调用typeDao
的findByTypeNameLikeOrTypeModelLike
方法,根据类型名称或类型模型进行模糊查询。req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
:将查询结果设置为请求属性,属性名称为"typeList"
。
-
处理全量查询
else { Iterable<SystemTypeList> typeList = typeDao.findAll(); req.setAttribute("typeList", typeList); }
- 如果
name
参数不存在或为空,则进入else
分支。 typeDao.findAll()
:调用typeDao
的findAll
方法,查询所有类型的记录。req.setAttribute("typeList", typeList);
:将查询结果设置为请求属性,属性名称为"typeList"
。
- 如果
-
返回视图名称
return "systemcontrol/typetable";
- 返回字符串
"systemcontrol/typetable"
,表示视图的名称。 - Spring MVC 会根据这个名称找到对应的视图文件并渲染。
- 返回字符串
视图文件中的使用
在视图文件中,可以通过 JSTL 标签库(JavaServer Pages Standard Tag Library)来遍历 typeList
并显示数据。假设视图文件是 systemcontrol/typetable.jsp
,它可能会包含如下内容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>类型表格</title>
</head>
<body>
<h1>类型表格</h1>
<form action="typetable" method="get">
<label for="name">搜索:</label>
<input type="text" id="name" name="name">
<button type="submit">搜索</button>
</form>
<table>
<tr>
<th>ID</th>
<th>类型名称</th>
<th>类型模型</th>
<th>操作</th>
</tr>
<c:forEach items="${typeList}" var="type">
<tr>
<td>${type.typeId}</td>
<td>${type.typeName}</td>
<td>${type.typeModel}</td>
<td>
<a href="typeedit?typeid=${type.typeId}">编辑</a>
<a href="deletetype?id=${type.typeId}">删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
在这个视图文件中,通过 ${typeList}
访问从控制器传递过来的类型数据,并显示在一个表格中。用户还可以通过表单提交 name
参数进行模糊查询。
总结
HttpServletRequest
对象在后端和前端之间起到了桥梁的作用,它包含了来自客户端的所有请求信息。通过 HttpServletRequest
对象,后端可以获取前端发送的请求参数、请求头、请求方法等信息,并根据这些信息进行相应的处理。
String name = “%” + req.getParameter(“name”) + “%”; req.setAttribute(“typeList”, typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
这两行代码用于处理前端传来的搜索请求参数,并进行模糊查询。以下是详细的解释:
代码片段
String name = "%" + req.getParameter("name") + "%";
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
详细解释
1. 构建模糊查询条件
String name = "%" + req.getParameter("name") + "%";
-
获取请求参数:
req.getParameter("name")
req.getParameter("name")
:从HttpServletRequest
对象中获取名为name
的请求参数值。- 例如,如果前端表单提交的 URL 是
/typetable?name=example
,那么req.getParameter("name")
会返回"example"
。
-
构建模糊查询条件:
"%" + req.getParameter("name") + "%"
- 在
name
参数值的前后各加一个%
符号,构建模糊查询条件。 %
是 SQL 中的通配符,表示任意字符序列(包括空字符序列)。- 例如,如果
name
参数值是"example"
,那么name
变量的值将是"%example%"
。
- 在
2. 执行模糊查询
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
-
调用 DAO 方法:
typeDao.findByTypeNameLikeOrTypeModelLike(name, name)
typeDao
是一个 DAO(Data Access Object)对象,用于与数据库交互。findByTypeNameLikeOrTypeModelLike
是typeDao
中定义的方法,用于根据类型名称或类型模型进行模糊查询。- 方法签名可能类似于:
List<SystemTypeList> findByTypeNameLikeOrTypeModelLike(String typeName, String typeModel);
- 该方法接受两个参数,分别表示类型名称和类型模型的模糊查询条件。
- 由于我们希望同时在类型名称和类型模型中进行模糊匹配,所以传递相同的
name
参数。
-
设置请求属性:
req.setAttribute("typeList", ...)
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name))
:将查询结果设置为请求属性,属性名称为"typeList"
。- 这样,在视图中可以通过
${typeList}
访问这些数据。
示例 DAO 方法
假设 SystemTypeList
是一个实体类,表示系统类型列表中的一个条目,DAO 方法可能如下实现:
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface SystemTypeListDao extends JpaRepository<SystemTypeList, Long> {
List<SystemTypeList> findByTypeNameLikeOrTypeModelLike(String typeName, String typeModel);
}
视图文件中的使用
在视图文件中,可以通过 JSTL 标签库(JavaServer Pages Standard Tag Library)来遍历 typeList
并显示数据。假设视图文件是 systemcontrol/typetable.jsp
,它可能会包含如下内容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>类型表格</title>
</head>
<body>
<h1>类型表格</h1>
<form action="typetable" method="get">
<label for="name">搜索:</label>
<input type="text" id="name" name="name">
<button type="submit">搜索</button>
</form>
<table>
<tr>
<th>ID</th>
<th>类型名称</th>
<th>类型模型</th>
<th>操作</th>
</tr>
<c:forEach items="${typeList}" var="type">
<tr>
<td>${type.typeId}</td>
<td>${type.typeName}</td>
<td>${type.typeModel}</td>
<td>
<a href="typeedit?typeid=${type.typeId}">编辑</a>
<a href="deletetype?id=${type.typeId}">删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
在这个视图文件中,通过 ${typeList}
访问从控制器传递过来的类型数据,并显示在一个表格中。用户还可以通过表单提交 name
参数进行模糊查询。
总结
这两行代码的主要功能是:
- 构建模糊查询条件:从请求参数中获取
name
值,并在其前后加上%
符号,构建模糊查询条件。 - 执行模糊查询:调用 DAO 方法进行模糊查询,并将查询结果设置为请求属性,以便在视图中使用。
req.getParameter详细解释
req.getParameter
是 HttpServletRequest
接口中用于获取请求参数的方法。通过这个方法,可以从客户端发送的请求中提取出特定的参数值。以下是对 req.getParameter
方法的详细解释,以及它在你的代码中的具体应用。
req.getParameter
方法
定义
getParameter
方法定义在 HttpServletRequest
接口中,用于获取请求参数的值。
public String getParameter(String name);
参数
name
:参数的名称,类型为String
。
返回值
- 返回类型为
String
,表示请求参数的值。 - 如果请求中没有该参数,或者参数值为空,则返回
null
。
使用场景
getParameter
方法通常用于处理表单提交、URL 查询字符串、AJAX 请求等场景中传递的参数。
示例代码解释
以下是你提供的代码片段的详细解释:
String name = "%" + req.getParameter("name") + "%";
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
1. 获取请求参数
String name = req.getParameter("name");
- 获取请求参数:
req.getParameter("name")
req
是HttpServletRequest
对象,表示当前的 HTTP 请求。getParameter("name")
方法用于获取名为name
的请求参数的值。- 例如,如果前端表单提交的 URL 是
/typetable?name=example
,那么req.getParameter("name")
会返回"example"
。 - 如果请求中没有
name
参数,或者参数值为空,则返回null
。
2. 构建模糊查询条件
String name = "%" + req.getParameter("name") + "%";
- 构建模糊查询条件:
"%" + req.getParameter("name") + "%"
- 在
name
参数值的前后各加一个%
符号,构建模糊查询条件。 %
是 SQL 中的通配符,表示任意字符序列(包括空字符序列)。- 例如,如果
name
参数值是"example"
,那么name
变量的值将是"%example%"
。
- 在
3. 执行模糊查询
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
-
调用 DAO 方法:
typeDao.findByTypeNameLikeOrTypeModelLike(name, name)
typeDao
是一个 DAO(Data Access Object)对象,用于与数据库交互。findByTypeNameLikeOrTypeModelLike
是typeDao
中定义的方法,用于根据类型名称或类型模型进行模糊查询。- 方法签名可能类似于:
List<SystemTypeList> findByTypeNameLikeOrTypeModelLike(String typeName, String typeModel);
- 该方法接受两个参数,分别表示类型名称和类型模型的模糊查询条件。
- 由于我们希望同时在类型名称和类型模型中进行模糊匹配,所以传递相同的
name
参数。
-
设置请求属性:
req.setAttribute("typeList", ...)
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name))
:将查询结果设置为请求属性,属性名称为"typeList"
。- 这样,在视图中可以通过
${typeList}
访问这些数据。
示例前端请求
HTML 表单
<form action="/typetable" method="get">
<label for="name">搜索:</label>
<input type="text" id="name" name="name">
<button type="submit">搜索</button>
</form>
在这个表单中,用户输入搜索关键词并点击“搜索”按钮,表单会以 GET 方法提交到 /typetable
路径,请求参数 name
会被包含在 URL 中,例如 /typetable?name=example
。
JavaScript AJAX 请求
fetch('/typetable', {
method: 'GET',
params: {
name: 'example'
}
})
.then(response => response.json())
.then(data => {
console.log(data);
});
在这个 AJAX 请求中,JavaScript 通过 fetch
函数发送一个 GET 请求到 /typetable
路径,并携带请求参数 name
,例如 /typetable?name=example
。
总结
req.getParameter
方法用于从 HttpServletRequest
对象中获取请求参数的值。在你的代码中,req.getParameter("name")
用于获取前端传递的 name
参数值,并构建模糊查询条件,然后调用 DAO 方法进行模糊查询,最后将查询结果设置为请求属性,以便在视图中使用。
req.getParameter和前端的关系
req.getParameter
方法在后端用于获取前端发送的请求参数。通过这个方法,后端可以读取用户在前端页面中输入的数据或其他传递的信息。以下是 req.getParameter
方法与前端关系的详细解释,包括常见的前端请求方式和后端处理过程。
前端请求
前端通常通过 HTML 表单、JavaScript AJAX 请求等方式向后端发送请求。以下是几种常见的前端请求方式:
1. HTML 表单
<form action="/typetable" method="get">
<label for="name">搜索:</label>
<input type="text" id="name" name="name">
<button type="submit">搜索</button>
</form>
在这个表单中,用户输入搜索关键词并点击“搜索”按钮,表单会以 GET 方法提交到 /typetable
路径,请求参数 name
会被包含在 URL 中,例如 /typetable?name=example
。
2. JavaScript AJAX 请求
fetch('/typetable', {
method: 'GET',
params: {
name: 'example'
}
})
.then(response => response.json())
.then(data => {
console.log(data);
});
在这个 AJAX 请求中,JavaScript 通过 fetch
函数发送一个 GET 请求到 /typetable
路径,并携带请求参数 name
,例如 /typetable?name=example
。
后端处理
在后端,HttpServletRequest
对象用于接收和处理前端发送的请求。req.getParameter
方法用于从请求中获取特定的参数值。
示例代码
以下是你提供的代码片段的详细解释:
@RequestMapping("typetable")
public String typeTable(HttpServletRequest req) {
if (!StringUtils.isEmpty(req.getParameter("name"))) {
String name = "%" + req.getParameter("name") + "%";
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
} else {
Iterable<SystemTypeList> typeList = typeDao.findAll();
req.setAttribute("typeList", typeList);
}
return "systemcontrol/typetable";
}
详细解释
1. 获取请求参数
String name = req.getParameter("name");
- 获取请求参数:
req.getParameter("name")
req
是HttpServletRequest
对象,表示当前的 HTTP 请求。getParameter("name")
方法用于获取名为name
的请求参数的值。- 例如,如果前端表单提交的 URL 是
/typetable?name=example
,那么req.getParameter("name")
会返回"example"
。 - 如果请求中没有
name
参数,或者参数值为空,则返回null
。
2. 检查参数是否为空
if (!StringUtils.isEmpty(req.getParameter("name"))) {
- 条件检查:
!StringUtils.isEmpty(req.getParameter("name"))
StringUtils.isEmpty
是一个工具方法,用于检查字符串是否为空或仅包含空白字符。- 如果
name
参数存在且不为空,则进入条件分支。
3. 构建模糊查询条件
String name = "%" + req.getParameter("name") + "%";
- 构建模糊查询条件:
"%" + req.getParameter("name") + "%"
- 在
name
参数值的前后各加一个%
符号,构建模糊查询条件。 %
是 SQL 中的通配符,表示任意字符序列(包括空字符序列)。- 例如,如果
name
参数值是"example"
,那么name
变量的值将是"%example%"
。
- 在
4. 执行模糊查询
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
-
调用 DAO 方法:
typeDao.findByTypeNameLikeOrTypeModelLike(name, name)
typeDao
是一个 DAO(Data Access Object)对象,用于与数据库交互。findByTypeNameLikeOrTypeModelLike
是typeDao
中定义的方法,用于根据类型名称或类型模型进行模糊查询。- 方法签名可能类似于:
List<SystemTypeList> findByTypeNameLikeOrTypeModelLike(String typeName, String typeModel);
- 该方法接受两个参数,分别表示类型名称和类型模型的模糊查询条件。
- 由于我们希望同时在类型名称和类型模型中进行模糊匹配,所以传递相同的
name
参数。
-
设置请求属性:
req.setAttribute("typeList", ...)
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name))
:将查询结果设置为请求属性,属性名称为"typeList"
。- 这样,在视图中可以通过
${typeList}
访问这些数据。
5. 处理全量查询
else {
Iterable<SystemTypeList> typeList = typeDao.findAll();
req.setAttribute("typeList", typeList);
}
- 条件不满足时:如果
name
参数不存在或为空,则进入else
分支。 - 查询所有数据:
typeDao.findAll()
:调用typeDao
的findAll
方法,查询所有类型的记录。 - 设置请求属性:
req.setAttribute("typeList", typeList);
:将查询结果设置为请求属性,属性名称为"typeList"
,以便在视图中使用。
6. 返回视图名称
return "systemcontrol/typetable";
- 返回值:
"systemcontrol/typetable"
:这是一个字符串,表示视图的名称。 - 视图渲染:Spring MVC 会根据这个名称找到对应的视图文件并渲染。
视图文件中的使用
在视图文件中,可以通过 JSTL 标签库(JavaServer Pages Standard Tag Library)来遍历 typeList
并显示数据。假设视图文件是 systemcontrol/typetable.jsp
,它可能会包含如下内容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>类型表格</title>
</head>
<body>
<h1>类型表格</h1>
<form action="typetable" method="get">
<label for="name">搜索:</label>
<input type="text" id="name" name="name">
<button type="submit">搜索</button>
</form>
<table>
<tr>
<th>ID</th>
<th>类型名称</th>
<th>类型模型</th>
<th>操作</th>
</tr>
<c:forEach items="${typeList}" var="type">
<tr>
<td>${type.typeId}</td>
<td>${type.typeName}</td>
<td>${type.typeModel}</td>
<td>
<a href="typeedit?typeid=${type.typeId}">编辑</a>
<a href="deletetype?id=${type.typeId}">删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
在这个视图文件中,通过 ${typeList}
访问从控制器传递过来的类型数据,并显示在一个表格中。用户还可以通过表单提交 name
参数进行模糊查询。
总结
req.getParameter
方法用于从 HttpServletRequest
对象中获取前端发送的请求参数值。在你的代码中,req.getParameter("name")
用于获取前端传递的 name
参数值,并构建模糊查询条件,然后调用 DAO 方法进行模糊查询,最后将查询结果设置为请求属性,以便在视图中使用。