//@WebServlet("/login")
User user=service.login(username,password);
request.getSession().setAttribute("user",user);
//@WebServlet("/myAccount")
User user = (User) request.getSession().getAttribute("user");
//head.jsp
<br><br><br>欢迎您: ${user.username}
/client/index.jsp
<%@include file="head.jsp"%>
//modifyuserinfo.jsp
<table cellspacing="0" class="infocontent">
<tr>
<td>
<table width="100%" border="0" cellspacing="2" class="upline">
<tr>
<td style="text-align:right; width:20%">会员邮箱:</td>
<td style="width:40%; padding-left:20px">${user.email }</td>
<td> </td>
</tr>
<tr>
<td style="text-align:right">会员名:</td>
<td style="padding-left:20px">${user.username }</td>
<td> </td>
</tr>
<tr>
<td style="text-align:right">修改密码:</td>
<td><input type="password" class="textinput" /></td>
<td><font color="#999999">密码设置至少6位,请区分大小写</font></td>
</tr>
<tr>
<td style="text-align:right">重复密码:</td>
<td><input type="password" class="textinput" /></td>
<td> </td>
</tr>
<tr>
<td style="text-align:right">性别:</td>
<td colspan="2">
<input type="radio" name="radiobutton" value="radiobutton" ${user.gender=='男'?'checked':'' }/> 男
<input type="radio" name="radiobutton" value="radiobutton" ${user.gender=='女'?'checked':'' }/> 女
</td>
</tr>
<tr>
<td style="text-align:right">联系方式:</td>
<td colspan="2">
<input name="text2" type="text" value="${user.telephone}" class="textinput" />
</td>
</tr>
<tr>
<td style="text-align:right"> </td>
<td> </td>
<td> </td>
</tr>
</table>
<p style="text-align:center">
<a href="success.html">
<img src="${pageContext.request.contextPath }/client/images/botton_gif_025.gif" border="0" width="140" height="35"/>
</a>
</p>
<p style="text-align:center"> </p>
</td>
</tr>
</table>
</td>
</tr>
</table>

request.getSession().setAttribute()和 request.setAttribute()
link
今天在写代码被session值给郁闷了很久,
一直想让adminid这个值在jsp页面全程都可以用,
但由于我一直用request.setAttribute(),
所以一直没有解决,害得我为了得到这个值费了好大的劲,
后来看了书才发现原来用request.getSession().setAttribute(),
adminid这个值全程传递,真的是失算啊。
request.getSession().setAttribute(“adminid”,adminForm.getAdminid())
把adminForm.getAdminid())返回值保存到session当前会话中,
名称为adminid,
只要当前会话不过期, 任何地方都可以访问到
request.setAttribute(“adminid”,adminForm.getAdminid())
把adminForm.getAdminid())的返回值保存到request当前请求中,
其他请求中无法访问
request.setAttribute()这个的生命周期就是request级别的
request.getSession().setAttribute这个的生命周期是session级别的
探讨下request的生命周期
1)
如果使用request.getRequestDispatcher().forward()
这种方式进行跳转页面,
前后页面共享一个request,
存储在request里面的数据也会一起发送过去下一个页面。
如果用response.sendRedirect()是重新定向,前后页面不是一个request。
你在页面中写的request,
当这个jsp页面被servlet容器编译成servlet,
再生成html流,
通过response输出到前端时生命周期才算结束,
你的request在编译、执行期间都是有效的,
这次请求响应的周期直到response.write才算结束。
不要弄混淆,
你写的JSP和用户在前端看到的并不是同一个东西,
JSP只是脚本,用户看到的是脚本解释执行后输出的结果
这次请求响应的周期直到response.write才算结束"
你的意思是当响应完成request才消失
request的生命周期
当从一个jsp发出一个request,
即表明了这个request生命周期的开始,
当到达action之后一般有两种处理request的方式,
一种为request.getDispatcher.forward(),
一种是response.sendRedirect().
一种为request.getDispatcher.forward(),
对于request的forward(),
该request的生命周期将会继续延续下去,
当采用forward如果到达JSP页面,
那么之前从第一个JSP页面中发送出来的request的消息将仍然存在,
新的页面同样能够取得该request里所包含的一些信息,
比如之前的JSP发送request中所包含的参数信息.
事实上,它们是同一个request.
而如果是使用response.sendRedirect(),
那么该request的生命周期将结束.
对于request,
对request信息的传递,只有setAttribute()这一个方法,
该方法将设置一个Object对象到request中.
但是,如果当一个request是从jsp从发出,
包含的信息段为param1=test这样的方式,
那么只能通过getParameter()得到,
getAttribute()是得不到param1的value的.
再次,对于JSP的EL表达式,
${}这中方式只能得到setAttribute中的值,因此当从一个JSP发送request到达action并且被forward到新的JSP中时,
如果想在该JSP中取得JSP发送时的参数信息需要写为
这种形式:${param.patam1}.
我们都知道jsp中传值
会涉及到 request,session,application这三个容器。
当我们想做一些缓存或者存储一些全局变量时,
就要考虑到它们的生命周期。
我们也有会疑惑一台计算机上打开同一WEB应用是否只产生一个session?
link
session的生命周期



会话作用域,
当用户首次访问时,产生一个新的会话,
以后服务器就可以记住这个会话状态。
生命周期:会话超时,或者服务器端强制使会话失效
打开一个浏览器请求一个网站的页面后,
Session开始,当session超过时间限制(一般是20分种)后,
session注销而失效或是人为使用session.invalidate();
使用session失效。
用浏览器打开一个web程序,
一个浏览器窗口就会有一个session,且是唯一的,
过了session的生存周期就没了,
或者是你关了窗口也就没了。
不同浏览器的session在计算机中并不是同一个。
是这样的,
SESSION的生命周期你可以理解为 和浏览器有关,
1.浏览器关闭SESSION生命周期结束。
2.但是如果你长时间不关闭浏览器,
SESSION的生命周期也会结束,
一般是三十分钟,
就是说浏览器一直开着,
三十分钟后SESSION的生命周期也会结束。
平时上网你注意下,
如果登录一个网站你长时间不动页面,
等过一会再刷新页面,页面会自动跳转到登录页面,
这个是SEESSION的生命周期结束的体现,
这个时间是可以设置的。 希望能帮到你。
session是在服务端的一段内存,
跟你开几个浏览器没关系。
假如你登录一个网站,
用两个页面打开,在其中的一个页面上进行推出操作,
那么另外一个页面也会退出网站。这个原理的话讲起来就复杂了
request
请求作用域,
就是客户端的一次请求。
比如访问某个页面,就是一次请求。
页面访问结束,该页面的request就结束了
ps
由上可知,
如果我们有一份比较大的数据想做缓存。
可以使用application 或者 session。
但是 application占用的是服务器的资源,
需要自己写数据清除。
session当用户缓存就比较简便,
占用的是客户端资源,会自动失效。
https://jingyan.baidu.com/article/cdddd41c80845f53cb00e193.html
Session生命周期及常用方法
1.新建如下文件
login.jsp 登录页面
hello.jsp 登录后获取session页面
logout.jsp 注销页面
2.login.jsp代码如下,
form表单提交username到hello.jsp,
并在回传的时候获取session中username的值
3.hello.jsp代码如下:输出username的值,并把username放入session中
4.logout.jsp 注销页面,注销session



