网站建设管理工作小结,河南招标信息网官网,wordpress批量alt代码,爱写作网站今日内容
1. 会话技术1. Cookie2. Session
2. JSP#xff1a;入门学习会话技术
1. 会话#xff1a;一次会话中包含多次请求和响应。* 一次会话#xff1a;浏览器第一次给服务器资源发送请求#xff0c;会话建立#xff0c;直到有一方断开为止
2. 功能#xff1a;在一次…今日内容
1. 会话技术1. Cookie2. Session
2. JSP入门学习会话技术
1. 会话一次会话中包含多次请求和响应。* 一次会话浏览器第一次给服务器资源发送请求会话建立直到有一方断开为止
2. 功能在一次会话的范围内的多次请求间共享数据
3. 方式1. 客户端会话技术Cookie2. 服务器端会话技术SessionCookie
1. 概念客户端会话技术将数据保存到客户端2. 快速入门* 使用步骤1. 创建Cookie对象绑定数据* new Cookie(String name, String value) 2. 发送Cookie对象* response.addCookie(Cookie cookie) 3. 获取Cookie拿到数据* Cookie[] request.getCookies() 3. 实现原理* 基于响应头set-cookie和请求头cookie实现4. cookie的细节1. 一次可不可以发送多个cookie?* 可以* 可以创建多个Cookie对象使用response调用多次addCookie方法发送cookie即可。2. cookie在浏览器中保存多长时间1. 默认情况下当浏览器关闭后Cookie数据被销毁2. 持久化存储* setMaxAge(int seconds)1. 正数将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间时间到后cookie文件自动失效2. 负数默认值3. 零删除cookie信息3. cookie能不能存中文* 在tomcat 8 之前 cookie中不能直接存储中文数据。* 需要将中文数据转码---一般采用URL编码(%E3)* 在tomcat 8 之后cookie支持中文数据。特殊字符还是不支持建议使用URL编码存储URL解码解析4. cookie共享问题1. 假设在一个tomcat服务器中部署了多个web项目那么在这些web项目中cookie能不能共享* 默认情况下cookie不能共享* setPath(String path):设置cookie的获取范围。默认情况下设置当前的虚拟目录* 如果要共享则可以将path设置为/2. 不同的tomcat服务器间cookie共享问题* setDomain(String path):如果设置一级域名相同那么多个服务器之间cookie可以共享* setDomain(.baidu.com),那么tieba.baidu.com和news.baidu.com中cookie可以共享5. Cookie的特点和作用1. cookie存储数据在客户端浏览器2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)* 作用1. cookie一般用于存出少量的不太敏感的数据2. 在不登录的情况下完成服务器对客户端的身份识别6. 案例记住上一次访问时间1. 需求1. 访问一个Servlet如果是第一次访问则提示您好欢迎您首次访问。2. 如果不是第一次访问则提示欢迎回来您上次访问时间为:显示时间字符串2. 分析1. 可以采用Cookie来完成2. 在服务器中的Servlet判断是否有一个名为lastTime的cookie1. 有不是第一次访问1. 响应数据欢迎回来您上次访问时间为:2018年6月10日11:50:202. 写回CookielastTime2018年6月10日11:50:012. 没有是第一次访问1. 响应数据您好欢迎您首次访问2. 写回CookielastTime2018年6月10日11:50:013. 代码实现package cn.itcast.cookie;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(/cookieTest)public class CookieTest extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置响应的消息体的数据格式以及编码response.setContentType(text/html;charsetutf-8);//1.获取所有CookieCookie[] cookies request.getCookies();boolean flag false;//没有cookie为lastTime//2.遍历cookie数组if(cookies ! null cookies.length 0){for (Cookie cookie : cookies) {//3.获取cookie的名称String name cookie.getName();//4.判断名称是否是lastTimeif(lastTime.equals(name)){//有该Cookie不是第一次访问flag true;//有lastTime的cookie//设置Cookie的value//获取当前时间的字符串重新设置Cookie的值重新发送cookieDate 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);//一个月response.addCookie(cookie);//响应数据//获取Cookie的value时间String value cookie.getValue();System.out.println(解码前value);//URL解码value URLDecoder.decode(value,utf-8);System.out.println(解码后value);response.getWriter().write(h1欢迎回来您上次访问时间为:value/h1);break;}}}if(cookies null || cookies.length 0 || flag false){//没有第一次访问//设置Cookie的value//获取当前时间的字符串重新设置Cookie的值重新发送cookieDate 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 cookie new Cookie(lastTime,str_date);//设置cookie的存活时间cookie.setMaxAge(60 * 60 * 24 * 30);//一个月response.addCookie(cookie);response.getWriter().write(h1您好欢迎您首次访问/h1);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}}JSP入门学习
1. 概念* Java Server Pages java服务器端页面* 可以理解为一个特殊的页面其中既可以指定定义html标签又可以定义java代码* 用于简化书写2. 原理* JSP本质上就是一个Servlet3. JSP的脚本JSP定义Java代码的方式1. % 代码 %定义的java代码在service方法中。service方法中可以定义什么该脚本中就可以定义什么。2. %! 代码 %定义的java代码在jsp转换后的java类的成员位置。3. % 代码 %定义的java代码会输出到页面上。输出语句中可以定义什么该脚本中就可以定义什么。4. JSP的内置对象* 在jsp页面中不需要获取和创建可以直接使用的对象* jsp一共有9个内置对象。* 今天学习3个* request* response* out字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似* response.getWriter()和out.write()的区别* 在tomcat服务器真正给客户端做出响应之前会先找response缓冲区数据再找out缓冲区数据。* response.getWriter()数据输出永远在out.write()之前5. 案例:改造Cookie案例Session主菜
1. 概念服务器端会话技术在一次会话的多次请求间共享数据将数据保存在服务器端的对象中。HttpSession
2. 快速入门1. 获取HttpSession对象HttpSession session request.getSession();2. 使用HttpSession对象Object getAttribute(String name) void setAttribute(String name, Object value)void removeAttribute(String name) 3. 原理* Session的实现是依赖于Cookie的。4. 细节1. 当客户端关闭后服务器不关闭两次获取session是否为同一个* 默认情况下。不是。* 如果需要相同则可以创建Cookie,键为JSESSIONID设置最大存活时间让cookie持久化保存。Cookie c new Cookie(JSESSIONID,session.getId());c.setMaxAge(60*60);response.addCookie(c);2. 客户端不关闭服务器关闭后两次获取的session是同一个吗* 不是同一个但是要确保数据不丢失。tomcat自动完成以下工作* session的钝化* 在服务器正常关闭之前将session对象系列化到硬盘上* session的活化* 在服务器启动后将session文件转化为内存中的session对象即可。3. session什么时候被销毁1. 服务器关闭2. session对象调用invalidate() 。3. session默认失效时间 30分钟选择性配置修改 session-configsession-timeout30/session-timeout/session-config5. session的特点1. session用于存储一次会话的多次请求的数据存在服务器端2. session可以存储任意类型任意大小的数据* session与Cookie的区别1. session存储数据在服务器端Cookie在客户端2. session没有数据大小限制Cookie有3. session数据安全Cookie相对于不安全案例验证码
1. 案例需求1. 访问带有验证码的登录页面login.jsp2. 用户输入用户名密码以及验证码。* 如果用户名和密码输入有误跳转登录页面提示:用户名或密码错误* 如果验证码输入有误跳转登录页面提示验证码错误* 如果全部输入正确则跳转到主页success.jsp显示用户名,欢迎您2. 分析目录结构 LoginServlet .java文件
package cn.web.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Map;WebServlet(/loginServlet)
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 1.设置request编码request.setCharacterEncoding(utf-8);// 2.获取参数MapString username request.getParameter(username);String password request.getParameter(password);String checkCode request.getParameter(checkCode);// 3.先获取程序生成的验证码HttpSession session request.getSession();String checkCode_session (String) session.getAttribute(checkCode_session);// 删除session中存储的验证码session.removeAttribute(checkCode_session);// 4.先判断验证码是否正确if (checkCode_session ! null checkCode_session.equalsIgnoreCase(checkCode)){// 忽略大小写比较// 验证码正确// 判断用户名和密码是否一致,需要调用UserDao查询数据库if (zhangsan.equals(username) 123.equals(password)) {// 登录成功// 存储用户信息session.setAttribute(user,username);// 重定向到success.jspresponse.sendRedirect(request.getContextPath() /success.jsp);}else {// 登录失败// 存储提示信息到requestrequest.setAttribute(login_error,用户名或密码错误);// 转发到登录页面request.getRequestDispatcher(/login.jsp).forward(request,response);}}else {// 验证码不一致// 存储提示信息到requestrequest.setAttribute(cc_error,验证码错误);// 转发到登录页面request.getRequestDispatcher(/login.jsp).forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
CheckCodeServlet .java文件
package cn.web.servlet;import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;/*** 重定向*/
WebServlet(/checkCodeServlet)
public class CheckCodeServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int width 100;int height 50;// 1.创建一个对象在内存中画图验证码图片对象BufferedImage image new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);// 2.美化图片// 2.1 填充背景色Graphics g image.getGraphics();// 画笔对象g.setColor(Color.pink); // 设置画笔颜色g.fillRect(0,0,width,height); // 填充一个矩形// 2.2 画边框g.setColor(Color.blue);g.drawRect(0,0,width-1,height-1);String str ABCDEFGHIJKLMNOPQRETUVWXYZabcdefghijklmnopqrstuvwxyz0123456789;// 生成随机下标Random random new Random();StringBuilder sb new StringBuilder();for (int i 1; i 4; i) {int index random.nextInt(str.length());// 获取字符char c str.charAt(index); // 根据下标取出随机字符sb.append(c);// 2.3 写验证码g.drawString(c,width/5*i,height/2);}String checkCode_session sb.toString();// 将验证码存入sessionrequest.getSession().setAttribute(checkCode_session,checkCode_session);// 2.4 画干扰线g.setColor(Color.green);// 随机生成坐标点for (int i 0; i 10; i) {int x1 random.nextInt(width);int x2 random.nextInt(width);int y1 random.nextInt(height);int y2 random.nextInt(height);g.drawLine(x1,y1,x2,y2);}// 3.将图片输出到页面展示ImageIO.write(image,jpg,response.getOutputStream());}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
login.jsp文件
%--Created by IntelliJ IDEA.User: ZepDate: 2020/10/3Time: 10:37To change this template use File | Settings | File Templates.
--%
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitlelogin/titlestylediv {color: red;}/stylescriptwindow.onload function () {document.getElementById(img).onclick function () {var time new Date().getTime();this.src /day16/checkCodeServlet?time time;}}/script
/head
bodyform action/day16/loginServlet methodposttabletrtd用户名/tdtdinput typetext nameusername/td/trtrtd密码/tdtdinput typepassword namepassword/td/trtrtd验证码/tdtdinput typetext namecheckCode/td/trtrtd colspan2img idimg src/day16/checkCodeServlet alt/td/trtrtd colspan2input typesubmit value登录/td/tr/table/formdiv% request.getAttribute(cc_error) null ? : request.getAttribute(cc_error) %/divdiv% request.getAttribute(login_error) null ? : request.getAttribute(login_error) %/div/body
/html
success.jsp文件
%--Created by IntelliJ IDEA.User: ZepDate: 2020/10/3Time: 11:06To change this template use File | Settings | File Templates.
--%
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitlesuccess/title
/head
bodyh1% request.getSession().getAttribute(user) %,欢迎您/h1/body
/html