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. JQuery第一天——入门概述与选择器

    一.什么是JQuery 一个流行的js库 核心理念:write less , do more 优势:  轻量级 强大的选择器 出色的 DOM 操作的封装 可靠的事件处理机制 完善的 Ajax 出色的浏 ...

  2. 本地使用xshell连接本地虚拟机

    一.环境说明: 操作系统:win10 虚拟软甲:vmware破解版 终端工具:xshell 参考网址:[xshell连接本地虚拟机linux系统][注意事项][手动修改网络配置] 二.连接步骤: 1. ...

  3. PostgreSQL的索引膨胀

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页 索引膨胀,主要是针对B-tree而言. 索引膨 ...

  4. python基础学习1-翻译程序(连接到有道翻译网)

    #!/usr/bin/env python # -*- coding:utf-8 -*- 爬虫程序 import urllib.request#导入 网络连接模块 import urllib.pars ...

  5. 5322: [Jxoi2018]排序问题

    5322: [Jxoi2018]排序问题 链接 分析: 每次选一个出现次数最小的. 代码: #include<cstdio> #include<algorithm> #incl ...

  6. cvc-complex-type.2.4.a: Invalid content was found starting with element 'display-name'

    cvc-complex-type.2.4.a: Invalid content was found starting with element 'display-name'. One of '{&qu ...

  7. Django + Ansible 主机管理(有源码)

    本文给大家介绍如何利用 Django + Ansible 进行 Web 项目管理.   Django介绍 一个可以使 Web 开发工作愉快并且高效的 Web 开发框架,能够以最小的代价构建和维护高质量 ...

  8. XSS分类&危害&防御

    XSS(跨站脚本)漏洞是什么? 在网页中插入恶意的js脚本,由于网站没对其过滤,当用户浏览时,就会触发脚本,造成XSS攻击 XSS分类? 1.反射型 用户输入的注入代通过浏览器传入到服务器后,又被目标 ...

  9. maven scope属性值设置含义

    1.枚举各个属性值的含义 compile,缺省值,适用于所有阶段,会打包进项目. provided,类似compile,期望JDK.容器或使用者会提供这个依赖. runtime,只在运行时使用,如JD ...

  10. linux运维升级路线

    运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火) 之前写过运维 ...