零基础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防乱码,放最前面
相关推荐
z落落1 小时前
C#ToolStrip+StatusStrip 状态栏实时显示系统时间+NotifyIcon系统托盘
开发语言·c#
a15108416931 小时前
记一次大模型探索
java·服务器·前端
插件开发1 小时前
vs2015 cuda c++ 线程号的计算详解
开发语言·c++·算法
石山代码1 小时前
变量与解构
开发语言·前端·javascript
c++之路1 小时前
Bazel C++ 构建系列文档(五):多目标与多包项目
java·开发语言·c++
Hello:CodeWorld1 小时前
【C++ 避坑指南】告别缓冲区溢出!全面解析 std::snprintf 的安全美学与核心陷阱
开发语言·c++·安全
凡人叶枫1 小时前
Effective C++ 条款38:通过复合塑模出 has-a 或 \“根据某物实现出\
linux·开发语言·c++·windows
枫叶丹42 小时前
【HarmonyOS 6.0】MDM Kit:PC/2in1设备用户行为限制策略详解
开发语言·华为·harmonyos
weilaieqi12 小时前
微短剧 + 时代到来,短剧内容正在赋能文旅、品牌与数字文化产业
开发语言