JSP简明教程(四):EL表达式语言、JavaBean、Cookie、Session

EL表达式语言

EL就是Expression Language,目的是简化JSP的语法。来看几个例子就明白了。


${test} 会翻译成<%=test%>
${test.name} 会翻译成 <%=test.getName()%>
${sessionScope.username}} 会翻译成 <%=session.getAttribute("username")%>

只有sessionScope、requestScope等才会翻译成getAttribute("xxx"),而其他的对象,会翻译成getXXX()。


EL中还支持四则运算、逻辑运算,语法和Java中的一样。EL中有隐含对象:pageContext、pageScope、requestScope、sessionScope、applicationScope、param、paramValues、header、headerValues、cookie、initParam。param等价于request.getParameter,paramValues等价于request.getParameterValues,返回的是字符串数组。


Java Bean

JavaBean只是一种成熟的约定,很多框架依靠这个约定简化了很多数据。JavaBean和普通的类相比没什么特别之处,本质其实就是普通的Java类,也不需要特定的父类。只要符合下列规则的类就是JavaBean:
  • 有默认构造函数
  • 成员变量都是私有的,只能通过getXX和setXX来访问
  • 可序列化(implements Serializable。可选,在分布式系统中才有意义)

Cookie


Cookies就是保存在浏览器上的一小段文本,是一组键值对。Cookies中包含三个属性,过期时间、路径、域名,所以在HTTP应答中Cookie的样子如下:
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; path=/; domain=example.com
当客户端后续发送请求的时候就会加上Cookie: name=xyz。

Servlet中的Cookie类有以下方法:



JSP中可以向应答中添加多个Cookie,每个Cookie对象是一个键值对,可以往HTTP应答中写入多个Cookie。以下是一个示例:
Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(86400);
response.addCookie(cookie);

读取Cookie可以通过request.getCookies获取一个Cookie数组。由于可能存在多个Cookie名字相同的情况,因此不能直接通过名称直接获得相应的Cookie。

删除Cookie可以将maxAge设为0,然后调用response.addCookie加入到应答中。

Session

会话管理。HTTP是一个无状态的协议,所以服务器和浏览器需要一个方式来区分用户的身份。首先,浏览器向服务器发送一个请求,服务器检测Cookie中是否有会话ID。如果服务器“不认识”这个会话ID(或者找不到会话ID),那么服务器会创建一个新的唯一编号,放在Map中,Key就是这个新的会话ID,Value就是空的Session对象。浏览器记下Cookie,在后续的请求中都使用这个Cookie。如果服务器认识这个会话ID,那么服务器就会从Map中获取相应的Session对象。

sessionid可以放在Cookie中,也可以放在post表单中,也可以放在url中,比如http://example.com/page;JSESSIONID=45678943。

Session对象常用的方法如下:


Session的过期时间可以在web.xml文件中配置,单位为分钟,Tomcat中默认的超时时间是30分钟。
<session-config>
  <session-timeout>15</session-timeout>
</session-config>

Session和Cookie的区别。分析区别之前还是先弄清楚是什么导致了它们的不同。在HTTP刚发明的时候,还没有Session的概念,因此开发者只能将重要的数据保存在Cookie中。但是Cookie的数据是保存在浏览器中的,用户可以任意修改,非常不安全。因此有人提出了Session的概念,在Cookie中只保存一串随机生成的SessionID,服务器根据SessionID查找对应的数据,这样,重要的数据就保存在了服务器上,用户无法随意更改,因此比较安全。

JSP简明教程(四):EL表达式语言、JavaBean、Cookie、Session,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。