Session机制:

1)、session机制采用的是在服务器端保持 HTTP 状态信息的方案 。

2)、当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否包含了一个session标识(即sessionId),如果已经包含一个sessionId则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,但用户人为地在请求的URL后面附加上一个JSESSION的参数)。如果客户请求不包含sessionId,则为此客户创建一个session并且生成一个与此session相关联的sessionId,这个session id将在本次响应中返回给客户端保存。

3)、方法:

--获取Session 对象:

request.getSession(), request.getSession(boolean Create);

--属性相关的:

getAttribute()、setAttribute()、removeAttribute()

--使HttpSession 失效:

invalidate()

--设置其最大时效:

setMaxInactiveInterval()

4)、url 重写:它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话。将会话标识号以参数形式附加在超链接的URL地址后面的技术称为URL重写。

<%= response.encodeURL("login.jsp")%>

5)、应用:一个简易的购物车

先看一下效果:

代码:

step1.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>Insert title here</title>
8 </head>
9 <body>
10 <h4>Step1:选择要购买的书籍</h4>
11 <form action="<%= request.getContextPath() %>/processStep1" method="post">
12 <table border="1" cellpadding="10" cellspacing="0">
13 <tr>
14 <td>书名</td>
15 <td>购买</td>
16 </tr>
17 <tr>
18 <td>Java</td>
19 <td><input type="checkbox" name="book" value="Java"/></td>
20 </tr>
21 <tr>
22 <td>Mysql</td>
23 <td><input type="checkbox" name="book" value="MySql"/></td>
24 </tr>
25 <tr>
26 <td>Oracle</td>
27 <td><input type="checkbox" name="book" value="Oracle"/></td>
28 </tr>
29 <tr>
30 <td colspan="2"><input type="submit" value="Submit"/></td>
31 </tr>
32 </table>
33 </form>
34 </body>
35 </html>

ProcessStep1Servlet .java:

package com.hnust.javaweb;
2
3 import java.io.IOException;
4 import javax.servlet.ServletException;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 public class ProcessStep1Servlet extends HttpServlet {
10 private static final long serialVersionUID = 1L;
11
12 protected void doPost(HttpServletRequest request, HttpServletResponse response)
13 throws ServletException, IOException {
14 //获取book 参数信息
15 String[] book = request.getParameterValues("book");
16 //放入
17 request.getSession().setAttribute("books", book);
18 //重定向到step2.jsp 页面,要用绝对路径
19 response.sendRedirect(request.getContextPath() + "/shoppingcart/step2.jsp");
20 }
21
22 }

step2.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>Insert title here</title>
8 </head>
9 <body>
10 <h4>Step2:请输入寄送地址和信用卡地址</h4>
11 <form action="<%= request.getContextPath() %>/processStep2" method="post">
12 <table border="1" cellpadding="10" cellspacing="0">
13 <tr>
14 <td colspan="2">基本信息</td>
15 </tr>
16 <tr>
17 <td>姓名</td>
18 <td><input type="text" name="name"/></td>
19 </tr>
20 <tr>
21 <td>寄送地址:</td>
22 <td><input type="text" name="address"/></td>
23 </tr>
24 <tr>
25 <td colspan="2">信用卡信息</td>
26 </tr>
27 <tr>
28 <td>种类</td>
29 <td>
30 <input type="radio" name="cardtype" value="Visa"/>Visa
31 <input type="radio" name="cardtype" value="Master"/>Master
32 </td>
33 </tr>
34 <tr>
35 <td>卡号</td>
36 <td><input type="text" name="card"/></td>
37 </tr>
38 <tr>
39 <td colspan="2"><input type="submit" value="Submit"/></td>
40 </tr>
41 </table>
42 </form>
43 </body>
44 </html>
ProcessStep2Servlet .java:
package com.hnust.javaweb;
2
3 import java.io.IOException;
4 import javax.servlet.ServletException;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 public class ProcessStep2Servlet extends HttpServlet {
10 private static final long serialVersionUID = 1L;
11
12 protected void doPost(HttpServletRequest request, HttpServletResponse response)
13 throws ServletException, IOException {
14 //获取请求参数
15 String name = request.getParameter("name");
16 String address = request.getParameter("address");
17 String cardtype = request.getParameter("cardtype");
18 String card = request.getParameter("card");
19 //封装
20 Customer customer = new Customer(name, address, cardtype, card);
21 //放入
22 request.getSession().setAttribute("customers", customer);
23 //重定向到step3.jsp 页面,使用绝对路径
24 response.sendRedirect(request.getContextPath() + "/shoppingcart/step3.jsp");
25 }
26
27 }

注意要建一个 Customer 实体类,来封装 step2 里面的信息。代码就不贴了。

step3.jsp:

 <%@page import="com.hnust.javaweb.Customer"%>
