jstl實現cookie

來源:互聯網
上載者:User

最近有個公司新招的畢業生,問cookie怎麼實現,我告訴他 網上很多,他說不想用那種,因為在jsp中內嵌入太多的

<%

%>,

這種結構,是jsp不提倡的,一想說的也對,x想利用了jstl標籤庫實現了cookie

因為jstl有對cookie進行提取的標籤,但是沒有設定cookie的標籤

所以我們必須寫一個javabean,在javabean裡封裝了cookie,然後通過設定這個javabean的屬性來間接的達到設定cookie的屬性<jsp:useBean>,我只在cookie設定了兩個屬性(username  和 password)

取得cookie時,可以利用EL運算式來完成,總

以下為核心的代碼

設定cookies部分 利用了<jsp:useBean ........> 和 <jsp:setProperty    ........>

<jsp:useBean id = "ck_username" class = "org.com.jsp.CookieBean" />
 <jsp:setProperty name="ck_username" property="name" value="username"/>
 <jsp:setProperty name="ck_username" property="value" value="${param.username}"/>
 <jsp:setProperty name="ck_username" property="maxAge" value="<%= 14*24*60*60%>"/>
 <jsp:setProperty name="ck_username" property="cookieHeader" value="<%= response%>"/>

<jsp:useBean id = "ck_password" class = "org.com.jsp.CookieBean" />
 <jsp:setProperty name="ck_password" property="name" value="password"/>
 <jsp:setProperty name="ck_password" property="value" value="${param.password}"/>
 <jsp:setProperty name="ck_password" property="maxAge" value="<%= 14*24*60*60%>"/>
 <jsp:setProperty name="ck_password" property="cookieHeader" value="<%= response%>"/>

提取cookies部分 利用了EL運算式

 <c:forEach items="${pageContext.request.cookies}" var="c">
  <c:if test="${fn:contains(c.name,'username')}">
    <c:set var="username" value="${c.value}"/>
  </c:if>
  <c:if test="${fn:contains(c.name,'password')}">
    <c:set var="password" value="${c.value}"/>
  </c:if>
</c:forEach>

html部分

<form name="login" action="redirect.jsp">
  使用者名稱:<input type="text" name="username" value="<c:out value="${username}"/>"><br/>
  密碼:<input type="password" name="password" value="<c:out value="${password}"/>"><br/>
  <input type="submit" value="login">
</form>

CookieBean代碼

package org.com.jsp;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Cookie;

public class CookieBean {

  private Cookie cookie = null;

public CookieBean(){}

//set the cookie name
public void setName(String name){

    if (name == null || (name.equals("")))
        throw new IllegalArgumentException("Invalid cookie name set in: "+getClass().getName());

    cookie = new Cookie(name,""+new java.util.Date().getTime());
}

//set the cookie value
public void setValue(String value){

 if (value == null || (value.equals("")))
        throw new IllegalArgumentException("Invalid cookie value set in: "+getClass().getName());

    if (cookie != null)
        cookie.setValue(value);

}

public void setMaxAge(int maxAge){

    if (cookie != null)
        cookie.setMaxAge(maxAge);

}

public void setPath(String path){

 if (path == null || (path.equals("")))
        throw new IllegalArgumentException("Invalid cookie path set in: "+getClass().getName());

    if (cookie != null)
        cookie.setPath(path);
}

public void setCookieHeader(HttpServletResponse response){

    if (response == null )
        throw new IllegalArgumentException("Invalid HttpServletResponse set in: "+getClass().getName());
    if (cookie != null)
        response.addCookie(cookie);
}

public String getName(){

    if (cookie != null)
       return cookie.getName();
    else
       return "unavailable";

       }

public String getValue(){

    if (cookie != null)
       return cookie.getValue();
    else
       return "unavailable";

       }

public String getPath(){

    if (cookie != null)
       return cookie.getPath();
    else
       return "unavailable";

       }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.