0%

请求转发和重定向

1
2
3
4
// 请求转发
request.getRequestDispatcher(url).forward(req,resp)
// 请求重定向
response.sendRedirect(url)
阅读全文 »

响应

Servlet封装响应并返回给请求的客户端,该响应由ServletResponse类型的response对象表示,在HTTP请求场景下,容器提供的响应对象的具体类型为HttpServletResponse

HTTP的响应消息分为三部分:状态行、响应头、响应正文。

状态行对应的方法是

1
public void setStatus(int sc);

响应头对应的方法为

1
2
3
public void addHeader(String name, String value);
//或者
public void setHeader(String name, String value);

响应正文对应的方法为

1
2
3
public ServletOutputStream getOutputStream() throws IOException;
//或者
public PrintWriter getWriter() throws IOException;

定时任务

at一次性执行定时任务

依赖于atd服务

1
service atd start
1
2
3
4
5
6
7
8
9
10
11
12
# at [选项] 时间
at -f test.sh now
----------
-m at工作完成后,使用email通知执行at命令的用户
-c 工作号 显示该at工作的实际内容
-f 执行的脚本

时间格式
HH:MM
HH:MM YYYY-MM-DD
HH:MM[am|pm] [month] [date]
HH:MM[am|pm] + [minutes|hours|days|weeks]
阅读全文 »

Gzip压缩

通过gzip相关指令可以配置Gzip压缩,对响应数据进行在线实时压缩。

相关配置参数说明:

  • gzip: on; # 开启或关闭gzip功能,默认为off

  • gzip_buffers: 16 8K; # 配置Gzip压缩文件时使用的缓存空间大小,语法结构为gzip_buffers number size;

    number表示需要向系统申请的缓存空间的个数;size表示指定每个缓存空间的大小,默认number*size=128K

  • gzip_comp_level: 9; # 压缩级别,压缩程度越高,压缩效率最低,最费时间

  • gzip_min_length:# 配置最小压缩的数据大小,如果响应页面的大小大于该值,才开启Gzip功能(一些小文件会导致压缩后的大小比原文件还大),默认为20,建议设置为1k(1024)

  • gzip_http_version:1.0; # 配置只有高于指定版本的HTTP协议才能开启Gzip,默认为1.1,目前绝大多数浏览器都支持Gzip自解压,一般采用默认值即可

  • gzip_proxied:any; # 设置是否对被代理服务器返回的数据进行压缩,前提是后端服务器返回的响应头中包含有Via头,默认为off,可选值包含有

    off 关闭nginx对后端服务器返回结果进行Gzip压缩

    expired 当后端服务器响应头中包含有expired头时,对数据进行Gzip压缩

    no-cache 当后端服务器响应头中包含有Cache-Control且值为no-cache时,对数据进行Gzip压缩

    no-store 当后端服务器响应头中包含有Cache-Control且值为no-store时,对数据进行Gzip压缩

    private 当后端服务器响应头中包含有Cache-Control且值为private时,对数据进行Gzip压缩

    no_last_modified 当后端服务器响应头中不包含有Last-Modified时,对数据进行Gzip压缩

    no_etag 当后端服务器响应头中不包含有ETag时,对数据进行Gzip压缩

    auth 当后端服务器响应头中包含有标识HTTP授权Authorization时,对数据进行Gzip压缩

    any 无条件对数据进行压缩

  • gzip_vary: on; # 开启压缩标记,开启后在响应头部添加 Vary: Accept-Encoding,默认为off,

  • gzip_types: 默认为text/html, 可以 text/plain application/x-javascript text/css application/xml text/javascript; # 对指定类型的文档进行Gzip压缩

  • gzip_static:on; # 对于存在服务器上.gz作为后缀的文件,且客户端浏览器支持gzip压缩,就直接返回压缩后的数据,可选值

    on 开启

    off 关闭

    always 一直发送.gz文件,而不检查客户端浏览器是否支持Gzip压缩

阅读全文 »

JWT介绍

介绍JWT之前先说一下为什么需要JWT?

为什么需要JWT?

由于HTTP是无状态协议,而服务端其实需要知道部分的客户端信息来识别身份,所以之前我们在javaweb中经常使用session和cookie来进行会话管理,从而找到用户信息。但是cookie和session的方式存在一些问题

  • 服务端保存大量数据,增加了服务端的压力

  • 服务端保存用户状态,不支持集群化部署

当然使用redis存储session解决了这些问题。

但是Restful风格的接口其实有个规范就是服务的无状态性。

  • 服务端不保存任何客户端请求者信息
  • 客户端的每次请求都必须具备自描述信息,通过这些信息识别用户信息

如何实现无状态?

既然要使用无状态,那么如何才能实现无状态呢?说一下简单地流程

  • 登录时通过客户端发送账号和密码进行认证
  • 认证通过后,服务端将用户信息加密且编码成一个token,返回给客户端
  • 之后客户端每次发送请求,都需要携带认证的token
  • 服务端对客户端发送来的token进行解密,判断是否有效,并且获取用户登录信息

而JWT就是一种JSON风格的轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权

JWT组成

JWT由三部分组成

  • 头部(header)
  • 载荷(payload)
  • 签名(signature)
阅读全文 »