全部章节 >>>>
本章目录
3.1 JSP 内置对象简介
3.1.1 JSP 内置对象概述
类别 |
对象名称 |
作用 |
输入和输出对象 |
out |
用来向客户端浏览器输出信息的数据流 |
request |
客户端发送的请求信息 |
|
response |
服务器传回客户端的响应信息 |
|
作用域通信对象 |
session |
为发送请求的客户端建立会话 |
application |
保存整个应用程序的共享信息 |
|
pageContext |
保存当前 JSP 页面的共享信息 |
|
Servlet对象 |
page |
代表 JSP 网页本身 |
config |
读取初始化参数 |
|
异常错误对象 |
exception |
获取运行时的异常 |
3.1.2 JSP 表单处理
- 网页中表单是用户填写信息并提交的组件,JSP中如何获取用户填写提交的数据
- JSP 引擎会将客户端的请求信息封装在这个 request 对象中,调用request 对象相应的方法就可以获取对应的封装信息
3.1.2 request对象
request对象中封装的主要请求信息有以下几项:
- 请求的 HTTP 协议的传送文件头信息
- 提交请求的客户端和服务器端信息
- 用户提交的表单信息
其中最重要的就是用来封装用户提交的表单信息,通过如下方法可以获取对应数据
返回值 |
方法名 |
说明 |
String |
getParameter(“表单元素name”) |
根据参数name获取对应值(name即表单元素的name属性) |
String[] |
getParameterValues(“表单元素name”) |
获取多个name相同的多个值,复选框使用较多 |
request对象在获取数据的时候,中文有时会出现乱码,解决方法如下:
- 针对post请求中文:String name = request.setCharacterEncoding("utf-8"); //设置获取值的编码
- 针对get请求中文:String name = new String(request.getParameter("name").getBytes("iso-8859-1"), "utf-8");
3.1.2 开发第一个 JSP 页面
示例:学生毕业后,在线申请登记。第一步需要填写身份证号码,第二步登记个人的信息,确认信息无误后再提交
表单提交到secondPage.jsp处理
<form action="secondPage.jsp">
<table>
<tr>
<td> 身份证号码:</td>
<td><input type="text" name="idNumber"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value=" 开始报道 ">
</td>
</tr>
</table>
</form>
从请求中获取身份证号码参数数据
secondPage.jsp中可以获取身份证号码参数值
<%
String idNumber = request.getParameter("idNumber");
%>
//显示身份证号码关键代码
<tr>
<td> 身份证号码:</td>
<td><input type=“text” name=“idNumber”
value=“<%=idNumber%>“ disabled="disabled" />
</td>
</tr>
实例:经过secondPage.jsp再次提交到第三个界面thirdPage.jsp接收
<%
String name = request.getParameter("name");// 姓名
String gender = request.getParameter("gender");// 年龄
String regrationNumber = request.getParameter("registrationNumber");// 报到证编号
String university = request.getParameter("university");// 毕业院校
String major = request.getParameter("major");// 专业
String education = request.getParameter("education");// 学历
String employment = request.getParameter("employment");// 就业情况
%>
//可以将接收的数据展示在界面上
3.1.3 实践练习
3.2 输入和输出对象
3.2.1 out 对象
out 对象主要用于向客户端输出各种数据类型的内容,默认缓冲区8K,可以通过page指令设置
out 对象被封装为 javax.servlet.jsp.JspWriter 类,在实际应用中 out 对象会通过 JSP 容器变换为 java.io.PrintWriter 类,常用方法如下
方法名 |
作用 |
void print( 数据) |
输出数据到页面 |
void flush() |
强制输出缓冲区里的数据 |
void close() |
关闭输出流 |
void clearBuffer() |
清空缓冲区 |
void clear() |
清除屏幕显示数据 |
示例:利用out对象输出信息到JSP页面
<%
//模拟性别变量数据
String gender = “male”;
if ("male".equals(gender)) {
out.print(" 男 ");
} else if ("female".equals(gender)) {
out.print(" 女 ");
}
%>
利用out对象还可以输出html代码,比如<br /> 让浏览器解析
3.2.2 response对象
response 对象用于响应客户请求,封装了 JSP 产生的响应,并发送到客户端以响应客户端的请求
response对象常用功能如下:
- 处理 HTTP 文件头
- 页面重定向
客户端在进行请求时会发送许多额外的信息,这些就是头信息。服务器端也可以根据需要向客户端设置头信息,如设置每秒刷新一次页面,显示当前时间
示例:利用response对象设置头部刷新属性为1秒,浏览器打开该页面每秒会刷新一次
<%@ page import="java.io.*,java.util.*"%>
<%@ page import="java.text.*"%>
<body>
<div>
<h3>
<%
response.setHeader("refresh", "1");// 每隔 1 秒刷新 1 次
%>
当前时间:<%=new SimpleDateFormat("HH:mm:ss").format(new Date())%>
</h3>
</div>
</body>
response 对象提供的 sendRedirect() 方法将网页重定向到另一个页面
重定向操作支持将地址重定向到不同的主机上。在客户端浏览器上将会得到跳转的地址,并重新发送请求链接,且地址栏显示新地址
新页面路径及名称: response.sendRedirect(“path”);
path:用于指定目标路径,可以是相对路径,也可以是不同主机的其他 URL 地址 如果地址写错,则会出现页面找不到错误
示例:在毕业生网上报道系统中,如果用户没有输入身份证号码,则重定向到“填写身份证号码”页面。
<%
String idNumber = request.getParameter("idNumber");//取出请求中传递的身份证号码参数值
// 获取用户输入的身份证号码
// 如果用户没有输入身份证号码,则重定向到 firstPage.jsp
if (idNumber == null || "".equals(idNumber.trim())) {
response.sendRedirect("firstPage.jsp");//如果身份证号码不存在,则转向第一个界面
}
%>
3.2.3 实践练习
3.3 作用域通信对象
3.3.1 为什么需要session对象
3.3.1 session对象
- session在JSP中被称为会话,目的是保存不同用户在web程序多个页面之间跳转时的数据信息,直到浏览器关闭,每个客户端会对应同一个session对象
- 服务器不知道客户端何时关闭浏览器,为了节省内存开销,默认超时时间为30分钟,即30分钟用户没有再次发出请求,则session自动销毁,超时时间可以在Tomcat配置文件中修改
3.3.1 session对象方法
session对象可以存储用户相关的数据信息,且在同会话作用于多个界面有效
session对象存储数据方法
- session.setAttribute(“字符串名称”,要存入的数据); 向session中存入数据,并且起名
- 注意:要存入的数据可以是任意类型,名称必须是字符串类型
session对象取出数据方法
- Object object = session.getAttribute(“存入时的名称”);
- 注意:取出数据时是Object类型,如需要可以转为需要类型
session对象移除数据方法如下
- session.removeAttribute(“存入时的名称”);
示例:将数据存入session中,跨越多个界面取出使用
从session中取出身份证号码转为字符串显示:
third.jsp第三个界面
<tr>
<td> 身份证:</td>
<td><span><%=session.getAttribute("idNumber").toString()%></span></td>
</tr>
如果不为空,则将身份证号码存入session
secondPage.jsp中代码:
<%
String idNumber = request.getParameter("idNumber");// 获取用户输入的身份证号码
// 如果用户没有输入身份证号码,则重定向到 firstPage.jsp
if (idNumber == null || "".equals(idNumber.trim())) {
response.sendRedirect("firstPage.jsp");
}
// 将身份证号码保存到 session 作用域中
session.setAttribute("idNumber", idNumber);
response.sendRedirect(“third.jsp");
%>
3.3.2 application对象
application 对象用于保存应用中的公有数据,服务器启动自动创建 application 对象,只要没有关闭服务器,application 对象将一直存在,所有用户可以共享
session对象和用户会话相关,不同用户的session是完全不同的对象,而 application 对象对于所有用户都是同一个的对象,所以application 对象的生命周期更长
application 对象常用于记录缓存项目中的全局数据,常用方法如下
方法名 |
作用 |
void setAttribute(String name,Object value) |
键、值对形式存入数据到application |
Object getAttribute(String name) |
根据键名称取出数据 |
void removeAttribute(String name) |
根据键名称移除数据 |
String getRealPath(String path) |
获取当前项目的真实路径 |
3.3.2 JSP 表达式
示例:利用application对象特性,统计网上申请报到证的人数
<h1>
<%
int counter = 0;// 设置 counter 变量用于保存网页次数
if (application.getAttribute("counter") == null) {
counter = 1;// 如果 counter 在 application 中不存在,表明是第一次运行,赋予1
} else {
counter = Integer.parseInt(application.getAttribute("counter").toString()); //如果 counter 在 application 中存在,则需要取出已存在的数字,
并且累加
counter++;
}
application.setAttribute("counter", counter);//将最新累加后的人数存入application对象
%>
<!-- 输出参与网上报到的人数 -->
你是第 <%=counter%> 位成功登记的同学。
</h1>
3.3.3 pageContext对象
pageContext页面上下文对象可以获取其他作用域对象,并提供方法用于访问内建对象在页面上定义的所有属性,从而保持同一页面组件之间的数据共享
pageContext常用方法如下:
方法名 |
作用 |
ServletConfig getServletConfig() |
获取ServletConfig配置对象 |
void setAttribute(String name,Object value) |
以键值对形式存放数据到pageContext中 |
Object getAttribute(String name) |
从pageContext中根据键名称取出数据 |
void removeAttribute(String name) |
从pageContext中移除数据 |
ServletRequest getRequest() |
获取request对象 |
ServletResponse getResponse() |
获取response对象 |
HttpSession getSession() |
获取session对象 |
示例:pageContext作用域仅在当前页面有效 session作用域在整个会话范围有效,浏览器关闭则会话结束 application作用域最大,整个项目范围都有效,服务关闭才结束
// pageContext中初始化页面计数器
if (pageContext.getAttribute("pageCounter") == null) {
pageContext.setAttribute("pageCounter", new Integer(0));
}
// 获取页面计数器,并让其加 1
Integer pageCounter = (Integer) pageContext.getAttribute("pageCounter");
//取出已存的计数器值增加1,覆盖进去
pageContext.setAttribute("pageCounter", pageCounter.intValue() + 1);
// session中初始化页面计数器
if (session.getAttribute("pageCounter") == null) {
session.setAttribute("pageCounter", new Integer(0));
}
// 获取页面计数器,并让其加 1
Integer pageCounter = (Integer) session.getAttribute("pageCounter");
//取出已存的计数器值增加1,覆盖进去
session.setAttribute("pageCounter", pageCounter.intValue() + 1);
// application中初始化页面计数器
if (application.getAttribute("pageCounter") == null) {
application.setAttribute("pageCounter", new Integer(0));
}
// 获取页面计数器,并让其加 1
Integer pageCounter = (Integer) application.getAttribute("pageCounter");
//取出已存的计数器值增加1,覆盖进去
application.setAttribute("pageCounter", pageCounter.intValue() + 1);
3.3.4 实践练习
3.4 其他内置对象
3.4.1 exception对象
exception对象用来表示 JSP 文件执行时发生的所有错误和异常
JSP页面的page 指令中设置 isErrorPage 属性为 true才可以使用,否则无法编译
exception 对象的常用方法如下
方法名 |
作用 |
getMessage( ) |
返回异常的信息 |
getLocalizedMessage( ) |
返回本地化的异常错误 |
toString( ) |
返回关于异常错误的简单信息描述 |
fillInStackTrace( ) |
重写异常错误的执行轨迹 |
示例:在JSP 页面中出现没有捕捉到的异常,就会生成 exception 对象,并把对象传送到在 page 指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%> //说明当前error.jsp为出错后处理的页面
<%
out.print(" 异常信息:" + exception.getMessage()); //从exception对象中获取异常信息
%>
3.4.2 实践练习
总结:
- JSP内置对象是JSP中预先定义好,无需实例化直接使用的一系列对象
- 输入输出对象包括:out可以向页面输出内容、response可以实现设置请求头部信息以及重定向页面
- 作用域通信对象范围从小到大包括:pageContext、request、session、application,可以实现Web应用中的数据存储和读取
- exception对象代表JSP页面发生的异常,从中可以获取异常信息,只能在设置了isErrorPage=“true”的错误处理页面才能使用