HttpServletRequest req和前端的关系,req.getParameter详细解释,req.getParameter和前端的关系

HttpServletRequest 对象在后端和前端之间起到了桥梁的作用,它包含了来自客户端的所有请求信息。通过 HttpServletRequest 对象,后端可以获取前端发送的请求参数、请求头、请求方法等信息,并根据这些信息进行相应的处理。以下是对 HttpServletRequest 对象与前端关系的详细解释:

前端请求

前端通常通过 HTML 表单、JavaScript AJAX 请求等方式向后端发送请求。以下是几种常见的前端请求方式:

1. HTML 表单
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 请求
javascript 复制代码
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. 获取请求参数
java 复制代码
String name = req.getParameter("name");
  • req.getParameter("name"):获取请求参数 name 的值。
  • 如果请求是通过表单提交的,name 参数会出现在 URL 的查询字符串中,例如 /typetable?name=example
  • 如果请求是通过 AJAX 发送的,name 参数也会作为查询字符串的一部分。
2. 获取请求头
java 复制代码
String userAgent = req.getHeader("User-Agent");
  • req.getHeader("User-Agent"):获取请求头中 User-Agent 的值,表示客户端的浏览器信息。
3. 获取请求方法
java 复制代码
String method = req.getMethod();
  • req.getMethod():获取请求的方法,例如 GETPOSTPUTDELETE 等。
4. 获取请求 URI 和 URL
java 复制代码
String requestURI = req.getRequestURI();
StringBuffer requestURL = req.getRequestURL();
  • req.getRequestURI():获取请求的 URI,例如 /typetable
  • req.getRequestURL():获取请求的完整 URL,例如 http://example.com/typetable
5. 设置请求属性
java 复制代码
req.setAttribute("typeList", typeList);
  • req.setAttribute("typeList", typeList):将 typeList 设置为请求属性,属性名称为 "typeList"
  • 这样,在视图中可以通过 ${typeList} 访问这些数据。

示例代码解释

以下是你提供的代码段的详细解释:

java 复制代码
@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. 方法声明

    java 复制代码
    @RequestMapping("typetable")
    public String typeTable(HttpServletRequest req) {
    • @RequestMapping("typetable"):将该方法映射到 /typetable 路径。
    • public String typeTable(HttpServletRequest req):方法返回一个字符串,表示视图的名称。HttpServletRequest req 参数表示当前的 HTTP 请求对象。
  2. 检查请求参数

    java 复制代码
    if (!StringUtils.isEmpty(req.getParameter("name"))) {
    • req.getParameter("name"):获取请求参数 name 的值。
    • StringUtils.isEmpty:检查字符串是否为空或仅包含空白字符。
    • 如果 name 参数存在且不为空,则进入条件分支。
  3. 处理模糊查询

    java 复制代码
    String name = "%" + req.getParameter("name") + "%";
    req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
    • String name = "%" + req.getParameter("name") + "%";:将 name 参数值前后加上 %,构建模糊查询条件。
    • typeDao.findByTypeNameLikeOrTypeModelLike(name, name):调用 typeDaofindByTypeNameLikeOrTypeModelLike 方法,根据类型名称或类型模型进行模糊查询。
    • req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));:将查询结果设置为请求属性,属性名称为 "typeList"
  4. 处理全量查询

    java 复制代码
    else {
        Iterable<SystemTypeList> typeList = typeDao.findAll();
        req.setAttribute("typeList", typeList);
    }
    • 如果 name 参数不存在或为空,则进入 else 分支。
    • typeDao.findAll():调用 typeDaofindAll 方法,查询所有类型的记录。
    • req.setAttribute("typeList", typeList);:将查询结果设置为请求属性,属性名称为 "typeList"
  5. 返回视图名称

    java 复制代码
    return "systemcontrol/typetable";
    • 返回字符串 "systemcontrol/typetable",表示视图的名称。
    • Spring MVC 会根据这个名称找到对应的视图文件并渲染。

视图文件中的使用

在视图文件中,可以通过 JSTL 标签库(JavaServer Pages Standard Tag Library)来遍历 typeList 并显示数据。假设视图文件是 systemcontrol/typetable.jsp,它可能会包含如下内容:

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));

这两行代码用于处理前端传来的搜索请求参数,并进行模糊查询。以下是详细的解释:

代码片段

java 复制代码
String name = "%" + req.getParameter("name") + "%";
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));

详细解释

