概述
1、请求转发
将请求转发给另一个Servlet
//创建一个请求转发
RequestDispatcher requestDispatcher =
req.getRequestDispatcher("接收请求的对象");
//携带请求和响应对象
requestDispatcher.forward("req,resp")
//直接一下写完就行!
RequestDispatcher requestDispatcher =
req.getRequestDispatcher("接收请求的对象").forward("req,resp")
特点
- 请求转发地址栏不变
- 请求转发是服务器内部行为
- 当做域对西昂使用,即相当于容器,可以转载数据
- 两个servlet中请求域数据再一次请求转发中共享
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q7EdWMgJ-1662380332327)(D:千峰上课Every Day Stage2day40codeday40_servlet.assetsimage-20220905105311320.png)]
1.1请求域
两个方法,实现两个Servlet请求转发中传输数据
- 在两个servlet请求转发时,会存在A类的数据要传递给B类
- 此时就需要使用请求对象的请求域功能
- req.setAttribute(key,value),这样就可以将数据存储在请求对象
- 在另外一个servlet使用请求对象取出值req.getAttribute(“key”)
2、重定向
重定向也可以使用Servlet直接的跳转,以及跳转页面
//直接输入需要转到的路径
resp.sendRedirect("路径");
特点:
- 重定向是响应重定向,是浏览器行为
- 两次请求
- 地址栏会变化
- 请求域数据无法共享
2.1路径问题
请求转发是服务器行为,服务器根路径是项目名,
所以发请求,从/开始,不会丢失项目名
重定向是浏览器行为,浏览器根路径是端口
所以发请求,从/开始,就会丢项目名
// req.getContextPath(); // 获得项目名 ,例如 /day40
resp.sendRedirect(req.getContextPath()+"/redirect2"); // 拼接项目名
3、会话技术
HTTP是无状态,保存会话数据的技术:cookie,session
cookie是浏览器技术,储存到浏览器
session是服务器技术,储存到服务器
3.1 Cookie[熟悉]
是保存到浏览器的数据
- 创建
- 响应到浏览器
//在服务器中创建
Cookie cookie = new Cookie(key,value);
//用响应添加到浏览器
resp.addCookie(cookie);
- 获取cookie
// 从请求中获得cookie.一次获得全部的cookie对象
// 但是一次获得当前站点所有cookie对象,没有获得单独某一个cookie
Cookie[] cookies = req.getCookies();
for (int i = 0; cookies != null && i < cookies.length; i++) {
Cookie ck = cookies[i];
String name = ck.getName( );
String value = ck.getValue( );
System.out.println(name+"="+value );
}
- 删除cookie
- 没有删除的方法
- 主要靠最大生命值来确定
- 默认保存至会话结束(浏览器关闭)
- 也可以通过在创建时指定生命周期
- setMaxAge
- 大于0,存在指定的秒
- 等于0,直接删除
- 小于0,一般是-1,保存至浏览器关闭(默认的)
// 创建cookie
Cookie cookie = new Cookie("username","admin");// 中文会乱码
// 创建的cookie,默认存储到浏览器关闭.
// 可以设置时间,单位是秒!!
// cookie.setMaxAge(30);
// cookie.setMaxAge(0); // 直接删除该cookie
cookie.setMaxAge(-1); // 保存至浏览器关闭
- 设置cookie的路径
设计两个Servlet,来读取CookieServlet1设置的cookie
一个叫UserServlet,映射路径/user/ck,读取cookie
一个叫AdminServlet,映射路径/admin/ck,读取cookie
演示1:
CookieServlet1设置的cookie的路径默认是http://localhost/day40/
通过http://localhost/day40/user/ck 能读取到cookie值
通过http://localhost/day40/admin/ck 能读取到cookie值
演示2
CookieServlet1设置的cookie的路径为是==/day40/user==
通过http://localhost/day40/user/ck 能读取到cookie值
通过http://localhost/day40/admin/ck 能读取不到cookie值
// 设置cookie路径
cookie.setPath("/day40/user");
总结: cookie设置路径,其实就是设置cookie的读取范围
-
中文乱码解决
// 中文编码 URLEncoded.encoded("value","UTF-8") // 将乱码解码成中文 URLDecode.decode(value,"UTF-8") // cookie中文解决 // jdk自带有将中文编码和解码的方法 Cookie cookie = new Cookie( URLEncoder.encode("姓名","UTF-8"), URLEncoder.encode("张三","UTF-8"));
for (int i = 0; cookies != null && i < cookies.length; i++) { Cookie ck = cookies[i]; String name = ck.getName( ); String value = ck.getValue( ); // 解码 String u = URLDecoder.decode(name, "UTF-8"); String v = URLDecoder.decode(value, "UTF-8"); System.out.println(u+"="+v ); }
3.2 Session 【重点】
将数据保存到服务器
基于cookie
浏览器会利用cookie存储一个叫做JSESSIONID的值
- 创建
- 存储数据
- 一般用在登录成功之后,将用户信息储存到session
- 获取数据【重点】
- 请求转发后从另外一个Servlie取值,可以取出session值
- 重定向后从另外一个Servlet取值,可以取出session值
- 因为session域实在整个会话有效,只要会话不结束,当前服务器中的请求都可以后的session域的数据
- 删除
// 销毁session
session.invalidate();
删除session一般用在注销登录
可以取出session值
- 重定向后从另外一个Servlet取值,可以取出session值
- 因为session域实在整个会话有效,只要会话不结束,当前服务器中的请求都可以后的session域的数据
- 删除
// 销毁session
session.invalidate();
删除session一般用在注销登录
������������
最后
以上就是执着金毛为你收集整理的Servlet之间的交互1、请求转发2、重定向3、会话技术的全部内容,希望文章能够帮你解决Servlet之间的交互1、请求转发2、重定向3、会话技术所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复