Session实例

Session常用方法(一)

session对象用来保存一些在与每个用户回话期间需要保存的数据信息,这样就方便了回话期间的一些处理程序。如可以用session变量记住用户的用户名,以后就不必在其他的网页中重复输入了。session对象的信息保存在服务器中,但ID保存在客户机的Cookie中,如果客户机不支持Cookie则转为URL重写,一般在使用session对象时不必考虑其实现的细节问题。

当用户关闭了所有某个web服务器上的网页时,则此服务器与客户机的session对象以及其变量会自动消失。

Session对象的方法

一、JSP实现

实例1  记住回话的用户名

新建sessionUserLogin.jsp,代码如下:

<%@ page contentType="text/html;charset=gb2312"%>
<script language="javascript">
 function on_submit(){//验证数据的合法性
     if (form1.username.value == ""){
             alert("用户名不能为空,请输入用户名!");
            form1.username.focus();
            return false;
        }
     if (form1.userpassword.value == ""){
            alert("用户密码不能为空,请输入密码!");
            form1.userpassword.focus();
            return false;
        }
 }
</script>
<%!
public String codeToString(String str){//处理中文字符串的函数
    String s=str;
    try{
        byte tempB[]=s.getBytes("ISO-8859-1");
        s=new String(tempB);
        return s;
}catch(Exception e){
        return s;
}
}
%>
<%
String username=request.getParameter("username");
String userpassword=request.getParameter("userpassword");
if(username!=null&userpassword!=null){
//如果用户名和密码都合法,则记下用户名,一般把用户和密码存在数据库中,
 //用数据库中的信息与提交的用户名和密码比较以进行用户合法性检查,
 //这些内容在后续章节中会继续学习
  session.setAttribute("username",codeToString(username));
  response.sendRedirect("sessionUserLogin1.jsp");
}
%>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<table aligin="center">
<form name="form1" method="post" action="sessionUserLogin.jsp"
onsubmit="return on_submit()">
<tr aligin="center">
<td>
用户登录
</td>
</tr>
<tr aligin="center">
<td>
请输入用户名:<input type="text" name="username" size="20">
</td>
</tr>
<tr aligin="center">
<td>
请输入密码:&nbsp;&nbsp;<input type="password" name="userpassword" size="20">
</td>
</tr>
<tr aligin="center">
<td>
<input type="submit" value="提交" name="B1">
<input type="reset" value="全部重写" name="B2">
</td>
</tr>
</form>
</table>
</body>
</html>

运行,然后输入,结果如下:

然后新建sessionUserLogin1.jsp,代码如下:

<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>用户登录成功</title>
</head>
<body>
用户登录成功!<br>
你的用户名是:<%=(String)session.getAttribute("username")%>
</table>
</body>
</html>

点击上面的“提交”,可以得到结果如下:

实例2  猜字母游戏

新建guessCharExample1.jsp,代码如下:

<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>猜字母游戏</title>
</head>
<body>
下面,我们一起来玩一个游戏:猜字母游戏<br>
游戏规则:电脑会随机自动生成一个字母,请你猜出这个字母是什么。字母忽略大小写。<br>
  <% String charString=new String("abcdefghijklmnopqrstuvwxyz");
     int charNumber=((int)(Math.random()*100)+1)%26-1;
     Character TempCharacter=new Character(charString.charAt(charNumber));
     session.setAttribute("TempCharacter",TempCharacter);
  %>
<BR>
<P>输入你所猜的字母:
   <FORM action="guessResultExample1.jsp" method="post" name=form>
       <INPUT type="text" name="guesschar" >
       <INPUT TYPE="submit" value="提交" name="submit">
   </FORM>
</body>
</html>

继续新建guessResultExample1.jsp,代码如下:

<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>猜字母游戏</title>
</head>
<body>
<%
String tempString=request.getParameter("guesschar");
String TempCharacter=session.getAttribute("TempCharacter").toString();
if(tempString!=null){
  if(TempCharacter.equalsIgnoreCase(tempString))
    out.println("恭喜你,你猜对了!");
  else
    out.println("你猜错了,加油哦!");
}
%>
<BR>
<P>输入你所猜的字母:
   <FORM action="guessResultExample1.jsp" method="post" name=form>
       <INPUT type="text" name="guesschar" >
       <INPUT TYPE="submit" value="提交" name="submit">
   </FORM>
<a href="guessCharExample1.jsp">重新开始游戏</a>
</body>
</html>

运行结果如下:

二、  Servlet实现

实例3 服务器实现一个sension为一个用户浏览器服务

服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。可以用如下的代码证明:

