重温httpsession①
Session—HTTPSession 服务器创建的,Javaweb提供的 与HTTP协议无关是服务器端对象,保存在服务器端。用来会话跟踪。
Cookie与服务器创建,与HTTP协议相关,保存在客户端上面。
SerVlet三大域对象
Request 多个 一次一个
Session 一个用户打开浏览器开始到关闭。一个用户一个Session
底层依赖于cookie 或是url重写。
服务器一方可以存放多个Session 放在一个map中
Servlet中得到Session对象 HTTPSession Session=request.getSession();
Jsp中得到Session对象:Session是jsp的内置对象,不用创建即可使用
Cookie底层不能跨浏览器。
|
<body> 保存Session. <br> <% session.setAttribute("aaa", "AAA"); %> </body> <body> 获取Session. <br> <% String s=(String)session.getAttribute("aaa"); %> <%=s %> </body> |
第二个例子
action="<%=path%>/LoginServlet"
重定向时我们的servlet的路径不显示在地址栏中。
重定向是使用 response.sendRedirect("必须得些项目名");
可以是本项目以外的路径。两次请求,不存在request域
转发时会看到servlet的路径,不用加项目名,必须是本项目内的路径
request.setAttribute("message", "用户名或密码错误");
request.getRequestDispatcher("anli/error.jsp").forward(request, response);
存在request域。一次请求
保存cookie用response
拿到cookie使用request 注意判断是否为空
|
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String username=request.getParameter("username"); String password=request.getParameter("password"); if (username.equals("124")&&password.equals("zhangsan")) { Cookie cookie=new Cookie("uname", username); cookie.setMaxAge(60*60); response.addCookie(cookie); HttpSession session=request.getSession(); session.setAttribute("username", "124"); session.setAttribute("password", "zhangsan"); request.getRequestDispatcher("anli/success1.jsp").forward(request, response); }else { request.setAttribute("message", "用户名或密码错误"); request.getRequestDispatcher("anli/login.jsp").forward(request, response); } } <body> This is my JSP page. <br> <h1>登陆页面</h1> <% String uname=""; Cookie[]cookies=request.getCookies(); if(cookies!=null){ for(Cookie c:cookies){ if("uname".equals(c.getName())){ uname=c.getValue(); } } } %> <% String message=""; String mes=(String)request.getAttribute("message"); if(mes!=null){ message=mes; } %> <font color="red"><b><%=message %></b></font> <form action="<%=path%>/LoginServlet" method="pot"> <!-- 获取cookie中的uname的值放到用户名文本框中 --> 用户名:<input type="text" name="username" value="<%= uname%>"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="提交"> </form> </body> |
Session的原理
Jssessionid
Jsp自动创建Session,servlet不自动创建
其他方法:getId()
Invalidate()
isNew()
重温httpsession①的更多相关文章
- 重温Java Web的技术细节
目录 一.背景 二.请求与响应 2.1.Http请求 2.2.Http响应 三.ServletConfig 3.1 测试ServletConfig参数 四.ServletContext 4.1 测试S ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- HttpSession与Hibernate中Session的区别
一.javax.servlet.http.HttpSession是一个抽象接口 它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是用户 ...
- 被我们忽略的HttpSession线程安全问题
1. 背景 最近在读<Java concurrency in practice>(Java并发实战),其中1.4节提到了Java web的线程安全问题时有如下一段话: Servlets a ...
- 重温Servlet学习笔记--session对象
session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端. HttpSession是servle ...
- 重温JSP学习笔记--三大指令九大内置对象
最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记: JSP三大指令: ...
- HttpSession
(Cookie是用来设置浏览器保存数据的时间的: Session是只要浏览器不关闭,数据则会存在,一旦关闭浏览器数据即消失 ) 1. HttpSession概述 * HttpSession是由Java ...
- JSP中的 HttpSession、pageContext对象
pageContext 隐含对象对应javax.servlet.jsp.PageContext,都自动的被加入至pageContext中, 您可以由它来取得与JSP相关的对应之Servlet对象,像是 ...
- 解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译)
解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译) http://improve.dk/orcamdf-studio-release-feature-recap/ ...
随机推荐
- 邮局加强版:四边形不等式优化DP
题目描述 一些村庄建在一条笔直的高速公路边上,我们用一条坐标轴来描述这条公路,每个村庄的坐标都是整数,没有两个村庄的坐标相同.两个村庄的距离定义为坐标之差的绝对值.我们需要在某些村庄建立邮局.使每个村 ...
- 【Ansible 文档】【译文】模式
Patterns 模式 Ansible中的模式是指我们如何决定那些机器执行管理操作.这里意味着与那些主机通信,但是对于playbook,它是指哪些主机应用特定的配置或执行特定程序. 我们将重温一下In ...
- 为什么重写equals必须重写hashcode?
示例代码: class User { private String name; public User(String name) { this.name = name; } @Override pub ...
- docker pull下载镜像时的报错及其解决方法
使用docker pull从镜像仓库拉取镜像时报错如下: [root@docker-registry ~]# docker pull centos Using default tag: latest ...
- Python2.7-time
time模块,与datetime模块功能有所重合,time较为简单明了,若只需要当前时间或日期或是sleep,直接用time模块,需要更复杂的时间间隔等情况用datetime模块更好 1.获得time ...
- Android使用动态代理搭建网络模块框架
1.Java中的动态代理相信大多数朋友都接触过,在此就不再赘述,如果有不明白的朋友,可以到网上搜一下(一搜一大堆,呵呵..) 2.本节主要阐述一下如何使用动态代理框架实现Android应用的瘦身开发. ...
- Loopback接口用途---用作管理地址。
Loopback接口的优点是永远不会down点,不管是链路断开还是网卡损坏.因而loopback接口有很高健壮性. 但是loopback并非实际网口,外部设备要与该口通信,必须经过实际口的路由实现. ...
- Centos7 搭建Go语言编译环境
1.准备工作 下载Go:https://studygolang.com/dl 2.安装Go [root@node2 local]# .linux-amd64.tar.gz -C /usr/local/ ...
- (.DS_Store)避免多人提交代码到GitHub上起冲突
在多人合作的项目里,git pull origin master执行完之后出现以下问题: Auto-merging .DS_Store CONFLICT (content): Merge confli ...
- kettle学习笔记(三)——kettle资源库、运行方式与日志
一.kettle资源库 资源库是用来保存转换任务的,用户通过图形界面创建的的转换任务可以保存在资源库中. 资源库可以使多用户共享转换任务,转换任务在资源库中是以文件夹形式分组管理的,用户可以自定义文件 ...