Java之JSP教程九大内置对象详解(下篇)
目录

前言

之前我们在这篇文章java之jsp教程九大内置对象详解中,已经讲解完了六个个对象,接下来我们讲解最后的三个对象

jsp pagecontext对象

pagecontext 是 javax.servlet.jsp.pagecontext 的实例对象。

pagecontext 对象表示整个 jsp 页面,可以获取或删除以下对象的任意属性:

  • page
  • request
  • session
  • application

pagecontext 常用的方法如下:

  • object findattribute (string attributename):按 page、request、session、application 的顺序查找指定的属性,并返回对应的属性值。如果没有相应的属性,则返回 null
  • object 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对象

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>

运行结果如下:

jsp cookie的使用

cookie 不是 jsp 内置对象,而是由 netscape 公司发明,用来跟踪用户会话(session)的方式。

cookie 由服务器生成并发送给浏览器(客户端),浏览器会将其以文本文件的形式存储在某个目录下。

例如,ie 浏览器把 cookie 信息保存在类似于 c://windows//cookies 的目录下,当用户再次访问某个网站时,服务器就会要求浏览器查找并返回之前发送的 cookie 信息,来识别此用户。

识别用户通常有以下步骤:

  • 服务器把 cookie 信息发送到浏览器,例如:用户 id、用户名称等信息。
  • 浏览器在本地存储这些信息。
  • 浏览器再次向服务器发送请求时,它会同时将本地存储的 cookie 信息一同发送给服务器,然后服务器使用这些信息来识别用户或其它。
  • cookie 的作用表现在以下方面:

    • 对特定对象的追踪,如用户的访问次数、最后访问时间等。
    • 统计网页的浏览次数。
    • 在 cookie 有效期内,记录用户的登录信息,简化下一次的登录过程。
    • 实现各种个性化服务,如”最近浏览过的商品“。

    注意:由于 cookie 会将用户的个人信息保存在客户端,如用户名、计算机名、以及浏览和登录的网站等。这些信息可能会包含一些比较敏感的内容,所以从安全角度来说,使用 cookie 存在着一定的风险,因此不建议在 cookie 中保存比较重要或隐私的内容。

    cookie方法

    cookie 常用方法如下:

    • public void setdomain(string pattern):设置 cookie 的域名,如 biancheng.net
    • public 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 的路径 默认为当前页面目录以及子目录下的所有 url
    • public string getpath():获取 cookie 的路径
    • public void setsecure(boolean flag):设置 cookie 是否要加密传输
    • public void setcomment(string purpose):设置 cookie 注释
    • public string getcomment():返回 cookie 注释,如果 cookie 没有注释,则返回 nulljsp使用cookie

    jsp 使用 cookie 主要分为以下几个步骤。

    创建 cookie 对象

    创建 cookie 对象,name 代表 cookie 的名称,value 表示该名称对应的值,语法如下:

    cookie cookie = new cookie(string name,string value);

    注意:name 和 value 中不能包含空格和以下字符:

    [ ] ( ) = , " / ? @ : ;

    写入 cookie

    创建 cookie 对象后,调用 response.addcookie() 方法写入 cookie,代码如下:

    response.addcookie(cookie);

    设置 cookie 有效期

    调用 setmaxage() 方法设置 cookie 的有效期(单位:秒),如将 cookie 有效期设置为 24 小时,代码如下:

    cookie.setmaxage(60*60*24); 

    读取cookie

    调用 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页面运行结果

    读取cookie

    调用 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
    • 将要删除的 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 的区别如下:

    session:

    • cookie将信息保存在服务器
    • 保存的值是 object 类型
    • session 存储的数据随会话的结束而结束
    • 安全性高,可以保存重要的信息

    cookie:

    • 将信息保存在客户端
    • 保存的值是 string 类型
    • cookie 可以长期保存在客户端
    • 安全性低,通常用于保存不重要的信息

    实际开发中,需要根据不同的业务需求来选择采用哪种技术,例如,用户的用户名和密码等敏感信息不能使用 cookie 存储,淘宝购物的”最近浏览过的商品“,则可以使用 cookie 存储在客户端。

    到此这篇关于java之jsp教程九大内置对象详解的文章就介绍到这了,所有内容也都讲解完了,对其他内容还感兴趣的请搜索硕编程以前的文章或继续浏览下面的相关文章,希望大家以后多多支持硕编程!

    相关文章