Servlet

开发动态web的一门技术

Servlet原理

image.png

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

拦截器(Filter)


A Iღ熊菇凉❤
4 声望1 粉丝