异常处理
1.服务器是所有服务端组件调用的入口,
因此服务端代码抛出的异常最终都可以由服务器捕获到并统一处理
2.统一处理异常的方式:
1)在web.xml中进行配置
*<error-page><exception-type></exception-type><location></location></error-page>
指定某类型的异常对应某错误页面
*<error-page><error-code></error-code><location></location></error-page>
指定某编号的异常对应某错误页面
2)哪个异常跳转到哪个页面
3)当服务器捕获到异常时,他会自动转发到对应的错误页面,
服务器在做此转发行为时,会自动补充项目名因此转发页面的绝对路径不需要加项目名
状态管理
1.存数据的特殊要求;
1)跨请求:不能用request
2)支持并发:不能用ServletConfig和ServletContext
3)Cookie和Session可以解决此类需求
2.Cookie
1)将数据保存在浏览器上
2)优点:服务器压力小
3)缺点:数据不安全,容易被篡改
3.Session
1)将数据保存在服务器上
2)优点:安全,数据无法被篡改
3)缺点:服务器压力大 +
4.Cookie和Session存储数据的方式:
*按照客户来存数据,即一个浏览器单独存一份数据
*以IP+浏览器为key存数据,可将多个浏览器的数据分开,互不影响
*他们内部存储的数据可以跨请求
*总结:Cookie和Session中存储的数据,往往能够标识用户的某种特定状态(如登录),
可以理解为它们内部存的是一种状态数据,因此将这种存储数据的方案为状态管理
由于HTTP协议是无状态的(一次请求一次连接,连完即断),为了记录状态提出来Cookie和Session,
它们实际上就是HTTP协议的补丁
5.Cookie的使用
1)创建: Cookie c=new Cookie("name","value");
2)发送给浏览器: res.addCookie(c);
3)Java获取Cookie: req.getCookies();
4)EL表达式获取Cookie: ${cookie.key.value }
5)获取Cookie的名和值:cookie.getName cookie.getValue
6)修改Cookie
*获取客户端发送的所有Cookie
*根据name查找到要修改的Cookie
*cookie.setValue("要改成的值")
*将修改后的Cookie发送回浏览器
7)生存时间
*未设置生存时间时它存到浏览器内存中,设置后存到硬盘上,达到这个时间时浏览器会自动删除它
*cookie.setMaxAge(秒数);
8)保存中文
*URLEncoder.encode("中文","编码方式");将中文转成ASCII字符
*URLDecoder.decode(c.getValue(),"解码方式") ;将ASCII字符转成中文
9)路径问题
*默认Cookie的有效路径是创建Cookie页面的父路径及其下级路径
*c.setPath("路径名");可以设置Cookie的有效路径
10)限制
*Cookie可被用户禁止
*Cookie只能保存少量数据,大概4kb
*Cookie的个数是有限制的
*Cookie只能保存字符串
*Cookie会将状态保存在浏览器端,不安全,对于敏感数据需要加密后再使用Cookie保存
6.Session的使用(依赖Cookie)
1)Session的获取:req.getSession();
2)设置值:session.setAttribute("name",value); session中可以存储任意类型的数据
3)获取值:session.getAttribute("name");
4)移除值:session.removeAttribute("name");
5)删除Session对象:Session.invalidate();
6)修改Session的缺省时间,默认30分钟
*session.setMaxInactiveInterval(时间);
*<session-config>
<session-timeout>1</session-timeout>
</session-config>
1.服务器是所有服务端组件调用的入口,
因此服务端代码抛出的异常最终都可以由服务器捕获到并统一处理
2.统一处理异常的方式:
1)在web.xml中进行配置
*<error-page><exception-type></exception-type><location></location></error-page>
指定某类型的异常对应某错误页面
*<error-page><error-code></error-code><location></location></error-page>
指定某编号的异常对应某错误页面
2)哪个异常跳转到哪个页面
3)当服务器捕获到异常时,他会自动转发到对应的错误页面,
服务器在做此转发行为时,会自动补充项目名因此转发页面的绝对路径不需要加项目名
状态管理
1.存数据的特殊要求;
1)跨请求:不能用request
2)支持并发:不能用ServletConfig和ServletContext
3)Cookie和Session可以解决此类需求
2.Cookie
1)将数据保存在浏览器上
2)优点:服务器压力小
3)缺点:数据不安全,容易被篡改
3.Session
1)将数据保存在服务器上
2)优点:安全,数据无法被篡改
3)缺点:服务器压力大 +
4.Cookie和Session存储数据的方式:
*按照客户来存数据,即一个浏览器单独存一份数据
*以IP+浏览器为key存数据,可将多个浏览器的数据分开,互不影响
*他们内部存储的数据可以跨请求
*总结:Cookie和Session中存储的数据,往往能够标识用户的某种特定状态(如登录),
可以理解为它们内部存的是一种状态数据,因此将这种存储数据的方案为状态管理
由于HTTP协议是无状态的(一次请求一次连接,连完即断),为了记录状态提出来Cookie和Session,
它们实际上就是HTTP协议的补丁
5.Cookie的使用
1)创建: Cookie c=new Cookie("name","value");
2)发送给浏览器: res.addCookie(c);
3)Java获取Cookie: req.getCookies();
4)EL表达式获取Cookie: ${cookie.key.value }
5)获取Cookie的名和值:cookie.getName cookie.getValue
6)修改Cookie
*获取客户端发送的所有Cookie
*根据name查找到要修改的Cookie
*cookie.setValue("要改成的值")
*将修改后的Cookie发送回浏览器
7)生存时间
*未设置生存时间时它存到浏览器内存中,设置后存到硬盘上,达到这个时间时浏览器会自动删除它
*cookie.setMaxAge(秒数);
8)保存中文
*URLEncoder.encode("中文","编码方式");将中文转成ASCII字符
*URLDecoder.decode(c.getValue(),"解码方式") ;将ASCII字符转成中文
9)路径问题
*默认Cookie的有效路径是创建Cookie页面的父路径及其下级路径
*c.setPath("路径名");可以设置Cookie的有效路径
10)限制
*Cookie可被用户禁止
*Cookie只能保存少量数据,大概4kb
*Cookie的个数是有限制的
*Cookie只能保存字符串
*Cookie会将状态保存在浏览器端,不安全,对于敏感数据需要加密后再使用Cookie保存
6.Session的使用(依赖Cookie)
1)Session的获取:req.getSession();
2)设置值:session.setAttribute("name",value); session中可以存储任意类型的数据
3)获取值:session.getAttribute("name");
4)移除值:session.removeAttribute("name");
5)删除Session对象:Session.invalidate();
6)修改Session的缺省时间,默认30分钟
*session.setMaxInactiveInterval(时间);
*<session-config>
<session-timeout>1</session-timeout>
</session-config>