Java之JSP教程九大内置对象详解(下篇)
之前我们在这篇文章Java之JSP教程九大内置对象详解中,已经讲解完了六个个对象,接下来我们讲解最后的三个对象
pageContext 是 javax.servlet.jsp.PageContext 的实例对象。
pageContext 对象表示整个 JSP 页面,可以获取或删除以下对象的任意属性:
pagerequestsessionapplicationpageContext 常用的方法如下:
Object findAttribute (String AttributeName):按 page、request、session、application 的顺序查找指定的属性,并返回对应的属性值。如果没有相应的属性,则返回 NULLObject getAttribute (String AttributeName, int Scope):在指定范围内获取属性值。与 findAttribute 不同的是,getAttribute 需要指定查找范围void removeAttribute(String AttributeName, int Scope):在指定范围内删除某属性void setAttribute(String AttributeName, Object AttributeValue, int Scope):在指定范围内设置属性和属性值Exception getException():返回当前页的 Exception 对象ServletRequest getRequest():返回当前页的 request 对象ServletResponse getResponse():返回当前页的 response 对象ServletConfig getServletConfig():返回当前页的 ServletConfig 对象HttpSession getSession():返回当前页的 session 对象Object getPage():返回当前页的 page 对象ServletContext getServletContext():返回当前页的 application 对象
使用 PageContext 对象取得不同范围的属性值。index.jsp 代码如下:
%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"% !DOCTYPE html html head /head body % request.setAttribute("info", "request范围的值"); session.setAttribute("info", "session范围的值"); application.setAttribute("info", "application范围的值"); % 利用 pageContext 取出以下范围内各值(方法一): br request 设定的值: %=pageContext.getRequest().getAttribute("info")% br session 设定的值: %=pageContext.getSession().getAttribute("info")% br application 设的值: %=pageContext.getServletContext().getAttribute("info")% hr 利用pageContext取出以下范围内各值(方法二): br 范围1(page)内的值: %=pageContext.getAttribute("info", 1)% br 范围2(request)内的值: %=pageContext.getAttribute("info", 2)% br 范围3(session)内的值: %=pageContext.getAttribute("info", 3)% br 范围4(application)内的值: %=pageContext.getAttribute("info", 4)% hr 利用 pageContext 修改或删除某个范围内的值: % pageContext.setAttribute("info", "修改request范围的值", 2); % br 修改 request 设定的值: br %=pageContext.getRequest().getAttribute("info")% br % pageContext.removeAttribute("info"); % 删除 session 设定的值: %=session.getAttribute("info")% /body /html
运行结果如下:
index.jsp运行结果
JSP page 的实质是 java.lang.Object 对象,相当于 Java 中的 this 关键字。
page 对象是指当前的 JSP 页面本身,在实际开发中并不常用。
page 对象的常用方法如下:
class getClass():返回当前页面所在类
int hashCode():返回当前页面的 hash 代码
String toString():将当前页面所在类转换成字符串
boolean equals(Object obj):比较对象和指定的对象是否相等
void copy (Object obj):把对象复制到指定的对象中
Object clone():复制对象
下面通过一个简单的例子来演示 page 中的方法。
index.jsp 代码如下:
%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"% !DOCTYPE html html head /head body % Object obj; obj = null; % 返回当前页面所在类: %=page.getClass()% br 返回当前页面的 hash 代码: %=page.hashCode()% br 转换成 String 类的对象: %=page.toString()% br page和obj比较: %=page.equals(obj)% br page和this比较: %=page.equals(this)% /body /html
运行结果如下:
Cookie 不是 JSP 内置对象,而是由 Netscape 公司发明,用来跟踪用户会话(session)的方式。
Cookie 由服务器生成并发送给浏览器(客户端),浏览器会将其以文本文件的形式存储在某个目录下。
例如,IE 浏览器把 cookie 信息保存在类似于 C://windows//cookies 的目录下,当用户再次访问某个网站时,服务器就会要求浏览器查找并返回之前发送的 cookie 信息,来识别此用户。
识别用户通常有以下步骤:
cookie 的作用表现在以下方面:
对特定对象的追踪,如用户的访问次数、最后访问时间等。统计网页的浏览次数。在 cookie 有效期内,记录用户的登录信息,简化下一次的登录过程。实现各种个性化服务,如 最近浏览过的商品 。注意:由于 cookie 会将用户的个人信息保存在客户端,如用户名、计算机名、以及浏览和登录的网站等。这些信息可能会包含一些比较敏感的内容,所以从安全角度来说,使用 cookie 存在着一定的风险,因此不建议在 cookie 中保存比较重要或隐私的内容。
cookie方法
cookie 常用方法如下:
public void setDomain(String pattern):设置 cookie 的域名,如 biancheng.netpublic String getDomain():获取 cookie 的域名public void setMaxAge(int expiry):设置 cookie 有效期,单位:秒 默认仅在当前会话中存在public int getMaxAge():获取 cookie 有效期,单位:秒 默认为 -1,表示 cookie 保存到浏览器关闭为止public String getName():返回 cookie 的名称,名称创建后将不能被修改public void setValue(String newValue):设置 cookie 的值public String getValue():获取 cookie 的值public void setPath(String uri):设置 cookie 的路径 默认为当前页面目录以及子目录下的所有 URLpublic String getPath():获取 cookie 的路径public void setSecure(boolean flag):设置 cookie 是否要加密传输public void setComment(String purpose):设置 cookie 注释public String getComment():返回 cookie 注释,如果 cookie 没有注释,则返回 nullJSP使用cookie
创建 cookie 对象,name 代表 cookie 的名称,value 表示该名称对应的值,语法如下:
cookie cookie = new cookie(String name,String value);
注意:name 和 value 中不能包含空格和以下字符:
[ ] ( ) = , / ? @ : ;
创建 cookie 对象后,调用 response.addCookie() 方法写入 cookie,代码如下:
response.addcookie(cookie);
调用 setMaxAge() 方法设置 cookie 的有效期(单位:秒),如将 cookie 有效期设置为 24 小时,代码如下:
cookie.setMaxAge(60*60*24);
调用 request.getCookies() 方法读取 cookie,该方法返回 HTTP 请求中的 cookie 对象数组,需要通过遍历进行访问。
通过 HTML 表单将客户端数据提交到 index.jsp 中,并设置 cookie。
login.jsp 代码如下:
%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"% html head /head body form action="index.jsp" method="get" 站点名: input type="text" name="name" br / 网址: input type="text" name="url" / input type="submit" value="提交" / /form /body /html
index.jsp 代码如下:
%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"% %@ page import="java.net.*"% % // 解决中文乱码 String str = URLEncoder.encode(request.getParameter("name"), "utf-8"); // 创建cookie对象 cookie name = new cookie("name", str); cookie url = new cookie("url", request.getParameter("url")); // 设置cookie有效期为24小时。 name.setMaxAge(60 * 60 * 24); url.setMaxAge(60 * 60 * 24); // 在响应头部添加cookie response.addcookie(name); response.addcookie(url);% html head title 编程帮(www.biancheng.net) /title /head body b 网站名: /b %=request.getParameter("name")% br b 网址: /b %=request.getParameter("url")% /body /html
运行结果如下:
login.jsp页面运行结果
index.jsp页面运行结果
调用 request.getcookies() 方法,在 cookie.jsp 页面中读取 cookie
cookie.jsp 代码如下:
%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"% %@ page import="java.net.*"% !DOCTYPE html html head title 编程帮(www.biancheng.net) /title /head body % cookie cookie = null; //创建cookie对象 cookie[] cookies = null; // 获取 cookie 的数据 cookies = request.getcookies(); if (cookies != null) { out.println(" h2 获取cookie名称与对应值 /h2 "); for (int i = 0; i cookies.length; i++) { cookie = cookies[i]; out.print("参数名 : " + cookie.getName()); out.print(" br "); out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") + " br "); out.print("------------------------------------ br "); } } else { out.println(" h2 cookie为空 /h2 "); } % /body /html
运行结果如下:
删除 cookie 步骤如下:
获取 cookie将要删除的 cookie 有效期设置为 0调用 response.addCookie() 方法重新写入 cookie删除参数名为 name 的 cookie
cookie.jsp 代码如下:
%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"% %@ page import="java.net.*"% !DOCTYPE html html head title 编程帮(www.biancheng.net) /title /head body % cookie cookie = null; //创建cookie对象 cookie[] cookies = null; // 获取 cookie 的数据 cookies = request.getcookies(); if (cookies != null) { out.println(" h2 获取cookie名称与对应值 /h2 "); for (int i = 0; i cookies.length; i++) { cookie = cookies[i]; //删除参数名为name的cookie if ((cookie.getName()).compareTo("name") == 0) { cookie.setMaxAge(0); response.addcookie(cookie); out.print("删除 cookie: " + cookie.getName() + " br/ "); } out.print("参数名 : " + cookie.getName()); out.print(" br "); out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") + " br "); out.print("------------------------------------ br "); } } else { out.println(" h2 cookie为空 /h2 "); } % /body /html
刷新 cookie.jsp 页面,运行结果如下:
注:也可以手动在浏览器中删除 cookie。
session 和 cookie 的区别如下:
session:
cookie将信息保存在服务器保存的值是 Object 类型session 存储的数据随会话的结束而结束安全性高,可以保存重要的信息cookie:
将信息保存在客户端保存的值是 String 类型cookie 可以长期保存在客户端安全性低,通常用于保存不重要的信息实际开发中,需要根据不同的业务需求来选择采用哪种技术,例如,用户的用户名和密码等敏感信息不能使用 cookie 存储,淘宝购物的 最近浏览过的商品 ,则可以使用 cookie 存储在客户端。
Java之JSP教程九大内置对象详解(下篇)