案例:记住上一次访问时间
1.cookie案例需求分析
(1).访问一个Servlet,如果是第一次访问,则提示:您好欢迎您首次访问
(2).如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
2.分析:
(1)可以采用cookie完成
(2)在服务器中的servlet判断是否有一个名为lastTime的cookie
①有:不是第一次访问
a.响应数据:欢迎回来,您上次访问时间为:年月日时分秒
b.写回cookie:lastTime = 年月日时分秒
②没有:是第一次访问
a.响应数据:您好,欢迎您首次访问
b.写回cookie:lastTime = 年月日时分
3.代码实现
/*
(1)可以采用cookie完成
(2)在服务器中的servlet判断是否有一个名为lastTime的cookie
①有:不是第一次访问
a.响应数据:欢迎回来,您上次访问时间为:年月日时分秒
b.写回cookie:lastTime = 年月日时分秒
②没有:是第一次访问
a.响应数据:您好,欢迎您首次访问
b.写回cookie:lastTime = 年月日时分
*/
@WebServlet("/cookieTest")
public class CookieTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应消息体的数据格式以及编码
resp.setContentType("text/html;charset=utf-8");
//1.在服务器中的servlet判断是否有一个名为lastTime的cookie
//1.1获取所有cookies
Cookie[] cookies = req.getCookies();
boolean flag = false;//没有cookie为lastTime
//1.2遍历cookie数组
if(cookies != null && cookies.length>0){
for (Cookie cookie : cookies) {
//1.3获取cookie名称
String name = cookie.getName();
//2在服务器中的servlet判断是否有一个名为lastTime的cookie
if("lastTime".equals(name)){
// ①有:不是第一次访问
flag = true;
//设置cookie的value
//获取当前时间的字符串重新设置cookie的值,重新发送cookie
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
System.out.println("编码前:"+str_date);
//URL编码
str_date = URLEncoder.encode(str_date, "utf-8");
System.out.println("编码后:"+str_date);
cookie.setValue(str_date);
//设置cookie的存活时间
cookie.setMaxAge(60*60*24*30);//一个月
resp.addCookie(cookie);
//a.响应数据:欢迎回来,您上次访问时间为:年月日时分秒
//获取cookie的value
String value = cookie.getValue();
System.out.println("解码前"+value);
//解码
value = URLDecoder.decode(value, "utf-8");
System.out.println("解码后"+value);
resp.getWriter().write("欢迎回来,您上次访问时间为:"+value+"</h1");
break;
}
}
}
// ②没有:是第一次访问
// a.响应数据:您好,欢迎您首次访问
// b.写回cookie:lastTime = 年月日时分
if(cookies== null || cookies.length == 0|| flag == false){
//没有,第一次访问
//设置cookie的value
//获取当前时间的字符串重新设置cookie的值,重新发送cookie
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
Cookie cookie = new Cookie("lastTime",str_date);
cookie.setValue(str_date);
//设置cookie的存活时间
cookie.setMaxAge(60*60*24*30);//一个月
resp.addCookie(cookie);
resp.getWriter().write("您好,欢迎您首次访问</h1>");
}
}
}
JSP改造cookie案例
一、JSP概念
1.Java Server Pages:java服务器端页面
(1)可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
(2)用于简化书写。
代码示例
<body>
<%
System.out.println("hello,jsp");
%>
<h1>hi-jsp</h1>
</body>
效果在控制台输出<% %>
中的语句。在页面输出<h1></h1>
中的语句
二、JSP原理
JSP本质上就是一个servlet
三、JSP脚本
JSP定义Java代码的方式
三种方法定义:
方法1.<% 代码 %>
:定义的java代码,在service方法中,service方法可以定义什么,该脚本就可以定义什么
方法2.<%! 代码 %>
:定义的java代码,在jsp转换后的java类的成员位置
方法3.<%=代码 %>
:定义的java代码,会输出到页面上,输出语句中可以定义什么,该脚本中就可以定义什么
四、JSP内置对象
1.内置对象: 在jsp页面中不需要获取和创建,可以直接使用的对象
2.jsp一共有九个内置对象
3.介绍三个:
(1)request:
(2)response:
(3)out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
response.getWriter()和Out.write()的区别:
①在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据
②response.getWriter()数据输出永远在out.write()之前