零基础JavaWeb入门——第五课第一小节:九大内置对象 · 第1个:request(请求对象)

目录

一、它是什么?

二、它里面装着什么?

三、核心方法(必须会写)

[方法1:getParameter("参数名") ------ 获取用户提交的数据](#方法1:getParameter("参数名") —— 获取用户提交的数据)

[方法2:setAttribute("名字", 数据) ------ 往request里存数据](#方法2:setAttribute("名字", 数据) —— 往request里存数据)

[方法3:getAttribute("名字") ------ 从request里取数据](#方法3:getAttribute("名字") —— 从request里取数据)

[方法4:getRequestDispatcher("页面").forward(request, response) ------ 转发](#方法4:getRequestDispatcher("页面").forward(request, response) —— 转发)

[四、getParameter 和 getAttribute 的区别(容易混)](#四、getParameter 和 getAttribute 的区别(容易混))

[五、完整示例:接收表单 + 转发传数据](#五、完整示例:接收表单 + 转发传数据)

六、其他方法(了解即可)

七、总结


一、它是什么?

request浏览器每次访问服务器时自动创建的一个对象,里面装满了浏览器发过来的所有信息。

你不用创建它,直接在JSP里拿来用。

生活比喻 :你去餐厅点餐,服务员给你一张点餐单,上面写着你要什么菜、你坐几号桌。这张点餐单就是 request


二、它里面装着什么?

浏览器发给服务器的所有东西,都在 request 里:

复制代码
request 里面装着:
├── 你提交的表单数据(用户名、密码等)
├── 你的IP地址
├── 你用的浏览器类型
├── 你请求的网址是什么
├── 请求方式是GET还是POST
└── 程序员临时放进去的数据(转发时传数据用)

三、核心方法(必须会写)

方法1:getParameter("参数名") ------ 获取用户提交的数据

什么时候用:用户通过表单提交了数据,你用这个取出来。

表单页面

html 复制代码
<form action="result.jsp" method="post">
    姓名:<input type="text" name="username">
    <input type="submit" value="提交">
</form>

接收页面 result.jsp

html 复制代码
<%
    request.setCharacterEncoding("UTF-8");  // POST必加,防乱码
    String username = request.getParameter("username");
%>
<p>你输入的是:<%= username %></p>

关键规则 :括号里的名字必须和表单里的 name 属性一模一样。

复制代码
<input name="username">              ← 表单里写的name
        ↓
request.getParameter("username")     ← 括号里必须一样

返回什么

  • 用户填了 → 返回填的内容(String类型)

  • 用户没填 → 返回 null

  • 用户填了空 → 返回 ""(空字符串)


方法2:setAttribute("名字", 数据) ------ 往request里存数据

什么时候用:你算出了一个结果,想传给另一个页面。

html 复制代码
<%
    // 假设这是你计算出来的数据
    String name = "张三";
    int score = 95;
    
    // 装进request
    request.setAttribute("studentName", name);
    request.setAttribute("studentScore", score);
    
    // 转发到显示页面
    request.getRequestDispatcher("show.jsp").forward(request, response);
%>

方法3:getAttribute("名字") ------ 从request里取数据

什么时候用:别的页面通过转发传了数据过来,你取出来用,搭配方法二使用。

cpp 复制代码
<%
    // 取出来(默认是Object类型,需要强制转换)
    String name = (String) request.getAttribute("studentName");
    int score = (Integer) request.getAttribute("studentScore");
%>
<p>姓名:<%= name %></p>
<p>成绩:<%= score %></p>

方法4:getRequestDispatcher("页面").forward(request, response) ------ 转发

什么时候用:把请求转发给另一个页面处理,搭配方法二和方法三使用。

cpp 复制代码
<%
    request.getRequestDispatcher("target.jsp").forward(request, response);
%>

效果:用方法二存的数据想在另一个页面使用的时候,先用方法四转发到另一个页面,然后再用方法三取出来。


四、getParameter 和 getAttribute 的区别(容易混)

getParameter() getAttribute()
数据谁放的 用户通过表单提交的 程序员用 setAttribute 放的
返回类型 String Object(需强转)
配合什么用 表单提交 转发 forward
例子 获取用户输入的密码 获取上一步计算的结果

记忆

  • 用户填的 → getParameter()

  • 你自己存的 → setAttribute() 存,getAttribute()


五、完整示例:接收表单 + 转发传数据

场景:用户输入学号 → 程序查成绩 → 转发到结果页显示

步骤1:输入页面 input.jsp

html 复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>查询</title></head>
<body>
    <form action="search.jsp" method="post">
        学号:<input type="text" name="stuId">
        <input type="submit" value="查询">
    </form>
</body>
</html>

步骤2:处理页面 search.jsp

html 复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    request.setCharacterEncoding("UTF-8");
    
    // 1. 用 getParameter 取用户提交的学号
    String stuId = request.getParameter("stuId");
    
    // 2. 模拟查数据库得到成绩
    String stuName = "";
    int score = 0;
    if ("001".equals(stuId)) {
        stuName = "张三";
        score = 95;
    }
    
    // 3. 用 setAttribute 把结果存进 request
    request.setAttribute("stuName", stuName);
    request.setAttribute("score", score);
    
    // 4. 转发到结果页
    request.getRequestDispatcher("show.jsp").forward(request, response);
%>

步骤3:结果页面 show.jsp

html 复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>结果</title></head>
<body>
    <h1>查询结果</h1>
    <%
        // 5. 用 getAttribute 取出转发传来的数据
        String stuName = (String) request.getAttribute("stuName");
        int score = (Integer) request.getAttribute("score");
    %>
    <p>姓名:<%= stuName %></p>
    <p>成绩:<%= score %></p>
</body>
</html>

六、其他方法(了解即可)

html 复制代码
<%
    request.getRemoteAddr();    // 获取客户端IP
    request.getMethod();        // 获取请求方式 GET/POST
    request.getContextPath();   // 获取项目路径 如 /jspex
%>

这些看看知道就行,不要求写。


七、总结

复制代码
request = 浏览器发来的请求包裹

三个必会方法:
  1. getParameter("name")      → 取用户提交的表单数据(返回String)
  2. setAttribute("name", 值)   → 存数据(配合转发)
  3. getAttribute("name")      → 取数据(配合转发,需强转)

一个必会操作:
  4. getRequestDispatcher("页面").forward(request, response) → 转发

一个必加代码:
  request.setCharacterEncoding("UTF-8")  → POST防乱码,放最前面
相关推荐
程序员黑豆4 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC4 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea5 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
风流 少年5 小时前
Spring AI 2.0:Memory
java·后端·spring
码匠许师傅5 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
浮生望5 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
2603_965148115 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
万少5 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
小席是个热心肠5 小时前
AI相关的自我学习
java·人工智能·学习
波波0075 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#