前言
在Web开发中,request、response、session和application对象是非常重要的对象。本章我们将着重对这四个对象进行介绍和实际应用Demo演示。
4.1 request对象
request对象代表了客户端的请求信息,主要用于接收客户端通过HTTP协议传送给服务器端的数据。request对象包含了请求的头信息(Header)、系统信息(比如:编码方式)、请求的方式(比如:GET或POST)、请求的参数名称和参数值等信息;还提供了获取cookie和session等对象、数据的方法。
4.1.1 获取用户提交的信息
通过request对象可以获取用户在网页表单中所输入的数据内容,或者通过超链接或jsp:param传递的参数。request对象提供了以下几个方法来获取用户提交的信息:
- String getParameter(String name):返回给定参数的值,当传递给此方法的参数名没有实际参数与之对应时,返回 null 。使用 getParameter (String name) 取得的值都是 字符串类型 ,需要转换为需要的类型。
- String[] getParameterValues(String name):根据页面表单中的输入控件名称获取对应的多个值,一般用于获取复选框,复选列表框等输入控件,获取里面输入的多个值,参数name就是输入控件的名称。
- Enumeration getParameterNames():返回值类型:枚举类型Enumeration。得到客户端提交的所有参数的名称。
例如,如果有一个表单如下:
<form action="test.jsp" method="post">
姓名:<input type="text" name="name"><br>
性别:<input type="radio" name="gender" value="male">男
<input type="radio" name="gender" value="female">女<br>
爱好:<input type="checkbox" name="hobby" value="music">音乐
<input type="checkbox" name="hobby" value="sport">运动
<input type="checkbox" name="hobby" value="reading">阅读<br>
<input type="submit" value="提交">
</form>
那么在test.jsp中可以使用以下代码来获取用户提交的信息:
<%
//获取姓名
String name = request.getParameter("name");
//获取性别
String gender = request.getParameter("gender");
//获取爱好
String[] hobby = request.getParameterValues("hobby");
%>
4.1.2 处理汉字信息
在form表单采用post方式提交请求时,需要设置request对象的编码方式,保证能够正确地取到数据。request对象提供了以下方法来设置编码方式:
- void setCharacterEncoding(String chaen):设置request对象使用指定编码方式读取请求参数。
例如,如果要设置request对象使用UTF-8编码方式读取请求参数,可以使用以下代码:
<%
request.setCharacterEncoding("UTF-8");
%>
4.1.3 常用方法举例
除了上述方法外,request对象还提供了一些其他常用方法来获取客户端或服务器端的相关信息。以下是一些常用方法举例:
- String getProtocol():获取客户向服务器提交信息所使用的通信协议,比如HTTP/1.1等。
- String getServletPath():获取客户请求的JSP页面文件的目录。
- int getContentLength(): 获取客户提交的整个信息的长度。
- String getMethod():获取客户提交信息的方式,如:post或get。
- String getHeader(String s): 获取HTTP头文件中由参数s指定的头名字的值²。
- Enumeration getHeaderNames():获取头名字的一个枚举。
- Enumeration getHeaders(String s):获取头文件中指定头名字的全部值的一个枚举。
- String getRemoteAddr():获取用户的IP地址。
- String getRemoteHost(): 获取客户机的名称(如果获取不到,就获取IP地址)。
- String getServerName():获取服务器名称。
- int getServerPort():获取服务器端口号。
例如,如果要在一个JSP页面中显示客户端和服务器端的相关信息,可以使用以下代码:
<%
out.println("通信协议:" + request.getProtocol() + "<br>");
out.println("请求页面:" + request.getServletPath() + "<br>");
out.println("请求方式:" + request.getMethod() + "<br>");
out.println("请求长度:" + request.getContentLength() + "<br>");
out.println("用户IP地址:" + request.getRemoteAddr() + "<br>");
out.println("用户主机名:" + request.getRemoteHost() + "<br>");
out.println("服务器名称:" + request.getServerName() + "<br>");
out.println("服务器端口号:" + request.getServerPort() + "<br>");
%>
4.1.4 处理HTML标记
在JSP页面中,可以使用HTML标记来创建网页表单、超链接、图片等元素。这些元素可以与request对象配合使用,来实现用户与服务器之间的交互功能。以下是一些常用HTML标记及其与request对象相关联的属性或方法。
① form标记
form标记用于创建网页表单,它有以下几个重要属性:
- action:指定表单提交后要执行或显示哪个页面文件或程序文件。
- method:指定表单提交时所采用传送数据到服务器端程序文件所采用通信协议方式。有两种方式可选:get或post。
- enctype:指定表单数据传送到服务器端程序文件时所采用编码格式。有两种格式可选:
- application/x-www-form-urlencoded(默认):表示以键/值对形式发送数据,并对特殊字符进行编码。
- multipart/form-data:表示以二进制形式发送数据,并保留特殊字符原样。
例如,如果要创建一个简单的登录表单,并将数据提交给login.jsp处理,可以使用以下代码:
<form action="login.jsp" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
② input标记
input标记用于创建网页表单中不同类型的输入控件,它有以下几个重要属性:
- type:指定输入控件类型。有多种类型可选,如text、password、radio、checkbox、submit等。
- name:指定输入控件名称。该属性与request对象相关联,在request对象中可以通过该属性作为键来获取输入控件对应值。
- value:指定输入控件默认值或提交值。
例如,在上面创建登录表单时就使用了四个input标记来创建两个文本框和一个密码框以及一个提交按钮。
③ select、option 标记
select和option标记用于创建网页表单中的下拉列表框,它们有以下几个重要属性:
- name:指定下拉列表框的名称。该属性与request对象相关联,在request对象中可以通过该属性作为键来获取下拉列表框选择的值。
- value:指定下拉列表框中每个选项的值。
- selected:指定下拉列表框中哪个选项被默认选中。
例如,如果要创建一个下拉列表框,让用户选择自己的年龄段,可以使用以下代码:
<select name="age">
<option value="10-20">10-20岁</option>
<option value="21-30">21-30岁</option>
<option value="31-40">31-40岁</option>
<option value="41-50" selected>41-50岁</option>
<option value="51以上">51岁以上</option>
</select>
那么在JSP页面中可以使用以下代码来获取用户选择的年龄段:
<%
//获取年龄段
String age = request.getParameter("age");
%>
④ textArea 标记
textArea标记用于创建网页表单中的多行文本框,它有以下几个重要属性:
- name:指定多行文本框的名称。该属性与request对象相关联,在request对象中可以通过该属性作为键来获取多行文本框输入的值。
- rows:指定多行文本框的行数。
- cols:指定多行文本框的列数。
例如,如果要创建一个多行文本框,让用户输入自己的简介,可以使用以下代码:
<textarea name="intro" rows="5" cols="20">
请输入你的简介
</textarea>
那么在JSP页面中可以使用以下代码来获取用户输入的简介:
<%
//获取简介
String intro = request.getParameter("intro");
%>
⑤ style 样式标记
style标记用于定义网页元素的样式,它有以下几个重要属性:
- type:指定样式类型。一般为text/css。
- media:指定样式适用的媒体类型。有多种类型可选,如screen、print等。
- scoped:指定样式是否只适用于当前元素及其子元素。
例如,如果要定义一个样式,让所有的h1元素显示为红色,可以使用以下代码:
<style type="text/css">
h1 {
color: red;
}
</style>
⑥ table 标记
table标记用于创建网页中的表格,它有以下几个重要属性:
- border:指定表格边框的宽度。
- cellpadding:指定单元格内容与边框之间的距离。
- cellspacing:指定单元格之间的距离。
- align:指定表格在网页中的对齐方式。有多种方式可选,如left、right、center等。
table标记内部还可以嵌套其他标记,如tr、td、th、caption等,来定义表格的行、列、标题等内容。
例如,如果要创建一个表格,显示一些学生的信息,可以使用以下代码:
<table border="1" cellpadding="5" cellspacing="0" align="center">
<caption>学生信息表</caption>
<tr>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>班级</th>
</tr>
<tr>
<td>张三</td>
<td>男</td>
<td>18</td>
<td>一班</td>
</tr>
<tr>
<td>李四</td>
<td>女</td>
<td>19</td>
<td>二班</td>
</tr>
<tr>
<td>王五</td>
<td>男</td>
<td>20</td>
<td>三班</td>
</tr>
</table>
⑦ image 标记
image标记用于在网页中插入图片,它有以下几个重要属性:
- src:指定图片的来源地址。可以是相对路径或绝对路径。
- alt:指定图片无法显示时的替代文本。
- width:指定图片的宽度。
- height:指定图片的高度。
例如,如果要在网页中插入一张图片,并设置其大小和替代文本,可以使用以下代码:
<img src="logo.jpg" alt="这是一张logo图片" width="100" height="50">
⑧ embed 标记
embed标记用于在网页中嵌入其他类型的文件,如视频、音频、Flash等,它有以下几个重要属性:
- src:指定嵌入文件的来源地址。可以是相对路径或绝对路径。
- type:指定嵌入文件的类型。如video/mp4、audio/mp3等。
- width:指定嵌入文件的宽度。
- height:指定嵌入文件的高度。
例如,如果要在网页中嵌入一段视频,并设置其大小和类型,可以使用以下代码:
<embed src="video.mp4" type="video/mp4" width="300" height="200">
⑨ 属性值格式的说明
在HTML标记中,有些属性值需要遵循一定的格式规范,才能被正确地解析和执行。以下是一些常见属性值格式的说明:
- URL(统一资源定位符):表示一个资源在网络上的位置。URL由协议、主机名、端口号、路径和查询字符串等部分组成。如http://www.example.com:8080/index.jsp?name=Tom&age=18。
- 颜色值:表示一个颜色。颜色值可以用英文单词或十六进制数表示。如red或#FF0000表示红色。
- 尺寸值:表示一个长度或宽度。尺寸值可以用像素(px)或百分比(%)表示。如100px或50%表示100像素或50%。
- 布尔值:表示一个真假状态。布尔值只有两种可能:true或false。如selected=true表示某个选项被选中。
4.1.5 处理超链接
当我们需要在请求中添加超链接时,可以使用request的getRequestDispatcher方法。例如:
RequestDispatcher rd=request.getRequestDispatcher("link.html");
rd.forward(request,response);
4.2 response 对象
response对象代表了服务器端的响应信息,主要用于向客户端发送数据或执行动作¹。response对象包含了响应的头信息(Header)、状态码、内容类型(Content-Type)、字符编码(Character-Encoding)等信息²;还提供了设置cookie、重定向、刷新等功能的方法¹。
4.2.1 动态响应 contentType 属性
通过response对象可以对客户端的请求做出动态响应,即根据不同的请求返回不同类型的数据。response对象提供了以下方法来设置响应的内容类型:
- void setContentType(String type):设置响应的内容类型²。
- String getContentType():获取响应的内容类型²。
内容类型是一种标识数据类型的字符串,它由主类型和子类型组成,中间用斜杠(/)分隔。如text/html表示HTML文本,image/jpeg表示JPEG图片,application/json表示JSON数据等。
例如,如果要在JSP页面中返回一个JSON数据,可以使用以下代码:
<%
//设置响应的内容类型为JSON
response.setContentType("application/json");
//输出JSON数据
out.println("{\"name\":\"Tom\",\"age\":18}");
%>
4.2.2 response 对象的HTTP文件头
HTTP文件头是一种包含元数据(metadata)的信息,它用于描述HTTP请求或响应的属性或行为。HTTP文件头由键值对组成,每个键值对占一行,以冒号(:)分隔键和值。如Content-Type: text/html表示响应的内容类型是HTML文本。
response对象提供了以下方法来设置或获取响应的HTTP文件头:
- void setHeader(String name, String value):设置一个响应头²。
- void addHeader(String name, String value):添加一个响应头²。
- String getHeader(String name):获取一个响应头²。
- Collection getHeaderNames():获取所有响应头的名称²。
- Collection getHeaders(String name):获取指定名称的所有响应头²。
例如,如果要在JSP页面中设置一个响应头,表示该页面会在10秒后自动刷新,并获取该响应头的值,可以使用以下代码:
<%
//设置一个响应头,表示该页面会在10秒后自动刷新
response.setHeader("Refresh", "10");
//获取该响应头的值
String refresh = response.getHeader("Refresh");
//输出该响应头的值
out.println("Refresh: " + refresh);
%>
4.2.3 response 对象的重定向
重定向是一种让客户端重新发起一个请求到另一个地址的机制。重定向通常发生在以下情况:
- 当用户请求的资源已经被移动或删除时,服务器可以重定向到一个新的地址或一个错误页面。
- 当用户需要进行身份验证或授权时,服务器可以重定向到一个登录页面或一个提示页面。
- 当用户需要根据不同的条件或参数访问不同的资源时,服务器可以重定向到相应的页面。
response对象提供了以下方法来实现重定向:
- void sendRedirect(String location):重定向到指定地址²。
例如,如果要在JSP页面中判断用户是否登录,如果没有登录,则重定向到一个登录页面,可以使用以下代码:
<%
//获取session对象
HttpSession session = request.getSession();
//获取session中存储的用户信息
String user = (String) session.getAttribute("user");
//判断用户是否登录
if (user == null) {
//如果没有登录,则重定向到登录页面
response.sendRedirect("login.jsp");
} else {
//如果已经登录,则输出欢迎信息
out.println("欢迎你," + user);
}
%>
4.3 session 对象
session对象代表了客户端与服务器之间的一次会话关系¹。session对象可以用于存储和传递用户在不同页面之间访问时所需的数据¹。session对象包含了会话的ID、创建时间、最后访问时间、有效期等信息²;还提供了设置和获取属性、销毁会话等功能的方法¹。
4.3.1 session 对象的id
session对象有一个唯一标识符,称为session id(会话ID),它用于区分不同客户端与服务器之间的会话关系。session id通常由服务器自动生成,并通过cookie或URL重写等方式传递给客户端。session对象提供了以下方法来获取会话ID:
- String getId():获取会话ID。
例如,如果要在JSP页面中输出当前会话ID,可以使用以下代码:
<%
//获取当前会话ID
String sessionId = session.getId();
//输出当前会话ID
out.println("当前会话ID:" + sessionId);
%>
4.3.2 session 对象与URL重写
URL重写是一种在URL中附加额外参数的技术,它可以用于传递数据或状态信息。URL重写通常用于在客户端禁用cookie时,将session id传递给服务器端。URL重写需要在URL后面加上分号(;)和jsessionid=参数值对,并用&符号分隔多个参数。
例如,如果要在JSP页面中创建一个超链接,并通过URL重写传递当前会话ID给test.jsp页面,可以使用以下代码:
<%
//获取当前会话ID
String sessionId = session.getId();
%>
<a href="test.jsp;jsessionid=<%=sessionId%>">点击这里</a>
4.3.3 session对象存储数据
session对象可以用于存储和传递用户在不同页面之间访问时所需的数据¹。session对象提供了以下方法来设置和获取属性:
- void setAttribute(String name, Object value):设置一个属性²。
- Object getAttribute(String name):获取一个属性²。
- void removeAttribute(String name):移除一个属性²。
- Enumeration getAttributeNames():获取所有属性名称²。
例如,如果要在JSP页面中使用session对象存储和获取用户信息,并移除不需要的属性,可以使用以下代码:
<%
//设置用户信息属性
session.setAttribute("name", "Tom");
session.setAttribute("age", 18);
session.setAttribute("gender", "male");
//获取用户信息属性
String name = (String) session.getAttribute("name");
int age = (Integer) session.getAttribute("age");
String gender = (String) session.getAttribute("gender");
//输出用户信息属性
out.println("姓名:" + name + "<br>");
out.println("年龄:" + age + "<br>");
out.println("性别:" + gender + "<br>");
//移除性别属性
session.removeAttribute("gender");
%>
4.3.4 session 对象的生存期限
session对象有一个生存期限(timeout),它表示客户端与服务器之间多长时间没有
源: 与必应的对话, 2023/6/3
(1) JSP内置对象:request、response、out、session、application … https://blog.csdn.net/mofadiyu/article/details/108287705.
(2) javaweb内置对象request,response,out,session,Application等. https://blog.csdn.net/m0_59213693/article/details/120354118.
(3) JSP内置对象 (out、request、response、session、application). https://blog.csdn.net/qq_56692939/article/details/124241663.
设置,可以通过配置文件或在web.xml中配置。例如:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
4.4 application 对象
application对象是在所有的session中共享的对象,可以存储各种数据,例如全局变量、计数器等。
4.4.1 application 对象的常用方法
application对象的setAttribute
方法可以在application中存储数据,例如保存全局变量、计数器等。例如:
application.setAttribute("count", 0);
4.4.2 application留言板
使用application对象可以创建一个留言板,让网站的所有用户都可以共享。例如:
List<String> messages = (List<String>) application.getAttribute("messages");
if (messages == null) {
messages = new ArrayList<String>();
application.setAttribute("messages", messages);
}
messages.add(message);
4.5 out对象
out对象是向客户端输出信息的对象,我们可以使用out对象的write
方法输出HTML或文本信息。
response.setContentType("text/plain;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("Hello World!");
总结
本章我们介绍了request、response、session和application对象的知识点和相关代码,这些对象在Web开发中非常重要,我们应该深入理解和掌握。