4.response、请求转发和重定向、cookie

  1. response响应对象

提供的方法:

  • void addCookie(Cookie cookie); :服务端向客户端增加cookie对象
  • void sendRedirect(String location) :throws IOException:页面跳转的一种方式(重定向)
  • void setContentType(String type): 设置服务端响应的编码(设置服务端的contentType类型)

新建三个login.jsp,check.jsp,success.jsp,其中check中有两种方法(重定向,请求转发)

1.login.jsp

<html>
<head>
    <title>Title</title>
    <form action="check.jsp" method="post">
        用户名:<input type="text" name="uname"></br>
        密码:<input type="password" name="upwd"></br>
        <input type="submit" value="登陆">
    </form>
</head>
<body>

</body>
</html>

2.check.jsp

<html>
<head>
    <title>check</title>
</head>
<body>
      <%
      request.setCharacterEncoding("utf-8");
     String name= request.getParameter("uname");
     String pwd= request.getParameter("upwd");
      if(name.equals("lch")&&pwd.equals("123")){
          //如果成功,跳转到success页面
          //1.重定向方法 会导致数据丢失
         //  response.sendRedirect("success.jsp");

          //2.请求转发
          //可以获取到数据 并且地址栏没有改变(仍然保留转发页面)
          request.getRequestDispatcher("success.jsp").forward(request,response);
      }
      else{
          out.print("登陆失败");
      }

3.success.jsp

<html>
<head>
    <title>success</title>
</head>
<body>
登陆成功
欢迎
<%
 String name=request.getParameter("uname");
 out.print(name);
%>

当为重定向时,success页面不能显示用户的名称
当为请求转发时,success页面可以显示用户的名称

2.请求转发,重定向的区别

name 请求转发 重定向
地址栏是否改变 不变(check.jsp) 改变(success.jsp)
是否保留第一次请求时的数据 保留 不保留
请求次数 1 2
跳转发生的位置 服务端 客户端发生二次跳转
  • 转发:
    客户端 -> [服务窗口A(服务端)-> 服务窗口B(服务端)]

  • 重定向:
    客户端 -> [服务窗口A] ->去找服务窗口B

客户端 -> [服务窗口B]

session(服务端)

(1)Cookie(客户端,不是内置对象)
Cookie是由服务端生成的,再发送给客户端保存。
相当于本地缓存的作用:客户端->服务端(hello.mp4)
服务端产生发送给客户端,下次看电影直接可以在本地看
作用:提高访问服务的效率,但是安全性较差

Cookie : name=value 键值对
由javax.servlet.http.Cookie产生
public Cookie(String name,String value)
String getName()
String getValue()
void setMaxAge(int expiry) ;最大有效期(秒)

(2)服务端发送给客户端cookie步骤

    1. response.addCookie(Cookie cookie) //产生一个cookie对象放到这个里面
    1. 页面跳转(转发,重定向)
    1. 客户端获取Cookie: request.getCookies();

注意:
a.服务端增加cookie: response对象;客户端获取对象:request对象
b.不能直接获取一个对象,而是一次获取所有cookie对象,然后遍历

(3)新建cookie实例

  • 1.新建reponse_addCookie.jsp
<html>
<head>
    <title>response cookie</title>

<body>
<%
      //服务端

    //1.创建两个cookie对象(key,value)
    Cookie cookie1 = new Cookie("name","zs");
    Cookie cookie2= new Cookie("pwd","123");

    //2.然后将cookie对象放入
    response.addCookie(cookie1);
    response.addCookie(cookie2);

   //3.页面跳转到客户端去
    response.sendRedirect("result.jsp");


%>
</body>
</html>
  • 2.创建result.jsp
<html>
<head>
    <title>result</title>
</head>
<body>
<%
   //客户端

//创建cookie对象数组 存储cookie
   Cookie[] cookies=request.getCookies();
    for (Cookie cookie:cookies) {
        //使用cookie.getName和cookie.getValue方法输出cookie键值对
        out.print(cookie.getName()+"--"+cookie.getValue()+"</br>");

    }




%>
</body>
</html>
  • 运行结果


    4.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。