12.1

 今天学了

创建处理文件

保存用户信息
用户在登录网站之后,在访问网页的过程中随时都可能使用用户信息。要想随时访问
用户信息,需要把用户信息保存起来,如果不保存,用户输入的信息就只能在登录处理的
时候使用,在其他地方不能使用。原因是 Web 应用采用的是无状态的请求/应答模式,客户
端通过浏览器发送请求,服务器对客户端进行响应,但是不会保存客户端的信息。

 在JSP 中提供了几种保存信息的方式:可以保存在当前页面,但是只能在当前页面使用;
可以保存在请求对象(每次请求都会创建这样一个对象)中,但是只能在这次请求中使用,请
求对象是在服务器接收到请求后创建的,对客户端进行响应之后就没有了;可以保存在会
话对象中,每个用户对应一个会话对象,当用户访问第一个网页的时候,服务器为这个用
户创建一个会话对象,在用户的访问过程中一直有效,当用户关闭网页的时候,会话对象
就删除了;还可以保存在应用对象中,这个对象是 Web 应用的所有用户共享的。
这 4 个对象分别对应下面的 4 个内部对象:pageContext、request、session 和 application。
这几个对象都可以直接使用,不用创建。
根据这 4 个对象的作用范围,要保存个人信息,应该使用 session。如果使用 pageContext
和 request,则作用范围太小;如果使用 application,则这个信息就会共享,产生冲突。
要把信息保存到 session 中,可以使用标准标签库中的<c:set>标签。
<c:set>标签的语法格式为:
<c:set var="变量名" value="变量的值" scope="作用范围"/>
该标签相当于创建了一个变量,var 指出变量的名字,value 指出变量的值,scope 指出
变量的作用范围,也就是把变量存放在什么地方,取值可以是 page、request、session 和
application。
现在需要把用户名保存到 session 中,所以使用下面的代码:
<c:set var="username" value="${param.username}" scope="session"/>
在 session 中保存这个信息使用的名字是 username,值来自于用户的输入。修改后的代
码如下:
<%@ page contentType="textml;charset=GB2312"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:if test="${param.username=="zhangsan" && param.userpass=="wangwu"}">
 <c:set var="username" value="${param.username}" scope="session"/>
 登录成功!
</c:if>
<c:if test="${param.username!="zhangsan" || param.userpass!="wangwu"}">
 登录失败!
</c:if>
通常,存储在 page 中的信息在文件执行完毕后就会被系统自动释放;存储在 request
对象中的信息在请求结束后就会被自动释放;而存在 session 中的信息,只有当用户离开网
站或者 session 无效的时候才会被释放;存储在 application 中的信息,只有当网站的服务器
关闭的时候才会被释放。如果用户的这些信息在后续的访问过程中已经没有用了,我们应
该释放这些资源。
JSP 提供了删除存储在这些作用范围内信息的标签<c:remove>,该标签的格式如下:
<c:remove var="变量名"
 [scope="{page|request|session|application}"]
/>
var 属性指出要删除的变量的名字,还可以使用 scope 属性指出要删除哪个作用范围内 

的对象。
假设要删除存储在 session 中的变量 result,可以使用下面的代码:
<c:remove var="result"
scope="session"

原文地址:https://www.cnblogs.com/dty602511/p/14173724.html