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. 小米路由器设置端口转发远程登录WEB管理页及安装MT工具箱

    1. 将小米路由器ROM升级到开发版 这一点是必须的,如果是稳定版是不行的 2. 获取高级管理权限 再次确认当前使用的是开发版ROM 到这个网址http://d.miwifi.com/rom/ssh ...

  2. JavaWeb基础—HttpServletResponse

    HttpServletResponse对象代表服务器的响应. 这个对象中封装了向客户端发送数据.发送响应头,发送响应状态码的方法. 几个方法: 向客户端发送数据: getOutputStream() ...

  3. stat命令的实现-mysate 20155239吕宇轩

    stat命令的实现-mysate 20155239吕宇轩 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep -r的使用 伪代码 产品代码 mystate. ...

  4. OracleLinux安装说明

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL杂记页     回到顶级页面:PostgreSQL索引页 [作者 高健@博客园  luckyjackgao@gmail. ...

  5. mfc 形式参数初始化

    初始化函数形参 int add(int a,int b) { return a+b; } add(,); ,,char*s=NULL) { printf("a=%d,b=%d,c=%d\n& ...

  6. 微信小程序:设置页面计时自动跳转

    一.功能描述 当出发某一事件后,希望在规定的时间后自动执行另一事件,比如页面跳转功能. 二.代码实现 使用setTimeout函数,单位为毫秒ms setTimeout(function(){ wx. ...

  7. CodeForces 915D Almost Acyclic Graph

    Description You are given a directed graph consisting of \(n\) vertices and \(m\) edges (each edge i ...

  8. 实现对象属性的lazy-loading(延迟加载)

    一.延迟加载器LazyLoader作用:       说到延迟加载,应该经常接触到,尤其是使用Hibernate的时候,本篇将通过一个实例分析延迟加载的实现方式.LazyLoader接口继承了Call ...

  9. WCF 学习笔记一

    wcf服务的细节: 1.新建项目的时候有wcf服务应用程序和wcf服务库,两者区别在于前者可以寄宿在IIS上,而后者只能给其他项目使用,可以寄宿在控制台程序.窗体程序等等. 相关定义的链接 http: ...

  10. cpp-variable-lifetime

    #include <cstdio> #include <iostream> using namespace std; class TmpClass; void FuncScop ...