目录
[方法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防乱码,放最前面