java——servlet的内置对象,存储数据的对象,request,servletContent,session | cookie

web容器中只有一个servlet对象,所以它类似单线程,多用户访问可能会产生高并发问题,所以尽量不要使用变量来存储数据

在这里插入图片描述
这些对象都是容器,创建的。
request
response
application/servletContext
session

可存储数据的为(作用范围由大到小)
servletContext/application * 全局(一处存储,其它网页中都可获取操作)
生命周期与容器同步
记数器(投票器)
•唯一性:一个web应用只对应一个servletContext
•一直存在:由容器创建,容器不关闭,应用没有被删除,
servletContext对象将一直存在。

session * 会话
request * 请求链期间有效
请求链(默认没有请求链)
page 当前网页有效(jsp)
能存储数据的内置对象称之为域对象,这些对象都有同样的操作方法
在这里插入图片描述

《===================================》

request

 request 域对象 特点:
一次HTTP请求,服务器响应输出后,就断开连接,不能持续保
存数据。
在这里插入图片描述
在这里插入图片描述
接受获取客户端的请求信息;通过name获得参数;获取域变量值;获取内置对象;请求转发;

response

在这里插入图片描述
向客户端输出信息;设置中文乱码编码;重定向(页面跳转);写入cookie;设置响应头;输出流;

ServletContext

 ServletContext 域对象 特点:
全局域对象,所有页面都可以访问,不区分用户,即所有人的公
有资源!
在这里插入图片描述
获取服务器文件路径;设置公共参数;

response.getWriter().append(request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+request.getServletPath());//url
ServletContext servletContext=req.getServletContext();
		servletContext.setAttribute("number", 100);
ServletContext servletContext=req.getServletContext();
		String string1=servletContext.getAttribute("number").toString();
		resp.getWriter().append(string1);

在这里插入图片描述

=====>>> getRealPath(); //运行后的项目位置

计数器

if(servletContext.getAttribute("count") != null) {
	Integer i = Integer.valueOf(servletContext.getAttribute("count").toString());
	i++;
	servletContext.setAttribute("count", i);
}else {
	servletContext.setAttribute("count", 1);
}
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
response.getWriter().append(String.format("<h3>当前访问人数:%s</h3>", servletContext.getAttribute("count")));

request的请求链条(请求转发)

网页一

req.setAttribute("name", "dts");
		req.getRequestDispatcher("request2").forward(req, resp);

网页二

resp.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html;charset=utf-8");
		resp.getWriter().append("网页二"+req.getAttribute("name").toString());
		req.getRequestDispatcher("request3").forward(req, resp);

网页三

		resp.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html;charset=utf-8");
		resp.getWriter().append("网页三"+req.getAttribute("name").toString());

执行网页一:
在这里插入图片描述

request请求链的应用场景:

servlet处理java代码,jsp展示效果;

@WebServlet("/request1")
public class request1 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html;charset=utf-8");
		req.setAttribute("name", "dts");
		req.getRequestDispatcher("file.jsp").forward(req, resp);
	}
}

在这里插入图片描述
在这里插入图片描述

请求转发与重定向的区别

重定向 特点:

•地址栏地址会改变,变成重定向到的地址。
•重定向可以跳转到任何页面,甚至外部网站。
•重定向后的页面是全新的request和response

response.sendRedirect("url");
请求转发 特点:

•转发之后,浏览器地址栏地址不变。
•转发目的地是同一应用内部的地址。
•转发中的请求链共享相同的request和response。

req.getRequestDispatcher("file.jsp").forward(req, resp);

1.通过html的name属性来获得 值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.通过web.xml配置来设置公共初始化参数(key、value)

在这里插入图片描述
在这里插入图片描述
config调用或servletContext
在这里插入图片描述

session

在这里插入图片描述

Session是服务器端技术:

服务器在运行时,为每个会话用户创建一个独立的session
对象,各自的数据放在各自的session中。
从而Web服务器就可以分别按用户存储数据了。即服务器
会话技术。

1)获取session域对象
HttpSession session = request.getSession();
2)存储session数据
session.setAttribute("username", "garysu");
3)读取session数据
String name = (String)session.getAttribute("username");
4)清除session数据
session.removeAttribute("username");
session.Invalidate();

虽然代码相同,不同浏览器得不到保存的会话数据。以会话为单位。它底层是cookie,一个sessionid对应一个session

session存储在服务器上,但又能作到其它人访问不了,原因就是底层是用cookie去完成的。
在这里插入图片描述

cookie

1、 需要浏览器支持cookie存储
2、 由于每次请求服务器,需要携带cookie至服务器,所以cookie数据还是少写一点比较。
3、 cookie默认的生命周期,即会话为单位。
4、 an integer specifying the maximum age of the cookie in seconds; if negative, means the cookie is not stored; if zero, deletes the cookie
可以通过setMaxAge(?)方法来修改默认生命周期,当为正整数时,即多久数据自动被销毁,当为0时,删除cookie
5、 Cookie只能保存非中文字符串类型数据。需要URL编码

URL编码与解码:

URLDecoder()
URLEncoder()

Cookie cookie = new Cookie("name",URLEncoder.encode("董天帅", "UTF-8") );
		response.addCookie(cookie);
		response.getWriter().append("cookie已发布");
接受cookie
Cookie[] cookies=request.getCookies();
		
		for (Cookie cookie : cookies) {
			cookie.setMaxAge(5);
			response.getWriter().append(cookie.getName()+":"+URLDecoder.decode(cookie.getValue(), "UTF-8")+"<br>");//遍历输出cookies数组
		}

什么是会话?

用户打开一个URL,访问某网站信息,直至关闭浏览器,整个过程可称之为一个会话。绘画时间数据隔离。
 Cookie是客户端浏览器技术:
网站服务器可以通过cookie技术把用户数据写入到客户端浏览器中,由客户端浏览器完成数据存储。当用户再次使用该浏览器访问网站时,服务器可以通过cookie技术读取到客户端浏览器中存储的相关数据。
 这样,网站或Web项目中就可以按用户存储数据了。即客户端会话技术。

1)如何创建Cookie?
Cookie c = new Cookie(String name,String value);
2)发送cookie到浏览器端保存
response.addCookie(Cookie cookie)
3)服务器接收cookie
Cookie[] request.getCookies()
4)设置cookie

在这里插入图片描述
 Cookie只能保存非中文字符串类型数据。
 cookie保存在客户端浏览器中,相对而言不安全。
对于敏感数据,需要加密后存储或不使用该技术。

setPath(String uri):设置cookie的有效访问路径。

有效路径:cookie的有效路径保存在哪里,那么浏 览 器 在 有 效 路 径 下 访 问 服 务 器 时 就 会 带 着cookie信息,否则不带cookie信息。
默认情况:有效路径在当前web应用下
Cookie cookie1 = new Cookie(“name”,“eric”);
//默认情况
cookie1.setPath("/appName");
response.addCookie(cookie1);
//
cookie1.setPath("/shopping/username");

跨域共享cookie:

在一个比较复杂的网站环境下。有多个产品向外提供服务。每个产品下都有自己的登录界面。现在需要设计一个统一的登录界面。类似业务,可使用跨域Cookie实现。
 跨域共享cookie实现:
•应用A 所在的域:gary.com
•写入时,配置域:cookie.setDomain(".gary.cn");
•应用B 所在的域:gary.cn
•可读取。
注:域名以点 (.foo.com) 开头默认情况下,cookie 只返回给写入它们的服务器。

Session和Cookie的主要区别:

•Cookie是把数据存储在客户端浏览器中。
•Session是把数据存储在服务器中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值