一、请求转发和重定向
1.请求转发:
概念:请求转发是服务器的行为,请求由服务器转发给另一个页面处理,如何转发,何时转发,转发几次,客户端是不知道的,请求转发时,从发送第一次到最后一次请求的过程中,web容器创建一次request和response对象,新的页面继续处理同一个请求,可以理解为服务器将request对象在页面之间传递
请求转发本质:一个Servlet调用了另一个Servlet
特点:
1.降低Servlet之间的代码冗余
2.一次请求转发内的Servlet共享此次请求的request和response
3.浏览器地址栏信息不会改变,属于一次请求
request作用域
作用域(范围)一次请求转发内的Servlet
作用:request对象可以作为数据流转的载体
2.重定向
概念:为了保护第一次的请求,避免因为用户的刷新动作触发第一个Servlet的执行
特点:两次请求,地址栏信息改变
3.请求转发和重定向的异同点
相同点:都可以做“跳转”
不同点:
1.语法不同
请求转发属于request对象的方法:request.getRequestDispatcher(String url).forward(request,response)
重定向属于response对象的方法:response.sendRedirect(String url)
2.地址栏是否变化
请求转发属于服务器端的跳转,只有一个请求,地址栏没有变化。类似于“110”报警电话
重定向属于客户端的跳转,有两次请求,地址栏会发生变化,类似于“114”查号电话
3.是否能共享request范围中的数据
请求转发(forward):因为是一个请求,可以共享request范围中的数据
重定向(setRedirect):因为是两个请求,无法共享request范围中的数据
注意:新增时为了避免重复新增,可以使用重定向
二、Cookie
本质就是以键值对形式存储在客户端的文件,为了解决不同请求之间的数据共享
cookie特点:
1.不设置有效期浏览器关闭就会失效
2.浏览器端的数据存储
3.不适合大量数据存储
4.如果不设置有效路径则任意项目路径的请求都会附带存储的cookie信息
常用方法:
Cookie c = new Cookie("b",b);创建一个Cookie
c.setMaxAge(int seconds);设置cookie有效期
c.setPath(String uri);设置cookie访问路径
response.addCookie(c);响应cookie数据(将cookie添加到servlet中)
request.getCookies(Cookie[] cookies);获取所有cookie信息
Cookie课堂工程案例(实现登录操作记住用户名和密码)
登录界面
处理登录界面
响应跳转界面
第一次访问默认为空白
第二次访问
三、Session
作用:session对象解决了同一个用户不同请求之间的数据共享,保存在服务器端。每次会话都会创建一个session id,根据session id获取session对象
session的使用流程:
1.浏览器发起请求到Aservlet中,在Aservlet中使用request.getSession()获取Session对象,如果此次请求中没有SessionID则创建一个新的Session对象,如果由Session则将器对应的Session对象返回(前提是该session对象没有到期),如果是session对象到期销毁了,就算由sessionID也会重新创建一个Session对象
2.检验session是否失效,存储数据到session对象中获取session中的数据或者删除session中的数据
session的作用域:浏览器不关闭,session不失效,则同一用户的任意请求获取的都是同一个session
Session常用方法:
HttpSession session = request.getSession();创建/获取session对象
session.setAttribute(String name,Object value);存值
session.getAttribute(String name);取值(返回obj类型,需要强制转型)
session.removeAttribute(String uname);注意:如果有数据则删除,没有则什么都不做。
session.setMaxInactiveInterval(int seconds);设置有效期
session.invalidate();强制销毁session
Session简单案例(不带JDBC代码部分示例):
登录界面
处理登录界面
跳转界面
处理登出界面
操作详情
故意输入错误的数据(当前数据库中没有的数据)
提示有误,然后跳转了登出操作 又由登出重定向到了登录主界面
四、ServletContext对象和ServletConfig对象
1.ServletContext对象的作用:
Request解决了一次请求内的数据共享问题,session解决了用户不同请求的数据共享问题,ServletContext解决了不同用户的数据共享。
创建ServletContext对象的三种方式
a.this.getServletConfig().getServletContext();
b.req.getSession().getServletContext();
c.this.getServletContext();
作用:解决了不同用户之间的数据共享问题
特点:由服务器创建,被所有用户共享
生命周期:从服务器开启到服务器关闭
常用方法:
servletcontext.setAttribute(String name,Object value);存值
servletcontext.getAttribute(String name);取值
servletcontext.getInitParameter(String name);获取web.xml中的全局配置属性。作用:将部分操作和源文件进行解耦,我们只需要在xml配置文件中进行相关配置就会改变代码的执行效果
数据共享效果演示
此时不关闭Tomcat服务器 换Firefox浏览器访问ServletContextB
发现可以拿到数据
如何配置全局web.xml文件
2.ServletConfig对象的作用
主要是用于加载servlet的初始化参数。在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象)