JavaWeb学习篇6_IDEA设置Servlet模板、会话技术、Cookie、Cookie显示上次登录时间小案例、Session、JSP简单入门学习、验证码验证登录验证小案例
目录设置IDEA中的Servlet模板会话技术Cookie简单入门使用实现原理Cookie细节特点及作用小案例:记住上次访问时间Session概念快速入门使用原理存活时间与Cookie的区别JSPJSP入门学习(为了完成验证码验证小案例)概念原理JSP脚本JSP的内置对象开始IDEA开发环境设置Servlet注解模板一、会话技术会话就是发生在浏览器和服务器之间请求、响应的过程一次会话结束于浏览器或
目录
-
设置IDEA中的Servlet模板
-
会话技术
- Cookie
- 简单入门使用
- 实现原理
- Cookie细节
- 特点及作用
- 小案例:记住上次访问时间
- Session
- 概念
- 快速入门使用
- 原理
- 存活时间
- 与Cookie的区别
- Cookie
-
JSP
- JSP入门学习(为了完成验证码验证小案例)
- 概念
- 原理
- JSP脚本
- JSP的内置对象
- 验证码登录小案例
- JSP入门学习(为了完成验证码验证小案例)
开始
IDEA开发环境设置Servlet注解模板
一、会话技术
会话就是发生在浏览器和服务器之间请求、响应的过程
一次会话结束于浏览器或者服务器关闭
-
Cookie提供客户端一种共享数据的方法
-
Session提供服务器端一种共享数据的方法
1.1Cookie
1.1.1简单入门使用
在服务器的一个Servlet 创建Cookie对象,然后设置键值,发送Cookie到浏览器客户端
适应浏览器访问另外一个Servlet,因为Cookie可以多个键值对
request.getCookies
返回的是Cookie[]
其实就是封装的一种对象集,底层是Collection
然后可以遍历
1.1.2实现原理
基于响应头set-Cookie和请求头Cookie实现
1.1.3Cookie细节
中文问题下面小案例会说明
1.1.4特点及作用
1.1.5小案例:记录上次访问时间
关于tomcat8之后随解决支持Cookie中文输出问题,但是特殊字符像空格还是不行,会报错
最后设置之后,会进行URL编码解码,就能解决中文字符问题
代码
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/servletShowTime")
public class ServletShowTime extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应得消息体数据格式以及编码
response.setContentType("text/html;charset=utf-8");
//1. 获取所有的cookies
Cookie[] cookies = request.getCookies();
//标记默认是第一次登陆
boolean flag = false;
//不是第一次访问
if(cookies != null && cookies.length > 0){
//遍历找Cookie是否有lastTime属性
for (Cookie cookie : cookies) {
//System.out.println(cookie.getValue());
String name = cookie.getName();
//找到了不是第一次访问,记录这次登陆的时间
if("lastTime".equals(name)){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
//设置中文URL编码,待会打印值的时候还需要解码
str_date = URLEncoder.encode(str_date,"utf-8");
cookie.setValue(str_date);
cookie.setMaxAge(60 * 60 * 24);
response.addCookie(cookie);
String value = cookie.getValue();
value = URLDecoder.decode(value,"utf-8");
response.getWriter().write("<h1>欢迎回来,您上次访问的时间为:" + value + "</h1>");
flag = true;
}
}
//是第一次访问
if(cookies == null || cookies.length == 0 || flag == false){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
str_date = URLEncoder.encode(str_date,"utf-8");
Cookie cookie= new Cookie("lastTime",str_date);
cookie.setMaxAge(60 * 60 * 24);
response.addCookie(cookie);
response.getWriter().write("<h1>您好,欢迎首次访问!</h1>");
flag = true;
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
1.2Session
Session的用处就是用于服务器端数据的共享,例如一个服务器的购物车功能,我们可以一直累积加入商品到购物车
1.2.1概念
1.2.2快速入门使用
能在控制台打印设置的hello session 信息
1.2.3原理
Session的实现是依赖于Cookie的,才能保证一次会话范围内使用的是一个Session对象
第一次创建Session对象的时候,会response给浏览器一个set-Cookie,里面包含Session 对象的id
下次浏览器请求的时候,Cookie会带上此id,找到自己的session对象
1.2.4存活时间
一次会话范围内是一个session对象我们知道了,如果想要浏览器关闭再打开(第二次会话)仍是一个session对象呢
一般一次会话结束时(浏览器关闭再打开访问)session对象就会改变
但是如果我们一直希望是一个session对象,我们可以设置session的存活时间
浏览器关闭、打开重新关闭导致的会话更新 我们 可以保证session对象不变
那么服务器端关闭再打开,两次获取的session对象是同一个吗?答案是不是,但是如果不是我们的访问信息会不会丢失?
不会丢失,因为服务器提供一种机制:
- session钝化
- sesssion活化
其实就是服务器在正常关闭之前,会把session对象的信息写入硬盘(钝化)一个文件,等服务器重新打开,会重新读取session对象,然后删除该文件
注意IDEA中能支持钝化,但是不支持活化
我们需要在本地tomcat中执行实验
1.2.5session特点与Cookie的区别
特点
二、JSP
动态资源需要逻辑代码,而这些逻辑代码可以写在JSP页面中
同时JSP也支持html标签的使用
类似上面的显示上次登录时间小案例,我们发现在使用response.getWriter().write()并不是那么方便
因此可以把代码放在jsp页面中完成案例优化
因此可以(可以先看看后面的jsp知识再来看这个)
(部分代码截图)
JSP入门学习(为了完成改造验证码验证小案例)
2.1概念
2.2原理
2.3JSP脚本
Java代码可以直接定义在<% >
等类似内部
HttpJspBase类中有一个Service方法,里面含内置对象的声明,我们定义的Java代码也会被放在方法里面
只是定义的脚本格式不同,放置的位置也不同,作用也不同
2.4JSP的内置对象
关于response.getWriter().write()
和out.write()
的区别
其实out就是jsp内置对象,可以直接使用输出信息到页面
2.5验证码登录小案例
对上次验证码验证案例的升级(上次出了点问题,string一直画不去,不知道问题出现在哪,有时间会找到问题并把代码贴出来)
这次主要是运用了jsp、servlet、session、request、response、css、js等相关知识
主要文件
- CheckCodeServlet:生成验证码的容器
- LoginServlet:验证码验证的容器、转发、重定向的容器
- login.jsp:设置表单,绑定单击事件,设计css样式(验证码或者数据库密码错误,转发到login.jsp)
- success.jsp:验证码和数据库账号密码都正确的跳转页面(重定向)
小优化
- 页面提示信息小优化
- 一次性验证码小优化
CheckCodeServlet:生成验证码的容器
login.jsp:设置表单,绑定单击事件,设计css样式(验证码或者数据库密码错误,转发到login.jsp)
LoginServlet:验证码验证的容器、转发、重定向的容器
与君共勉!
更多推荐
所有评论(0)