Servlet
开发动静 web 的一门技术
Servlet 原理
ServletContext
web 容器在启动时,会为每一个 web 利用都创立一个对应的 ServletContext,它代表了以后的 web 利用。
- 共享数据
在同一个 web 利用中,不同的 servlet 之间的数据能够共享
- 获取初始化参数
- 申请转发
- 获取资源文件
@override
protected void doGet(HttpServletRequest rq,HttpServletResponse resp) throws ServletException,IOException {Properties prop = new Properties();
InputStream is = this.getservletContext().getResourceAsStream( s: "/WEB-INF/classes/com/cy/servlet/aa.properties");
prop. load(is);
string user = prop.getProperty("username");
String pwd = prop.getProperty("password");
resp.getwriter().print(user+":"+pwd);
}
HttpServletRequest
获取前端传输的数据
申请转发
HttpServletResponse
web 服务器接管到用户的 http 申请,针对这个申请,web 服务器会别离创立一个代表申请的 HttppServletResquest 对象,代表响应的对象 HTTPServletResponse 对象
- 如果要获取客户端发送过去的参数找 HttPServletRequest
- 如果要给服务器响应一些数据应用 HTTPServletResponse
下载文件
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String relPath = "D:Interlij IDEACGBIII2007projects01-springboot-startsrcmainresourcesfile.text";
String fileName = relPath.substring(relPath.indexOf("")+1);
resp.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
FileInputStream in = new FileInputStream(relPath);
int len = 0;
byte[] buffer = new byte[1024];
ServletOutputStream out = resp.getOutputStream();
while ((len=in.read(buffer))>0){out.write(buffer,0,len);
}
out.close();
in.close();}
重定向
//resp.setHeader("/url");
//resp.setStatus(304);
resp.sendRedirect("/url");
Cookie
Cookie 机制
在程序中,会话跟踪是很重要的事件。实践上,一个用户的所有申请操作都应该属于同一个会话,而另一个用户的所有申请操作则应该属于另一个会话,二者不能混同。例如,用户 A 在超市购买的任何商品都应该放在 A 的购物车内,不论是用户 A 什么工夫购买的,这都是属于同一个会话的,不能放入用户 B 或用户 C 的购物车内,这不属于同一个会话。
而 Web 应用程序是应用 HTTP 协定传输数据的。HTTP 协定是无状态的协定。一旦数据交换结束,客户端与服务器端的连贯就会敞开,再次替换数据须要建设新的连贯。这就意味着服务器无奈从连贯上跟踪会话。即用户 A 购买了一件商品放入购物车内,当再次购买商品时服务器曾经无奈判断该购买行为是属于用户 A 的会话还是用户 B 的会话了。要跟踪该会话,必须引入一种机制。
Cookie 就是这样的一种机制。它能够补救 HTTP 协定无状态的有余。在 Session 呈现之前,基本上所有的网站都采纳 Cookie 来跟踪会话。
Cookie 是什么
Cookie 意为“甜饼”,是 由 W3C 组织提出,最早由 Netscape 社区倒退的一种机制。目前 Cookie 曾经成为规范,所有的支流浏览器如 IE、Netscape、Firefox、Opera 等都反对 Cookie。
因为 HTTP 是一种无状态的协定,服务器单从网络连接上无从晓得客户身份。怎么办呢?就 给客户端们颁发一个通行证吧,每人一个,无论谁拜访都必须携带本人通行证。这样服务器就能从通行证上确认客户身份了。这就是 Cookie 的工作原理。
Cookie 实际上是一小段的文本信息。客户端申请服务器,如果服务器须要记录该用户状态,就应用 response 向客 户端浏览器颁发一个 Cookie。客户端浏览器会把 Cookie 保存起来。当浏览器再申请该网站时,浏览器把申请的网址连同该 Cookie 一起提交给服务 器。服务器查看该 Cookie,以此来识别用户状态。服务器还能够依据须要批改 Cookie 的内容。
Cookie 的有效期
Cookie 的 maxAge 决定着 Cookie 的有效期,单位为秒(Second)。Cookie 中通过 getMaxAge()办法与 setMaxAge(int maxAge)办法来读写 maxAge 属性。
Cookie cookie = new Cookie("username","hello"); // 新建 Cookie
cookie.setMaxAge(Integer.MAX_VALUE); // 设置生命周期为 MAX_VALUE
response.addCookie(cookie); // 输入到客户端
如果 maxAge 属性为负数,则示意该 Cookie 会在 maxAge 秒之后主动生效 。浏览器会将 maxAge 为负数的 Cookie 长久化,即写到对应的 Cookie 文件中。 无论客户敞开了浏览器还是电脑 ,只有还在 maxAge 秒之前,登录网站时该 Cookie 依然无效。
如果 maxAge 为正数,则示意该 Cookie 仅在本浏览器窗口以及本窗口关上的子窗口内无效,敞开窗口后该 Cookie 即生效。maxAge 为正数的 Cookie,为临时性 Cookie,不会被长久化,不会被写到 Cookie 文件中。Cookie 信息保留在浏 览器内存中,因而敞开浏览器该 Cookie 就隐没了。Cookie 默认的 maxAge 值为–1。
如果 maxAge 为 0,则示意删除该 Cookie。Cookie 机制没有提供删除 Cookie 的办法,因而通过设置该 Cookie 即时生效实现删除 Cookie 的成果。生效的 Cookie 会被浏览器从 Cookie 文件或者内存中删除,
Session
- Session 把用户的数据写到用户独占的 Session 中, 保留在服务器端。(保留重要的信息,缩小服务器资源的节约)
- Session 由服务器创立
应用场景:
- 保留用户的登录信息
- 购物车信息
- 在整个网站中常常应用的数据
JSP 九大内置对象
- Application:保留的数据只在服务器中无效,从关上服务器到敞开服务器。
- Session:保留的数据在一次会话中无效,从关上浏览器到敞开浏览器。
- Request:保留的数据只在一次申请中无效,申请转发会携带这个数据。
- PageContext:保留的数据只在一个页面无效。
- Response
- out
- page
- exception