Web基础知识(12)- JSP (四) | JSP Cookies 处理、JSP JavaBean 的使用


1. JSP Cookies 处理

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

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

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

        (1) 服务器把 cookie 信息发送到浏览器,例如:用户 ID、用户名称等信息。
        (2) 浏览器在本地存储这些信息。
        (3) 浏览器再次向服务器发送请求时,它会同时将本地存储的 cookie 信息一同发送给服务器,然后服务器使用这些信息来识别用户或其它。

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

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


    1) 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 没有注释,则返回 null

 

    2) JSP 使用 cookie

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

        (1) 创建 cookie 对象
    
            创建 cookie 对象,name 代表 cookie 的名称,value 表示该名称对应的值,语法如下:
    
                cookie cookie = new cookie(String name, String value);
        
            注意:name 和 value 中不能包含空格和以下字符:
    
                [ ] ( ) = , " / ? @ : ;

        (2) 写入 cookie

            创建 cookie 对象后,调用 response.addCookie() 方法写入 cookie,代码如下:
    
                response.addcookie(cookie);
    
        (3) 设置 cookie 有效期

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

                cookie.setMaxAge(60*60*24);

        (4) 读取 cookie

            调用 request.getCookies() 方法读取 cookie,该方法返回 HTTP 请求中的 cookie 对象数组,需要通过遍历进行访问。

        (5) 删除 cookie

            删除 cookie 步骤如下:
                a) 获取 cookie
                b) 将要删除的 cookie 有效期设置为 0
                c) 调用 response.addCookie() 方法重新写入 cookie

    示例,cookie.jsp 代码如下:

 1         <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2         <%@ page import="java.net.*"%>
 3         <!DOCTYPE html>
 4         <html>
 5         <head>
 6         <title>Cookie</title>
 7         </head>
 8         <body>
 9             <%  if ("POST".equals(request.getMethod())) {
10                     // 处理中文乱码
11                     String username = URLEncoder.encode(request.getParameter("username"), "utf-8");
12                     //String username = request.getParameter("username");
13                     String password = request.getParameter("password");
14                     if ("admin".equals(username) && "123456".equals(password)) {
15 
16                         Cookie cookie_name = new Cookie("username", username);
17                         cookie_name.setMaxAge(60 * 60 * 24); // 设置 cookie 有效期为24小时。
18                         response.addCookie(cookie_name);
19 
20                         out.print("<p>Login successfully!</p>");
21                         out.print("<p>View cookie,click <a href='cookie_view.jsp'>Here</a></p>");
22 
23                     } else {
24                         out.print("<p>Login failed, invalid username or password!</p>");
25                     }
26                 } else { %>
27 
28                     <h2>User Login</h2>
29                     <form method="post" action="">
30                         <p>Username: <input type="text" name="username" value="admin" /></p>
31                         <p>Password: <input type="text" name="password" value="123456" /></p>
32                         <p><input type="submit" value="Login" /></p>
33                     </form>
34 
35             <%  } %>
36         </body>
37         </html>


    cookie_view.jsp 代码如下:

 1         <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2         <%@ page import="java.net.*"%>
 3         <!DOCTYPE html>
 4         <html>
 5         <head>
 6         <title>Cookie View</title>
 7         </head>
 8         <body>
 9             <%!
10                 public Cookie getCookieByName(Cookie[] cookies, String name) {
11                     if (cookies == null) {
12                         return null;
13                     } else {
14                         for (Cookie cookie : cookies) {
15                             if (cookie.getName().equals(name)) {
16                                 return cookie;
17                             }
18                         }
19                         return null;
20                     }
21                 }
22             %>
23 
24             <%
25                 Cookie cookie_username = getCookieByName(request.getCookies(), "username");
26                 if (cookie_username != null) {
27                     out.println("<p>Get username from cookie</p>");
28                     out.println("<p>username: " + cookie_username.getValue() + "</p>");
29                     out.print("<p>Remove cookie,click <a href='cookie_remove.jsp'>Here</a></p>");
30                 } else {
31                     out.println("<p>No cookie, <a href='cookie.jsp'>Back</a></p>");
32                 }
33             %>
34         </body>
35         </html>


    cookie_remove.jsp,代码如下:

 1         <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2         <%@ page import="java.net.*"%>
 3         <!DOCTYPE html>
 4         <html>
 5         <head>
 6         <title>Cookie Remove</title>
 7         </head>
 8         <body>
 9             <%!
