Servlet
开发动静web的一门技术
Servlet原理
ServletContext
web容器在启动时,会为每一个web利用都创立一个对应的ServletContext,它代表了以后的web利用。
- 共享数据
在同一个web利用中,不同的servlet之间的数据能够共享
- 获取初始化参数
- 申请转发
- 获取资源文件
@overrideprotected 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"); // 新建Cookiecookie.setMaxAge(Integer.MAX_VALUE); // 设置生命周期为MAX_VALUEresponse.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