(1)当运行Servlet时,碰到“空指针异常”错误怎么处理? 答:应提示用户操作有误,或设置对象值为空字符串或一个默认值,或是不执行某操作,直接跳转到其他处理中。 (2)谈谈你对JSP中Session的理解。 答:session对象实现了HttpSession接口,用于保存每个用户的状态。session对象保存在容器里,sessionId通过Cookie在服务器和客户端之间往返发送。如果客户端不支持Cookie,就自动转换为使用URL重写。 一般情况下,客户端首次访问Web应用时,容器为其创建session对象,session对象具有一个唯一的ID。在容器对首次访问的响应中,容器将这个唯一的ID通过Cookie方式发送到客户端浏览器。浏览器在后续的每次访问时会把Cookie发送到服务器,容器从Cookie中获得sessionId,根据sessionId在容器中找到该用户的session。因此,一个用户的多次HTTP请求对应的是同一个session对象。 session的超时:一方面,由于容器要保存和管理session对象,这会占用系统资源;另一方面,为了安全的原因,如果用户没有正常退出系统,用户应该经过一段时间后能够自动退出系统。因此,session是会超时的,当session超时后,session对象和session对象上的属性就被容器销毁了。
(1)简述基于Cookie的登录系统的实现原理。 (2)比较当选择“保存”或“不保存”时提交,然后关闭浏览器,然后重新打开浏览器输入http://localhost:8080/work.jsp,结果有什么不同?为什么? 答: (1)第一次访问网站的时候,浏览器发出请求,服务器响应请求后,会将cookie放入到响应请求中(通过Set-Cookie字段),在浏览器第二次发请求的时候,会把cookie带过去,服务端会辨别用户身份,当然服务器也可以修改cookie内容。 (2)当选择保存,关闭浏览器,再重新打开浏览器时,输入localhost:8080/work.jsp可直接进入work.jsp页面;而选择不保存时,直接输入localhost:8080/work.jsp会报500内部服务器错误,之后重定向到登录页面。 当选择保存时,服务器生成cookie返回给浏览器,浏览器存储该cookie,在有效期内,使用同一浏览器登录同一网站,可直接访问;而不保存cookie时,服务器虽生成cookie且响应给了浏览器,但该cookie只在该次会话中有效,关闭浏览器,cookie被清除,下次再使用同一浏览器登录该网站,由于浏览器未找到该网站的cookie信息,故直接访问work.jsp页面报错。