零基础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防乱码,放最前面
相关推荐
M1A15 分钟前
基于 Spring AOP 构建系统操作日志:从注解设计到异步落库的完整实战
java
GuWenyue9 分钟前
等AI回复卡顿到劝退?Vue3+DeepSeek流式输出实战,70行代码实现打字机效果
前端·人工智能·客户端
Gopher_HBo13 分钟前
moby-daemon-config配置
后端
拉斯特当思14 分钟前
设备总掉线却复现不了?把弱网“造“出来:tcconfig 五种网络故障模拟实战
后端
Jackson__17 分钟前
AI Agent 的能力从哪里来?一文讲清后训练、上下文学习和外部能力
前端·agent·ai编程
RainCity17 分钟前
Java Swing 自定义组件库分享(十五)
java·笔记·后端
程序员麻辣烫19 分钟前
Memory向量记忆系统4-文本向量化
后端·aigc
Java编程爱好者20 分钟前
Java 并发锁体系全解:从 synchronized、Lock 到 AQS 底层原理与源码深度剖析
后端
程序员天天困20 分钟前
Java 项目用 Single-flight 一招终结 AI 接口重复调用
redis·后端
farerboy23 分钟前
23-Java 构造函数
java·后端