最近有個公司新招的畢業生,問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";
}
}