1. 构建模糊查询条件
java 复制代码
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. 执行模糊查询
java 复制代码
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
  • 调用 DAO 方法typeDao.findByTypeNameLikeOrTypeModelLike(name, name)

    • typeDao 是一个 DAO(Data Access Object)对象,用于与数据库交互。

    • findByTypeNameLikeOrTypeModelLiketypeDao 中定义的方法,用于根据类型名称或类型模型进行模糊查询。

    • 方法签名可能类似于:

      java 复制代码
      List<SystemTypeList> findByTypeNameLikeOrTypeModelLike(String typeName, String typeModel);
    • 该方法接受两个参数,分别表示类型名称和类型模型的模糊查询条件。

    • 由于我们希望同时在类型名称和类型模型中进行模糊匹配,所以传递相同的 name 参数。

  • 设置请求属性req.setAttribute("typeList", ...)

    • req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name)):将查询结果设置为请求属性,属性名称为 "typeList"
    • 这样,在视图中可以通过 ${typeList} 访问这些数据。

示例 DAO 方法

假设 SystemTypeList 是一个实体类,表示系统类型列表中的一个条目,DAO 方法可能如下实现:

java 复制代码
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,它可能会包含如下内容:

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 参数进行模糊查询。

总结

这两行代码的主要功能是:

  1. 构建模糊查询条件 :从请求参数中获取 name 值,并在其前后加上 % 符号,构建模糊查询条件。
  2. 执行模糊查询:调用 DAO 方法进行模糊查询,并将查询结果设置为请求属性,以便在视图中使用。

req.getParameter详细解释

req.getParameterHttpServletRequest 接口中用于获取请求参数的方法。通过这个方法,可以从客户端发送的请求中提取出特定的参数值。以下是对 req.getParameter 方法的详细解释,以及它在你的代码中的具体应用。

req.getParameter 方法

定义

getParameter 方法定义在 HttpServletRequest 接口中,用于获取请求参数的值。

java 复制代码
public String getParameter(String name);
参数
  • name:参数的名称,类型为 String
返回值
  • 返回类型为 String,表示请求参数的值。
  • 如果请求中没有该参数,或者参数值为空,则返回 null

使用场景

getParameter 方法通常用于处理表单提交、URL 查询字符串、AJAX 请求等场景中传递的参数。

示例代码解释

以下是你提供的代码片段的详细解释:

java 复制代码
String name = "%" + req.getParameter("name") + "%";
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
1. 获取请求参数
java 复制代码
String name = req.getParameter("name");
  • 获取请求参数req.getParameter("name")
    • reqHttpServletRequest 对象,表示当前的 HTTP 请求。
    • getParameter("name") 方法用于获取名为 name 的请求参数的值。
    • 例如,如果前端表单提交的 URL 是 /typetable?name=example,那么 req.getParameter("name") 会返回 "example"
    • 如果请求中没有 name 参数,或者参数值为空,则返回 null
2. 构建模糊查询条件
java 复制代码
String name = "%" + req.getParameter("name") + "%";
  • 构建模糊查询条件"%" + req.getParameter("name") + "%"
    • name 参数值的前后各加一个 % 符号,构建模糊查询条件。
    • % 是 SQL 中的通配符,表示任意字符序列(包括空字符序列)。
    • 例如,如果 name 参数值是 "example",那么 name 变量的值将是 "%example%"
3. 执行模糊查询
java 复制代码
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
  • 调用 DAO 方法typeDao.findByTypeNameLikeOrTypeModelLike(name, name)

    • typeDao 是一个 DAO(Data Access Object)对象,用于与数据库交互。

    • findByTypeNameLikeOrTypeModelLiketypeDao 中定义的方法,用于根据类型名称或类型模型进行模糊查询。

    • 方法签名可能类似于:

      java 复制代码
      List<SystemTypeList> findByTypeNameLikeOrTypeModelLike(String typeName, String typeModel);
    • 该方法接受两个参数,分别表示类型名称和类型模型的模糊查询条件。

    • 由于我们希望同时在类型名称和类型模型中进行模糊匹配,所以传递相同的 name 参数。

  • 设置请求属性req.setAttribute("typeList", ...)

    • req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name)):将查询结果设置为请求属性,属性名称为 "typeList"
    • 这样,在视图中可以通过 ${typeList} 访问这些数据。

示例前端请求

HTML 表单
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 请求
javascript 复制代码
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 表单
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 请求
javascript 复制代码
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 方法用于从请求中获取特定的参数值。

示例代码

以下是你提供的代码片段的详细解释:

