1 掌握 请求转发
2 掌握 请求重定向
3 掌握cookie
1. 请求转发介绍
(1) 为什么需要请求转发?
以此请求的处理需要多个Servlet的联动操作,第一个Servlet需要用到其他Servlet
已经声明的逻辑处理代码
(2) 请求转发的本质是什么?
其实就是在一个Servlet中调用其他的Servlet
2. 请求转发的特点和request作为数据载体进行数据流转
(1) 请简要说明请求转发的特点
1. 降低Servlet之间的冗余
2. 以此请求转发内的Servlet共享此次请求的request和response对象
3. 浏览器地址栏信息不改变,还是一次请求
(2) 使用request对象作为请求转发的数据的载体的方法是什么?(存储和获取)
Req.setAttribute() 将request作为请求转发的数据的载体
Req.getAttribute()
3. 请求转发之request对象总结
(1) 总结说明request作用域的特点
一次请求转发内的servlet
作用
Request对象可作为数据流转的载体
(2) 总结说明请求转发的特点
4. 降低Servlet之间的冗余
5. 以此请求转发内的Servlet共享此次请求的request和response对象
6. 浏览器地址栏信息不改变,还是一次请求,使用了多个servlet
7. 会导致数据重复提交(通过刷新动作再次调用a重复流程)
4. 重定向的作用和特点
(1) 总结说明重定向的特点
重定向:
作用:
保护第一次的请求,避免因为用刷新动作频繁的触发A的执行
特点:
两次请求,地址栏信息改变
5. cookie的介绍和特点和作用
(1) 简要说明为什么需要cookie
不同的请求使用相同的请求数据,但是请求只要结束,数据就被销毁了,其他请求需要将公共数据重新书写发送
(2) cookie的特点是什么
浏览器端的数据存储技术
那些数据需要被存储是在服务器端被声明,以响应的方式告诉浏览器进行存储
不适合大量数据的存储
6. cookie的代码实现
(1) 怎么获取Cookie对象。
获得所有的cookie对象
Cookie[] cookies=req.getCookies();
(2) 书写代码获取请求中的键名为a的cookie信息的值
Cookie[] cookies=req.getCookies();
String b=null;
for (Cookie cookie : cookies) {
System.out.println();
if ((cookie.getName()).equals("a")) {
b=cookie.getValue();
}
}
7. cookie的有效期和有效路径设置
(1) 声明一段代码,设置Cookie的有效期为三天
Cookie cookie = new Cookie(name,value);
Cookie.setMaxAge(3600*24*3)
Resp.addCookie(cookie)
(2) 创建一个Cookie信息并设置其访问路径为/虚拟项目名/a
Cookie cookie = new Cookie(name,value);
Cookie.setPath(‘/虚拟项目名/a’)
8. session的介绍和基本使用流程
(1) 根据视频,说出你对session的理解及其作用
(2) 根据视频,如何保证不同请求获取到同一个session对象
根据cookie技术,存储一个编号,不同的请求根据不同的编号获取不同的session对象
9. session机制代码实现
(1) 请简述req.getSession()的作用
获取session对象
(2) 获取session对象的id的方法是什么?
Session.getId()
10. session的特点和流程总结
(1) 简述session使用流程
流程:
* 1. 浏览器发送请求到ServletA ,在ServletA中使用req.getSession()获取Session对象,如果此次请求中没有SessionID
* 则会创建一个新的Session对象,如果有SessionID则将其对应的Session对象返回(前提是该session对象没有到期且session对象没有被销毁)
* 对象到期销毁了,就算有sessionID也会创建一个新的Session
* 2. 校检session是否失效,存储数据到session对象中或者获取session中的数据或者删除session中的数据
(2) 简述session的特点
特点:
* session解决了同一用户不同请求的数据共享问题
* session的作用域:浏览器不关闭,session不失效,则同一用户的任意请求获取的都是同一个session
* 一次会话(浏览器从启动到关闭)
(3) 简述session的作用域
浏览器开启到关闭
cookie 和session 的区别:1、cookie数据存放在客户的浏览器上,session数据放在服务器上。2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。cookie 和session 的联系:session是通过cookie来工作的session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道session的id,从而获取到其他的信息。在购物网站中通常将用户加入购物车的商品联通session_id记录到数据库中,当用户再次访问是,通过sessionid就可以查找到用户上次加入购物车的商品。因为sessionid是唯一的,记录到数据库中就可以根据这个查找了。
问题二:
sessionid和request对象都存储在内存的缓存数据库中,存活的周期不同
11. session的有效期设置和强制销毁
(1) session的默认有效期?怎么设置session的有效期
(2) 程序中session都有一个默认的过期时间,其中tomcat中的默认时间为30分钟,根据需要我们可以去手动设置session的过期时间,以下是设置session的过期时间的三个方法:1.在tomcat-->conf-->conf/web.xml中的<session-config>中设置:<session-config><session-timeout>30</session-timeout></session-config>2.在项目的web.xml中定义:<session-config> <session-timeout>20</session-timeout> </session-config>注:20则设置过期时间为20分钟 测试通过3.在程序中定义:session.setMaxInactiveInterval(30*60);设置单位为秒,设置为-1永不过期
(3) 怎么强制销毁session?
session.removeAttribute()适用于清空指定的属性
session.invalidate()是清除当前session的所有相关信息
12. session之优化登录案例
数据处理
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 设置请求编码格式
req.setCharacterEncoding("utf-8");
// 设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
// 获取请求数据
String uname=req.getParameter("uname");
String pwd=req.getParameter("pwd");
// 处理请求数据
if (uname.equals("唐爸爸")&&pwd.equals("123")) {
//
resp.getWriter().write("登陆成功");
}else {
// 创建session对象
HttpSession session=req.getSession();
session.setAttribute("error", "用户名或密码错误");
// 重定向
resp.sendRedirect("session");
}
// 响应处理结果
}
登陆页面:
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 设置请求编码格式
req.setCharacterEncoding("utf-8");
// 设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
// 获取请求数据
// 处理请求数据
// 获取session对象
HttpSession session=req.getSession();
// 响应处理结果
String flag=(String) ((session.getAttribute("error")==null?"":session.getAttribute("error")));
// 销毁session(如果不销毁,会导致session得到的值会一直存在)
session.invalidate();
resp.getWriter().write("<html>");
resp.getWriter().write("<body>");
resp.getWriter().write("<form action='session01' method='get'>");
resp.getWriter().write("<font color='red'>"+flag+"</font>");
resp.getWriter().write("用户名:<input type='text' name='uname'/>");
resp.getWriter().write("密码:<input type='password' name='pwd'/>");
resp.getWriter().write("<input type='submit' value='提交'/>");
resp.getWriter().write("</form>");
resp.getWriter().write("</body>");
resp.getWriter().write("</html>");
}
13. 简述ServletContext对象的作用(application)
(1) 简述ServletContext对象的作用
为了解决不同用户之间的共享数据问题(session只有在同一个用户之间有效)
(2) 获取ServletContext对象的三种方式是?
获取servletcontext对象(三种方式)
ServletContext context1=this.getServletContext();
ServletContext context2=this.getServletConfig().getServletContext();
ServletContext context3=req.getSession().getServletContext();
14. ServletContext对象存储和获取共享数据
存储用户共享数据
* sc.setAttribute(String name,Object value)
* 获取用户共享数据
* sc.getAttribute(String name);
* 删除共享数据
* sc.removeAttribute(String name)
15. ServletContext特点&获取web配置文件全局属性&获取资源流对象和绝对路径
(1) 简述ServletContext对象的作用和特点。
作用:
* 解决了不同用户之间的数据共享问题
特点
* 服务器创建
* 所有用户共享
(2) web.xml中的全局属性数据的配置方式是;
* 获取web.xml中的全局配置属性,作用:将部分动作和源文件进行解耦.我们只需要在xml配置文件中进行相关配置就会改变代码的执行效果
* sc.getInitParameter(String name) 注意:返回的是string类型的对象
* 特点
* 服务器创建
* 所有用户共享
* 生命周期
* 服务器开启到服务器关闭
16. ServletContext对象实现网页访问计数次数
(1) 完成课上的代码
17. ServletConfig对象学习
(1) 说说ServletConfig对象的作用
主要是用于加载servlet的初始化参数。在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象)