B一个web资源收到客户端A请求后,B会通知A客户端去访问另外一个web资源C,这个过程叫重定向。
常见常见:
void sendRedirect(String location) throws IOException;
测试:
package com.kuang.servlet;
?
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
?
public class RedirectServlet extends HttpServlet {
面试题:请你描述一下重定向和转发的区别
相同点:
页面都会实现跳转
不同点:
请求转发的时候,url不会产生变化
重定向时候,url地址栏会发生变化
出现的问题:JSP页面显示乱码
解决方法:
这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可:
<%@ page contentType="text/html;charset=utf-8" language="java" %>
请求测试:
package com.kuang.servlet;
?
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
?
public class RequestTest extends HttpServlet {
success.jsp:
<%--
Created by IntelliJ IDEA.
User: HP
Date: 2021/3/17
Time: 9:55
To change this template use File | Settings | File Templates.
--%>
<%
添加的jsp依赖:
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
?
</dependency>
?
HttpServletRequest:代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端的所有信息。
package com.kuang.servlet;
?
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
?
public class LoginServlet extends HttpServlet {
?
<%
?
<%
面试题:请你描述一下重定向和转发的区别
相同点:
页面都会实现跳转
不同点:
请求转发的时候,url不会产生变化 307
重定向时候,url地址栏会发生变化 302
出现的问题:
每次导入servlet包都会出错:显示未导入
此时在extends后面加javax.servlet.http.HttpServlet然后点击alt+enter就会导入
代码错报500 正常错报404
会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话。
有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过。称之为有状态会话。
你能怎么证明你是西开的学生?
你 西开
1.发票 西开给你的发票
2.学校登记,西开标记你来过
一个网站,怎么证明你来过?
客户端 服务端
1.服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了:cookie
2.服务器登记你来过了,下次你来的时候我来匹配你;seesion
cookie
客户端技术(响应,请求)
session
服务器技术,利用这个技术,可以保存用户的会话信息。我们可以把信息或者数据放在Seesion中!
常见场景:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!
1.从请求中拿到cookie信息
2.服务器响应给客户端cookie
Cookie[] cookies = req.getCookies();//获得cookie
cookie.getName();//获得cookie中的key
cookie.getValue();//获得cookie的value
new Cookie("lastloginTime", System.currentTimeMillis()+"");//新建一个cookie
cookie.setMaxAge(24*60*60);//设置cookie的有效期
resp.addCookie(cookie);//响应给客户端一个cookie
?
cookie:一般会保存在本地的用户目录下的appdata;
一个网站cookie是否存在上限!聊聊细节问题
一个Cookie只能保存一个信息;
一个web站点可以给浏览器发送多个cookie, 最多存放20个cookie
浏览器上限300个cookie
Cookie大小有限制4kb
删除Cookie:
不设置有效期,关闭浏览器,自动失效;
设置有效期时间为0;
编码解码:
URLEncoder.encode("秦疆","utf-8")编码
URLDecoder.decode(cookie.getValue(),"utf-8")
package com.kuang.servlet;
?
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
?
//保存用户上一次访问的时间
public class CookieDemo01 extends HttpServlet {
?
?