java 复制代码
@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. 获取请求参数
java 复制代码
String name = req.getParameter("name");
  • 获取请求参数req.getParameter("name")
    • reqHttpServletRequest 对象,表示当前的 HTTP 请求。
    • getParameter("name") 方法用于获取名为 name 的请求参数的值。
    • 例如,如果前端表单提交的 URL 是 /typetable?name=example,那么 req.getParameter("name") 会返回 "example"
    • 如果请求中没有 name 参数,或者参数值为空,则返回 null
2. 检查参数是否为空
java 复制代码
if (!StringUtils.isEmpty(req.getParameter("name"))) {
  • 条件检查!StringUtils.isEmpty(req.getParameter("name"))
    • StringUtils.isEmpty 是一个工具方法,用于检查字符串是否为空或仅包含空白字符。
    • 如果 name 参数存在且不为空,则进入条件分支。
3. 构建模糊查询条件
java 复制代码
String name = "%" + req.getParameter("name") + "%";
  • 构建模糊查询条件"%" + req.getParameter("name") + "%"
    • name 参数值的前后各加一个 % 符号,构建模糊查询条件。
    • % 是 SQL 中的通配符,表示任意字符序列(包括空字符序列)。
    • 例如,如果 name 参数值是 "example",那么 name 变量的值将是 "%example%"
4. 执行模糊查询
java 复制代码
req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name));
  • 调用 DAO 方法typeDao.findByTypeNameLikeOrTypeModelLike(name, name)

    • typeDao 是一个 DAO(Data Access Object)对象,用于与数据库交互。

    • findByTypeNameLikeOrTypeModelLiketypeDao 中定义的方法,用于根据类型名称或类型模型进行模糊查询。

    • 方法签名可能类似于:

      java 复制代码
      List<SystemTypeList> findByTypeNameLikeOrTypeModelLike(String typeName, String typeModel);
    • 该方法接受两个参数,分别表示类型名称和类型模型的模糊查询条件。

    • 由于我们希望同时在类型名称和类型模型中进行模糊匹配,所以传递相同的 name 参数。

  • 设置请求属性req.setAttribute("typeList", ...)

    • req.setAttribute("typeList", typeDao.findByTypeNameLikeOrTypeModelLike(name, name)):将查询结果设置为请求属性,属性名称为 "typeList"
    • 这样,在视图中可以通过 ${typeList} 访问这些数据。
5. 处理全量查询
java 复制代码
else {
    Iterable<SystemTypeList> typeList = typeDao.findAll();
    req.setAttribute("typeList", typeList);
}
  • 条件不满足时 :如果 name 参数不存在或为空,则进入 else 分支。
  • 查询所有数据typeDao.findAll():调用 typeDaofindAll 方法,查询所有类型的记录。
  • 设置请求属性req.setAttribute("typeList", typeList);:将查询结果设置为请求属性,属性名称为 "typeList",以便在视图中使用。
6. 返回视图名称
java 复制代码
return "systemcontrol/typetable";
  • 返回值"systemcontrol/typetable":这是一个字符串,表示视图的名称。
  • 视图渲染:Spring MVC 会根据这个名称找到对应的视图文件并渲染。

视图文件中的使用

在视图文件中,可以通过 JSTL 标签库(JavaServer Pages Standard Tag Library)来遍历 typeList 并显示数据。假设视图文件是 systemcontrol/typetable.jsp,它可能会包含如下内容:

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 方法进行模糊查询,最后将查询结果设置为请求属性,以便在视图中使用。

相关推荐
一拳不是超人3 小时前
一个没测暗色模式的 Bug,吃掉了我一半 谷歌扩展用户
前端·javascript·程序员
liangshanbo12153 小时前
React useState 函数式更新面试题整理
前端·react.js·前端框架
涛涛ing3 小时前
为什么你的页面在 Safari 上总出问题?Interop 2027 正在解决这个 20 年老毛病
前端
不一样的少年_4 小时前
WebP 压缩到底在干嘛?小白也能看懂的原理拆解
前端·后端·图片资源
问心无愧05134 小时前
ctf show web 177
前端·笔记
不一样的少年_4 小时前
PNG/JPG 如何变成 WebP?真相不是改后缀!
前端·后端·图片资源
杉氧4 小时前
RN 性能调优指南:重渲染(Re-renders)控制与长列表(FlatList)优化
android·前端·react native
一_个前端4 小时前
[JS] 一站式搞定 PDF、图片、Dom弹窗、表格的浏览器打印功能
前端
JavaGuide4 小时前
阿里 Qoder 又开源了一个专门给 Claude Code、Codex 做“体检”的项目
前端·后端
不一样的少年_4 小时前
JPEG 压缩到底在干嘛?小白也能看懂的 8 步拆解
前端·后端·图片资源