2 <%@ page language="java" contentType="text/html; charset=UTF-8"
3 pageEncoding="UTF-8"%>
4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5 <html>
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8 <title>Insert title here</title>
9 </head>
10 <body>
11 <h4>Step3:订单确认</h4>
12 <%
13 String[] books = (String[]) session.getAttribute("books");
14 Customer cus = (Customer) session.getAttribute("customers");
15 %>
16 <table border="1" cellpadding="10" cellspacing="0">
17 <tr>
18 <td>顾客姓名</td>
19 <td><input type="text" value="<%= cus.getName() %>"/></td>
20 </tr>
21 <tr>
22 <td>地址</td>
23 <td><input type="text" value="<%= cus.getAddress() %>"/></td>
24 </tr>
25 <tr>
26 <td colspan="2">付款信息</td>
27 </tr>
28 <tr>
29 <td>信用卡类型</td>
30 <td><input type="text" value="<%= cus.getCardtype() %>"/></td>
31 </tr>
32 <tr>
33 <td>卡号</td>
34 <td><input type="text" value="<%= cus.getCard()%>"/></td>
35 </tr>
36 <tr>
37 <td colspan="2">订货项目</td>
38 </tr>
39 <tr>
40 <td></td>
41 <td>
42 <%
43 for(String book : books){
44 out.print(book);
45 out.print("<br>");
46 }
47 %>
48 </td>
49 </tr>
50 </table>
51 </body>
52 </html>

JavaWeb:HttpSession(一)的更多相关文章

  1. JavaWeb 后端 <四> 之 Cookie HttpSession 学习笔记

    一.会话管理概述 1.什么是会话? 好比一次通话.打开浏览器,点击多次链接(发出多次请求和收到多次的响应),关闭浏览器,这个过程就是一次会话. 有功能 可以  文件 新建会话 2.解决的问题是什么? ...

  2. Javaweb学习笔记——(十一)——————JSP、会话跟踪、Cookie、HttpSession

    JSP1.什么是JSP jsp即java server pages,它是Javaweb的动态资源. jsp = html + java脚本 + jsp动态标签(包含EL表达式)2.JSP中java脚本 ...

  3. 超全面的JavaWeb笔记day11<JSP&Session&Cookie&HttpSession>

    1.JSP 2.回话跟踪技术 3.Cookie 4.HttpSession JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态 ...

  4. JavaWeb之HttpSession

    时间:2016-11-17 22:33 --HttpSession一.HttpSession概述    1.HttpSession是由JavaWeb提供的,用来进行会话跟踪的类.    2.sessi ...

  5. JavaWeb学习笔记——开发动态WEB资源(八)cookies和httpsession

    会话: cookies: (1)cookies是WEB服务器发送到浏览器的简短文本信息 (2)cookies可以禁用 httpsession: 一次会话是从你打开浏览器开始到你关闭浏览器结束 提供一种 ...

  6. JavaWeb学习笔记-使用HttpSession对象跟踪会话

    使用HttpSession接口开发的步骤: 1.获取HttpSession对象 2.对HttpSession对象进行读写 3.手工终止HttpSession,或者自动终止 常用方法: getId(): ...

  7. JavaWeb——Listener

    一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色 ...

  8. Javaweb学习笔记——上传下载文件

    一.前言 在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为comm ...

  9. HttpSession

    (Cookie是用来设置浏览器保存数据的时间的: Session是只要浏览器不关闭,数据则会存在,一旦关闭浏览器数据即消失 ) 1. HttpSession概述 * HttpSession是由Java ...

随机推荐

  1. zabbix和elasticsearch数据表

    # uint mapping { "settings" : { "index" : { "number_of_replicas" : 1, ...

  2. 20155327 2017-2018-2 《Java程序设计》第一周学习总结

    20155327 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 三大平台: 1.Java SE:JVM,JRE,JDK,java语言 JVM:Java虚拟机 ...

  3. python基础学习1 -异常捕获

    #!/usr/bin/env python # -*- coding:utf-8 -*- #-------try-except try: file_name = input("请输入需要打开 ...

  4. java异常处理 日志记录异常具体位置的方法

    首先要在方法处抛出 Exception异常 然后在方法调用处try catch接收此异常对象 这样就能够记录异常具体位置了 控制台输出: 日志: 要点: System.getProperty(&quo ...

  5. Java并发工具类(三):控制并发线程数的Semaphore

    作用 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 简介 Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数 ...

  6. Java 图片处理解决方案:ImageMagick 快速入门教程

    文章首发于[博客园-陈树义],点击跳转到原文Java 图片处理解决方案:ImageMagick 快速入门教程. ImageMagick介绍 ImageMagick是一个免费的创建.编辑.合成图片的软件 ...

  7. H5拖拽 构造拖拽及缩放 pdf文件转换为html预览

    前言: 协助项目需要实现一个签名的功能. 功能说明:1.有文本签名和头像签名.2.头像签名需要实现可拖拽功能.3.需要展示的是pdf的文件并需要获取签名位于pdf文件的相对位置. 功能一:实现拖拽 思 ...

  8. Linux之linux入门

    学习linux之前先了解一下操作系统: 操作系统的定义:         操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内 ...

  9. c++引用与指针的关系

    目录 1.引用的概念及用法 2.引用做参数 3.引用做返回值 4.汇编层看引用的特性 5.引用和指针的区别和联系: 更多内容请移步专栏:https://blog.csdn.net/column/det ...

  10. Gitlab 403 forbidden 并发引起IP被封

    问题 在工作中自搭建的Gitlab.但今天打开页面的时候显示的是空白页面,上面还有一次文本Forbidden. 原因 Gitlab使用rack_attack做了并发访问的限制. 解决方案 将Gitla ...