零基础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防乱码,放最前面
相关推荐
程序猿DD5 小时前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
鬼手点金7 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
蛋蛋的就会顺顺的7 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
程序员Sunday7 小时前
TypeScript 的 any、unknown、never 有什么区别?
前端·面试·typescript
余槐i7 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
朱涛的自习室8 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
需要8268 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡8 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
码艺-Alimjan8 小时前
Tauri 源码备份 · 打包 & 解压 总结,源码收集之路
前端·javascript·vue.js
小马不起床8 小时前
零基础玩转 FastAPI_11:前端后台管理页面
前端·状态模式·fastapi