Java WEB开发实战 之 第三部分:Servlet开发(4)【私塾在线原创】

前面已经学过HTTP是无状态的
1:每个请求和响应信息的连接都是独立的
2:从一个请求到另一个请求(同一个用户),HTTP服务器会忘记以前的请求
那么现在想要让服务器能够保持状态,记得以前的请求,该怎么办呢?会话(HttpSession)就用来解决这个问题
那么,会话是什么呢?
会话是一种在Web服务器端为客户端保存状态(数据)的机制,Web容器可为每个用户保存一个“会话对象”
HttpSession是跟客户端对应的,一个客户端一个,那么客户端如何区分呢?其实就是一个IE表示一个客户端,在同一台机器上,开两个IE算做不同的客户端。从一个IE窗口弹出的IE窗口,还是算做一个客户端
HttpSession能干什么呢?
很简单,就是在服务器端为客户端保存数据
 

java代码:
HttpSession接口
getID() :String
isNew() :boolean
getAttribute(name):Object
setAttribute(name,value)
removeAttribute(name)
Servlet可通过HttpServletRequest访问会话对象,可以在会话对象中存储及访问任意数量的对象
HttpServletRequest接口
getSession(create:boolean)
getSession()
获取HttpSession对象
HttpSession session = request.getSession();
存储会话属性
session.setAttribute(“test”, “javass”);
n访问会话属性
String name = (String) session.getAttribute(“test”);
销毁会话(有两种办法)
1:可使用部署描述符控制所有会话的生命周期
  10
 
2:直接使用HttpSession接口控制特定会话对象的生命周期

java代码:
invalidate()
getCreationTime() :long
getLastAccessedTime() :long
getMaxInactiveInterval() :int
setMaxInactiveInterval(int)
 
几点说明
1:会话对象由同一个应用中的多个servle共享
2:会话对象不能被同一个Web容器中的多个Web应用共享
3:使用invalidate 方法销毁一个会话,可能引起其它servlet冲突
示例:实现登录检查,如果没有登录,跳回到登录页面,如果已经登录就取出登录人的信息,并显示欢迎信息
 
示例:购物车的实现
HTTP允许一个Web服务器在客户机器上存储信息,由Web服务器存储在客户机器上的信息称为Cookies
几点说明:
1:Cookies在Web服务器的响应中发出
2:Cookies存储在客户的计算机上
3:Cookies被存储在指定给Web服务器域名的一个划分中,其可在域中按“路径”进一步划分
4:该域(及路径)的所有Cookies在每一个请求中均发送给Web服务器
5:Cookies具有生命周期,且在生命周期的最后由客户浏览器清除
Cookie类

java代码:
name : String <>
value : String <>
comment : String <>
domain : String <>
path : String <>
maxAge : int <>
Cookie(name,value)
 
HttpServletRequest接口
getCookies() : Cookie[]
 
HttpServletResponse接口
addCookie(Cookie)
通过将Cookies加到响应对象中,可将其存储在客户计算机上

java代码:
String name = request.getParameter("firstName");
Cookie c = new Cookie("yourname", name);
response.addCookie(c);
 
可从请求对象中检索Cookies

java代码:
Cookie[] allCookies = request.getCookies();
for ( int i=0; i < allCookies.length; i++ ) {
      if ( allCookies[i].getName().equals(“yourname”) ) {
             name = allCookies[i].getValue(); 
      }
}
 
由于用户可能将浏览器的Cookie关掉,从而导致Cookie不可用
Cookie不能使用时,可使用URL重写
所谓URL重写,就是在每个URL后面追加jsessionid的数据,服务器将此标识符与其存储的有关会话数据相关联
示例:http://host/path/file;jsessionid=123
如何实现呢? 
使用响应对象的encodeURL方法可确保URL包含会话ID信息,示例如下:
例如,FORM标记中的ACTION属性编码:
 out.println(“”);
 out.println(““);
 out.println(“”);
一个HTTP响应可使用400–500范围内的状态代码指明一个服务器错误,常见错误如下:

java代码:
404/error/404.html

缺省情况下, Web浏览器会给用户显示一些信息,该信息通常由浏览器而不是Web服务器生成
Servlet内部发生错误,会抛出ServletException
使用error-page元素声明一个给定HTTP状态码的处理器:

java代码:
404/error/404.html
可以声明任意数量的错误页面,但一个给定的状态码只能对应一个页面
使用exception-type元素声明给定Java异常的处理器

java代码:

        java.lang.ArithmeticException
 /error/ExceptionPage
可以声明任意数量的错误页面,但一个给定的异常类型只对应一个页面
这些处理方式好吗?
 
 视频配套PPT,视频地址【   Java WEB开发实战视频课程 】

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26715443/viewspace-717365/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26715443/viewspace-717365/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值