package yqq.request.study;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SessionDemo1 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setCharacterEncoding("UTF=8");
        response.setContentType("text/html;charset=UTF-8");
        //使用request对象的getSession()获取session,如果session不存在则创建一个
        HttpSession session = request.getSession();
        //将数据存储到session中
        session.setAttribute("data", "随意填写");
        //获取session的Id
        String sessionId = session.getId();
        //判断session是不是新创建的
        if (session.isNew()) {
            response.getWriter().print("session创建成功,session的id是:"+sessionId);
        }else {
            response.getWriter().print("服务器已经存在该session了,session的id是:"+sessionId);
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

第一次访问时,服务器会创建一个新的sesion,并且把session的Id以cookie的形式发送给客户端浏览器

运行结果如下:

可以看出,不同客户端(浏览器)访问结果的session的id不同,并且第一次访问为session创建成功,第二次访问服务器已经存在该session,同一浏览器多次访问id不变

关于session,未完待续......

参考资料 《java web轻量级开发全体验》

参考网址  http://www.cnblogs.com/xdp-gacl/p/3855702.html

时间: 2024-12-17 03:38:15

Session实例的相关文章

用 memcached 实现 Tornado 的 session 支持(一)

tornado 里面没有 session?不,当然有~我知道 github 上肯定有人帮我写好了~ O(∩_∩)O~ 于是乎,找到下面这个项目,用 memcached 实现 tornado 的 session.光会用可不行啊,让我们看看是怎么写的~ 项目地址:tornado-memcached-sessions 让我们先从 demo 看起.... app.py 中: 首先可以注意到,这里定义了一个新的 Application 类,继承于 tornado.web.Application, 在该类的

转:通过Spring Session实现新一代的Session管理

长期以来,session管理就是企业级Java中的一部分,以致于我们潜意识就认为它是已经解决的问题,在最近的记忆中,我们没有看到这个领域有很大的革新. 但是,现代的趋势是微服务以及可水平扩展的原生云应用(cloud native application),它们会挑战过去20多年来我们设计和构建session管理器时的前提假设,并且暴露了现代化session管理器的不足. 本文将会阐述最近发布的Spring Session API如何帮助我们克服眼下session管理方式中的一些不足,在企业级Ja

Session案例:简易的购物车

三个jsp和两个Servlet组成:在WebContent下边建立一个shoppingcart文件夹,将三个jsp文件放在里面: 1.建立一个step1.jsp文件,出现一个表格,是一个复选框,可以选择要购买的书籍,完毕后,点击Submit,跳转到Servlet类 ProcessStep1Servlet里面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding=

会话跟踪技术--cookie和session 小结

学习过servlet的都知道,servlet是单例多线访问的,所以我们不能设置servlet成员变量来存放浏览器的访问数据.怎么解决浏览器的访问数据,让不同访问者能够访问到自己的数据呢? 相信学习完了cookie和session技术之后,读者会明白这个问题. 我们在浏览器上使用http协议在网络上传输数据的时候,服务器对于http的状态处理有两个方式,cookie和session. 笔者对于cookie设session的理解是这样的:当我们想要记录浏览器与服务器之间的交互的时候,通常的方法就是

基于ZooKeeper的分布式Session实现(转)

1.   认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被动 物所观赏.为了让各种不同的动物呆在它们应该呆的地方,而不是相互串门,或是相互厮杀,就需要动物园管理员按照动物的各种习性加以分类和管理,这样我们才 能更加放心安全的观赏动物.回到我们企业级应用系统中,随着信息化水平的不断提高,我们的企业级系统变得越来越庞大臃肿,性能急剧下降,客户抱怨频频.拆 分系

Hibernate中Session之get和load方法的真正区别

最近在学习SHH框架中的hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入很大.主要是对get方法的说法跟实际运行的结果不一致. 先说一下观点吧: get不支持lazy,load支持lazy: 数据不存在时,get返回null,load则抛出ObjectNotFoundException异常. load方法可以返回实体的代理类实例,而get方法直接读取数据库,所以直接返回

[原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

tomcat session共享: 同tomcat不同项目之间的session共享

有时我们会遇到一个大点的项目,为了方便实现有些功能,我们会把项目拆成不同的独立web项目. 但我们在管理这些项目时,只有一个登陆口,然后在其他项目取session来实现身份的验证. 查看tomcat 关于 HTTP Connector中有个emptySessionPath 其解释如下: If set to true, all paths for session cookies will be set to /. This can be useful for portlet specificati

用 memcached 实现 Tornado 的 session 支持(二)

客官您终于回头了!让我们本着探(zuo)索(si)精神把 session.py 看完吧... 首先看看需要的库: pickle 一个用于序列化反序列化的库(听不懂?你直接看成和 json 一样作用就行了...) hmac 和 hashlib 用于生成加密字符串 uuid 用于生成一个唯一 id memcache  Python 的 memcache 客户端 这里面有三个类,SessionData Session 和 SessionManager.先看最简单的 SessionData. Sessi