请求转发、重定向、Cookie和Session

一、请求转发和重定向

    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信息

常用方法
获取cookies数据

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对象)

你可能感兴趣的:(请求转发、重定向、Cookie和Session)