文章目录
- request
- 主要方法
- 存取属性
- 简单示例
JSP(JavaServer Pages)提供了九个内置对象,这些对象在JSP页面中可以直接使用,无需显式声明。这些内置对象提供了对请求、响应、会话等常用功能的访问,使得开发者可以更方便地处理Web应用程序中的各种任务。
request 请求对象
javax.servlet.http.HttpServletRequest
- 代表客户端的请求信息。可以通过它获取请求参数、请求头、Cookies等
response 响应对象
javax.servlet.http.HttpServletResponse
- 代表服务器对客户端的响应。可以通过它设置响应头、状态码、发送数据到客户端等
out 输出对象
javax.servlet.jsp.JspWriter
- 用于向客户端输出内容。它是
PrintWriter
的一个子类,支持缓冲和自动刷新
session 会话对象
javax.servlet.http.HttpSession
- 代表当前用户的会话。可以用来存储用户特定的数据,并在多个请求之间共享这些数据
config 配置对象
javax.servlet.ServletConfig
- 代表Servlet配置信息。可以用来获取初始化参数
page 页面对象
java.lang.Object
- 代表当前JSP页面的实例。通常不直接使用这个对象
**pageContext **页面上下文对象
javax.servlet.jsp.PageContext
- 提供对其他八个内置对象的访问,并且可以用来管理页面范围内的属性。还可以用来进行页面转发和包含
exception 异常对象
java.lang.Throwable
- 只有在错误处理页面(设置了
<%@ page isErrorPage="true" %>
的页面)中才可用。代表抛出的异常对象
request
主要方法
public String getParameter(String name)
- 获取指定名称的请求参数值。如果请求中没有该参数,则返回
null
。 - 示例:
String userName = request.getParameter("userName");
public String[] getParameterValues(String name)
- 获取指定名称的所有请求参数值(适用于多选或多个同名参数)。如果请求中没有该参数,则返回
null
。 - 示例:
String[] hobbies = request.getParameterValues("hobby");
<form action="displayHobbies.jsp" method="post"><p><input type="checkbox" name="hobby" value="Reading"> Reading</p><p><input type="checkbox" name="hobby" value="Sports"> Sports</p><p><input type="checkbox" name="hobby" value="Music"> Music</p><p><input type="submit" value="提交"></p>
</form>
<ul><%// 获取所有"hobby"参数的值String[] hobbies = request.getParameterValues("hobby");// 检查参数是否存在if (hobbies != null && hobbies.length > 0) {for (String hobby : hobbies) {out.println("<li>" + hobby + "</li>");}} else {out.println("<li>No hobbies selected.</li>");}// toString() 方法直接打印数组out.println("hobbies = " + Arrays.toString(hobbies));%>
</ul>
public Map<String, String[]> getParameterMap()
- 获取所有请求参数及其值的映射。
- 示例:
Map<String, String[]> params = request.getParameterMap();
public Enumeration<String> getParameterNames()
- 获取所有请求参数的名称。
- 示例:
Enumeration<String> paramNames = request.getParameterNames();
public String getMethod()
- 获取请求的方法(如
GET
或POST
)。 - 示例:
String method = request.getMethod();
public String getHeader(String name)
- 获取指定名称的请求头值。
- 示例:
String userAgent = request.getHeader("User-Agent");
public Enumeration<String> getHeaders(String name)
- 获取指定名称的所有请求头值。
- 示例:
Enumeration<String> headers = request.getHeaders("Accept-Language");
public Cookie[] getCookies()
- 获取所有的Cookies。
- 示例:
Cookie[] cookies = request.getCookies();
public String getRemoteAddr()
- 获取客户端的IP地址。
- 示例:
String clientIP = request.getRemoteAddr();
public String getContextPath()
- 获取应用的上下文路径。
- 示例:
String contextPath = request.getContextPath();
get 与 post 区别
比较项 | get | post |
---|---|---|
缓存 | 可以 | 不可以 |
收藏为书签 | 可以 | 不可以 |
数据长度 | 有限制(URL 的最大长度是 2048 个字符) | 无限制 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
对数据类型的限制 | 只允许 ASCII 字符 | 没有限制。也允许二进制数据 |
安全性 | 不安全 | 安全 |
可见性 | 数据在 URL 中对所有人都是可见的 | 数据不会显示在 URL 中 |
存取属性
getAttribute
和 setAttribute
用于在请求范围内存储和获取对象。这些方法允许在处理请求的过程中将数据保存到请求作用域中,这样在同一请求的不同阶段或者不同的Servlet/JSP之间可以共享数据。
setAttribute(String name, Object o)
- 该方法用来将一个对象与给定的名字关联起来,并将其存储在请求作用域内。如果已经存在同名的对象,则新的对象会覆盖旧的对象。
getAttribute(String name)
- 该方法根据指定的名字从请求作用域中获取对象。如果不存在这样的属性,则返回
null
。
// 错误示范
String mess = request.getAttribute("mess");
mess.length();// 正确示范
// 2、它的返回值类型是Object类型,需要做数据类型的转换
String mess = (String)request.getAttribute("mess");
// 1、在使用属性值的时候要做非空判断,否则会出现空指针异常
if (mess != null) {// 在请求中取到"mess"属性对应的属性值,正常使用mess数据
} else {// 在请求中没有取到"mess"属性对应的属性值,使用备选方案
}
需要注意的是,这些属性只在单个请求生命周期内有效,一旦请求完成,这些属性就会被销毁。如果需要跨多个请求持久化数据,那么应该考虑使用
HttpSession
的setAttribute
和getAttribute
方法。
getAttribute
和 getParameter
的区别
getAttribute
用于获取在服务器端设置的属性值,这些属性可以在请求、会话或应用范围内共享。
方法签名
Object getAttribute(String name);
- 用途:从请求、会话或应用上下文中获取属性值。
- 常见应用场景:在过滤器或拦截器中设置的属性;在一个Servlet中设置并在另一个Servlet中使用的属性;存储用户会话信息。
getParameter
用于获取客户端通过HTTP请求传递的参数值。
方法签名
String getParameter(String name);
String[] getParameterValues(String name);
- 用途:从 HTTP 请求中获取客户端传递的参数值。
- 常见应用场景:表单提交的数据(如文本框、复选框等);URL 中的查询参数(如
?name=value
)。
简单示例
编写一个简单的HTML表单,用户可以输入账号密码并提交。
<!DOCTYPE html>
<html>
<head><title>登录表单</title>
</head>
<body><form action="/dologin.jsp" method="post">账号:<input type="text" name="uname"/><br/>密码:<input type="text" name="upwd"/><br/><input type="submit"/></form>
</body>
</html>
调用 Java 方法验证登录信息,并携带用户信息进入首页
<%// 接收参数String uname = request.getParameter("uname");String upwd = request.getParameter("upwd");// 调用 Java 方法 登录SmbmsUserDao smbmsUserDao = new SmbmsUserDaoImpl();SmbmsUser smbmsUser = smbmsUserDao.login(uname,upwd);// 判断登录是否成功if (smbmsUser != null) {// setAttribute 存储登录信息request.setAttribute("smbmsUserName",smbmsUser.getUserName());// 转发request.getRequestDispatcher("index.jsp").forward(request,response);// 重定向// response.sendRedirect("index.jsp");} else {// 登录失败则重定向回登录界面response.sendRedirect("login.jsp");}
%>
使用上次案例的全查,附带展示登录用户信息
<%// 调用 Java 方法 获取供应商列表信息SmbmsProviderDao smbmsProviderDao = new SmbmsProviderDaoImpl();List<SmbmsProvider> smbmsProviderList = smbmsProviderDao.findAll();// getAttribute 获取登录信息String name = request.getAttribute("smbmsUserName").toString();
%>
<h1><%= name%>欢迎您登录 供应商信管理系统!!!
</h1>
<table border="1"><tr><th>ID</th><th>proCode</th><th>proName</th><th>proDesc</th></tr><% for(SmbmsProvider smbmsProvider : smbmsProviderList){ %><tr><td><%= smbmsProvider.getId()%></td><td><%= smbmsProvider.getProCode()%></td><td><%= smbmsProvider.getProName()%></td><td><%= smbmsProvider.getProDesc()%></td></tr><% } %>
</table>