8.11 使用cookie记录用户的偏好
cookie最常用的应用之一就是用来记录用户的偏好,对于简单的用户设置,可以直接将用户偏好存储在cookie中,对于更为复杂的应用,一般在cookie中存储唯一的用户标识,而将实际的偏好存储在数据库中。
• RegistrationForm servlet
– 使用cookie的值预先填写表单的字段
– 如果未找到相应的cookie则使用默认值
– 课程的后面将会在JSP中重做这项工作
• Registration servlet
– 基于接收到的请求参数创建cookie
– 如果得到所有的参数则显示这些值
– 如果任何参数缺失,则重定向到表单
package coreservlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/** Servlet that displays an HTML form to collect user's
* first name, last name, and email address. Uses cookies
* to determine the initial values of each of those
* form fields.
*/public class RegistrationForm extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String actionURL =
"/servlet/coreservlets.RegistrationServlet";
String firstName =
CookieUtilities.getCookieValue(request, "firstName", "");
String lastName =
CookieUtilities.getCookieValue(request, "lastName", "");
String emailAddress =
CookieUtilities.getCookieValue(request, "emailAddress",
"");
String docType =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
"Transitional//EN\">\n";
String title = "Please Register";
out.println
(docType +
"<HTML>\n" +
"<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<CENTER>\n" +
"<H1>" + title + "</H1>\n" +
"<FORM ACTION=\"" + actionURL + "\">\n" +
"First Name:\n" +
" <INPUT TYPE=\"TEXT\" NAME=\"firstName\" " +
"VALUE=\"" + firstName + "\"><BR>\n" +
"Last Name:\n" +
" <INPUT TYPE=\"TEXT\" NAME=\"lastName\" " +
"VALUE=\"" + lastName + "\"><BR>\n" +
"Email Address: \n" +
" <INPUT TYPE=\"TEXT\" NAME=\"emailAddress\" " +
"VALUE=\"" + emailAddress + "\"><P>\n" +
"<INPUT TYPE=\"SUBMIT\" VALUE=\"Register\">\n" +
"</FORM></CENTER></BODY></HTML>");
}
}
package coreservlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/** Servlet that processes a registration form containing
* a user's first name, last name, and email address.
* If all the values are present, the servlet displays the
* values. If any of the values are missing, the input
* form is redisplayed. Either way, the values are put
* into cookies so that the input form can use the
* previous values.
*/
public class RegistrationServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
boolean isMissingValue = false;
String firstName = request.getParameter("firstName");
if (isMissing(firstName)) {
firstName = "Missing first name";
isMissingValue = true;
}
String lastName = request.getParameter("lastName");
if (isMissing(lastName)) {
lastName = "Missing last name";
isMissingValue = true;
}
String emailAddress = request.getParameter("emailAddress");
if (isMissing(emailAddress)) {
emailAddress = "Missing email address";
isMissingValue = true;
}
Cookie c1 = new LongLivedCookie("firstName", firstName);
response.addCookie(c1);
Cookie c2 = new LongLivedCookie("lastName", lastName);
response.addCookie(c2);
Cookie c3 = new LongLivedCookie("emailAddress",
emailAddress);
response.addCookie(c3);
String formAddress =
"/servlet/coreservlets.RegistrationForm";
if (isMissingValue) {
response.sendRedirect(formAddress);
} else {
PrintWriter out = response.getWriter();
String docType =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
"Transitional//EN\">\n";
String title = "Thanks for Registering";
out.println
(docType +
"<HTML>\n" +
"<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<CENTER>\n" +
"<H1 ALIGN>" + title + "</H1>\n" +
"<UL>\n" +
" <LI><B>First Name</B>: " +
firstName + "\n" +
" <LI><B>Last Name</B>: " +
lastName + "\n" +
" <LI><B>Email address</B>: " +
emailAddress + "\n" +
"</UL>\n" +
"</CENTER></BODY></HTML>");
}
}
/** Determines if value is null or empty. */
private boolean isMissing(String param) {
return((param == null) ||
(param.trim().equals("")));
}
}
小结
• cookie涉及将名称/值对从服务器发送到浏览器
,并在之后访问相同的页面、站点或域时返回。
• 我们可以
– 跟踪会话(使用高层API)
– 对安全性要求较低的网站,使用cookie可以避免用户
每次都需要登录
– 根据用户的不同定制网站
– 有选择地投放内容或广告
• 设置cookie
– 调用Cookie的构造函数,设置时效,调用
response.addCookie
• 读取cookie
– 调用request.getCookie,检查得到的结果是否为null,
在数组中查找匹配的名称,使用相关的值
分享到:
相关推荐
Servlet与JSP核心编程:综合介绍Servlet与JSP
Servlet与JSP核心编程(第二版),你是不是要学最新版本(J2EE1.4)的Servlet和 SP?这本书能让你如虎添翼。你将能很好地掌握Servlet和JSP
《Servlet与JSP核心编程(第2卷 第2版)》在第l卷的基础上,广泛涉及自定义标签库、过滤器、声明式安全、JSTL和Struts等主题,并沿袭深受读者喜爱的写作风格,通过完整、有效、资料丰富的程序来演绎目前最流行的技术和...
Servlet与JSP核心编程第二版 PDF文件 高清,内容通俗易懂.
Servlet与JSP核心编程第二版5Servlet与JSP核心编程第二版5Servlet与JSP核心编程第二版5
Servlet与JSP核心编程(第2卷 第2版)
servlet与jsp核心编程,还是免费给大家下载,需要的可以下来看看
《Servlet与JSP核心编程》由浅入深,全面而深入地介绍了servlet和jsp技术。本书重点介绍核心技术,同时对相关的内容,如web服务器的配置、安装和应用,数据库的安装和配置等都做了详细明了的介绍。本书的例子简练...
Servlet与JSP核心编程第二版代码
本书由Marty Hall,Larry Brown著 张学良译 清华大学出版社出版 原书有47M由于上传文件大小限制分为3部分,本人不是黑人,仅仅在最后一个部分才收取4分资源分
《Servlet与JSP核心编程》由浅入深,全面而深入地介绍了servlet和jsp技术。本书重点介绍核心技术,同时对相关的内容,如web服务器的配置、安装和应用,数据库的安装和配置等都做了详细明了的介绍。本书的例子简练...
Servlet 与 JSP 核心编程(第2版)(含源代码版) Servlet 与 JSP 核心编程(第2版)(含源代码版)
Servlet与JSP核心编程第二版(含书签)
《Servlet与JSP核心编程》(第2版)叙述详尽,条理清晰。对于初学者来说是一本不可多得的入门书籍,经验丰富的Servelet和JSP开发人员也可以通过阅读《Servlet与JSP核心编程》(第2版)得到巩固和提高。
servlet与jsp核心编程*(第二版)卷二 源代码集合
Servlet与JSP核心编程 第2卷.pdf 想学习的同学可以看看
《Servlet与JSP核心编程(第2卷 第2版)》
非常好的JavaWeb书籍!适合新老手! 由于网上基本没有高清+书签的版本,故本人花了3个小时认真制作了目录(非常详细) 分享的同时顺便赚点积分!谢谢大佬们的认可! ...已设置永久有效 如果网盘分享过期,可提醒我,我会及时...