10                 public Cookie getCookieByName(Cookie[] cookies, String name) {
11                     if (cookies == null) {
12                         return null;
13                     } else {
14                         for (Cookie cookie : cookies) {
15                             if (cookie.getName().equals(name)) {
16                                 return cookie;
17                             }
18                         }
19                         return null;
20                     }
21                 }
22             %>
23 
24             <%
25                 Cookie cookie_username = getCookieByName(request.getCookies(), "username");
26                 if (cookie_username != null) {
27                     cookie_username.setMaxAge(0);
28                     response.addCookie(cookie_username);
29                     response.sendRedirect("cookie_view.jsp");
30                 } else {
31                     out.println("<p>No cookie, <a href='cookie.jsp'>Back</a></p>");
32                 }
33             %>
34         </body>
35         </html>

 

2. JSP JavaBean 的使用

    Java 之父 James Gosling 在设计 Java 语言,为 Java 组件中封装数据的 Java 类进行命名时,看到了桌子上的咖啡豆,于是灵机一动,就把它命名为“JavaBean”,bean 翻译为“豆、豆子”。

    在程序中,开发人员所要处理的是业务逻辑和数据,而这两种操作都可以封装成 JavaBean,一个应用程序中会使用很多的 JavaBean。由此可见,JavaBean 组件是应用程序的重要组成部分。

    JavaBean 是可以重复使用的一个组件,是遵守 JavaBean API 规范的 Java 类。

    一般情况下,JavaBean 要满足以下要求:

        (1) JavaBean 是一个公共类,并提供无参公有的构造方法;
        (2) 需要被序列化并且实现了 Serializable 接口;
        (3) 属性私有化;
        (4) 具有公共的访问属性的 getter 和 setter 方法;

    1) JavaBean 属性

        一个 JavaBean 可以有多个属性,属性应该是可以访问的,属性类型可以是任何合法的 Java 数据类型,包括自定义的类。

        JavaBean 的每个属性通常都具有相应的 setter 和 getter 方法,setter 方法称为属性修改器,getter 方法称为属性访问器。

方法 描述
getPropertyName() 举例来说,如果属性的名称为 Name,那么这个方法的名字就要写成 getName() 来读取这个属性。这个方法也称为访问器。
setPropertyName() 举例来说,如果属性的名称为 Name,那么这个方法的名字就要写成 setName() 来写入这个属性。这个方法也称为写入器。

 

    2) 访问 JavaBean

        <jsp:useBean> 标签可以在 JSP 中声明一个 JavaBean,然后使用。声明后,JavaBean 对象就成了脚本变量,可以通过脚本元素或其他自定义标签来访问。<jsp:useBean> 标签的语法格式如下:

            <jsp:useBean id="bean's name" scope="bean's scope" typeSpec/>

        其中,根据具体情况,scope 的值可以是 page (默认值),request,session 或 application。id 值可任意只要不和同一 JSP 文件中其它 <jsp:useBean> 中 id 值一样就行了。

    3) 访问 JavaBean 对象的属性

        在 <jsp:useBean> 标签主体中使用 <jsp:getProperty/> 标签来调用 getter 方法,使用 <jsp:setProperty/> 标签来调用 setter 方法,语法格式如下:

1             <jsp:useBean id="test" class="com.example.Test">
2                 <jsp:setProperty name="test" property="name" value="default value"/>
3                 <jsp:getProperty name="test" property="url"/>
4                 ...
5             </jsp:useBean>


        name 属性指的是 Bean 的 id 属性。property 属性指的是想要调用的 getter 或 setter 方法。

    示例,Test.java 代码如下:

 1         package com.example;
 2 
 3         import java.io.Serializable;
 4 
 5         public class Test implements Serializable {
 6 
 7             private String name;
 8             private String url;
 9 
10             public String getName() {
11                 return name;
12             }
13 
14             public void setName(String name) {
15                 this.name = name;
16             }
17 
18             public String getUrl() {
19                 return url;
20             }
21 
22             public void setUrl(String url) {
23                 this.url = url;
24             }
25         }


    javabean.jsp 代码如下:

 1         <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2         <%@ page import="java.net.*"%>
 3         <!DOCTYPE html>
 4         <html>
 5         <head>
 6         <title>JavaBean</title>
 7         </head>
 8         <body>
 9             <p>JavaBean Test Page</p>
10 
11             <jsp:useBean id="test" class="com.example.Test">
12                 <jsp:setProperty name="test" property="name" value="JavaBean Name"/>
13                 <jsp:setProperty name="test" property="url" value="www.test.com"/>
14             </jsp:useBean>
15 
16             <p>Name: <jsp:getProperty name="test" property="name"/></p>
17             <p>Url: <jsp:getProperty name="test" property="url"/></p>
18 
19         </body>
20         </html>

 



posted @ 2022-03-20 10:04  垄山小站  阅读(189)  评论(0)    收藏  举报