零基础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防乱码,放最前面
相关推荐
逍遥运德3 分钟前
前端工程化-03:包管理NPM-package.json 和 package-lock.json 详解
前端·前端框架·前端工程化
逗逗豆巴吧8 分钟前
WPS 加载项中实现当前文档直接上传
前端·javascript·ecmascript 6
慢功夫8 分钟前
💡【调试】按下 F5 后,mini-vscode 到底做了什么
前端·visual studio code
妙码生花10 分钟前
从 PHP 到 AI + Golang,程序员自救转型手记(二十一):网络请求封装优化
前端·javascript·vue.js
用户114818678948412 分钟前
普通Fetch、Fetch流式、Axios、SSE:谁才是流式输出的正确操作?
前端·javascript
奇奇怪怪的13 分钟前
多模态 RAG:图片与表格检索
前端
犇驫聊AI16 分钟前
Claude Code 用了大半年才悟出来的 6 个技巧,第 3 个直接省一半 Token
前端·claude
带刺的坐椅16 分钟前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·ai·llm·agent·solon-ai
c2385619 分钟前
互斥锁高频面试题全解:从基础概念到底层实现,一文通关
java·c++·面试·职场和发展
北冥you鱼28 分钟前
Go 语言读取链上数据:从基础到实战
开发语言·后端·golang