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>
请输入密码: <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
Session实例的更多相关文章
- Laravel 5.1 中 Session 数据存储、访问、删除及一次性Session实例教程
1.Session的由来及其实现 HTTP协议是无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的.也就是说我们无法在服务器端确认两次请求是否是同一个用户所为,这为我们在一些应用场景中实现 ...
- Django Redis验证码 密码 session 实例
1.settings CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCach ...
- Django操作session实例
session项目文件: templates模板: login.html {% load static %} <!DOCTYPE html> <html lang="en& ...
- JavaWeb -- Session实例 -- 自动登录 和 防止表单重复提交(令牌产生器) MD5码
1. 自动登录 http://blog.csdn.net/xj626852095/article/details/16825659 2. 防止表单重复提交 表单Servlet //负责产生表单 pub ...
- 关于NHibernate中存在于Session中实例的3种状态的简单分析
在使用NHibernate的时候.在Session中会有3种状态. 1. 瞬时状态 (Transient) 由 new 命令开辟内存空间的对象,也就是平时所熟悉的普通对象. 如: Student st ...
- Hibernate 系列 05 - Session 类
引导目录: Hibernate 系列教程 目录 前言: Session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session息息相关. 就如同在编写JDBC时需要关 ...
- Hibernate Session中的save(),update(),delete(),saveOrUpdate() 细粒度分析
Hibernate在对资料库进行操作之前,必须先取得Session实例,相当于JDBC在对资料库操作之前,必须先取得Connection实例, Session是Hibernate操作的基础,它不是设计 ...
- hibernate中SessionFactory与Session的作用
首先,SessionFactory是线程安全的,SessionFactory用到了工厂模式. 其创建和销毁需要耗费很大的资源,所以一个应用中的一个数据库一般只对应一个sessionfactory. S ...
- ASP.NET Core 使用 Redis 和 Protobuf 进行 Session 缓存
前言 上篇博文介绍了怎么样在 asp.net core 中使用中间件,以及如何自定义中间件.项目中刚好也用到了Redis,所以本篇就介绍下怎么样在 asp.net core 中使用 Redis 进行资 ...
随机推荐
- IOS设计模式第八篇之键值观察模式
版权声明:原创作品,谢绝转载!否则将追究法律责任. 键值观察模式: 在KVO,一个对象可以要求被通知当他的某个特殊的属性被改变了.自己或者另一个对象.如果你感兴趣你可以阅读更多的信息参考: Apple ...
- Git学习之Git 暂存区
============================= 修改文件后是否可以直接提交 ============================ (1) 向文件中追加一行内容 $ echo &quo ...
- MFC 三种消息
在MFC应用程序中传输的消息有三种类型:窗口消息.命令消息和控件通知. (1)窗口消息:WM_XXX 窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口.绘制窗口和销毁窗口 ...
- 开发常见错误之 :Missing artifact com.sun:tools:jar 1.7.0
Missing artifact com.sun:tools:jar 1.7.0 解决办法一: 手动配置pom.xml,添加一个dependency如下: <dependency> < ...
- [Sdoi2016]齿轮
4602: [Sdoi2016]齿轮 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 613 Solved: 324 [Submit][Status ...
- EJBCA的安装(基于Ubuntu 16.04 LTS + wildfly8 + ejbca6.3.11 + jdk7)
前一段时间折腾了一下PKI,用EJBCA在研究院内网搭建了一个CA,目前是提供给手机端(安卓和IOS)来和服务器端(nginx + Java应用)做安全连接的(客户端和服务器端双向认证) 由于EJBC ...
- OpenCV获取IP摄像头视频
从开源中国博客搬来,合并博客 实验室做一个智能小车的小项目,期间涉及到在PC端处理小车摄像头的视频.这里先用安卓手机代替一下进行试验.大致流程就是手机摄像头获取视频,开启一个IP摄像头服务软件,在局域 ...
- ssh免密码登录之ssh-keygen的用法
A服务器:192.168.100.2 B服务器:192.168.100.3 要达到的目的:A服务器ssh登录B服务器不需要输入密码 1.在A服务器下使用ssh-keygen命令生成公钥/私钥密钥对,执 ...
- 【CF932F】Escape Through Leaf 启发式合并set维护凸包
[CF932F]Escape Through Leaf 题意:给你一棵n个点的树,每个点有树形ai和bi,如果x是y的祖先,则你可以从x花费$a_x\times b_y$的费用走到y(费用可以为负). ...
- Html5游戏框架createJs组件--EaselJS(二)绘图类graphics
有端友问我是否有文档,有确实有,但没有中文的,只有英文的,先提供浏览地址供大家参考学习createJs英文文档. EaselJS其实主要就是createJ ...