一、简介
Servlet 运行于 Web 或 应用服务器上 的程序,是 HTTP请求 和 服务器上的数据库 或 应用程序之间的中间层。
用于收集网页表单的用户输入,呈现来自数据库或者其他源的记录,动态创建网页。
二、优点
- 性能更好
- 在Web服务器地址空间内执行,则无需再创建线程处理用户请求
- 独立于平台(Java编写)
- 可信(服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源)
- Java所有类库均可对其使用
三、生命周期
- 初始化:第一次调用时,进行初始化,且仅初始化一次,调用init()方法
- 处理请求:处理用户请求,并作出响应
- 销毁:长期未调用时进行销毁,销毁前,调用destroy(),销毁被JVM的垃圾回收机制管理
下图反应了Web服务器中Servlet的生命周期:
四、Servlet HTTP请求头信息
Accept // 浏览器或其他客户端可以处理的 MIME 类型。值 image/png 或 image/jpeg 是最常见
Accept-Charset // 显示信息的字符集。例如 ISO-8859-1。
Accept-Encoding // 编码方式。值 gzip 或 compress 是最常见的两种可能值。
Accept-Language // 客户端的首选语言,Servlet 会产生多种语言的结果。例如,en、en-us、ru 等。
Authorization // 客户端在访问受密码保护的网页时识别自己的身份。
Connection // 是否可以处理持久 HTTP 连接。值 Keep-Alive 意味着使用了持续连接。
Content-Length // POST 请求,给出 POST 数据的大小(以字节为单位)。
Cookie // 发送到浏览器的 cookies 返回到服务器。
Host // URL 中的主机和端口。
If-Modified-Since // 仅目标页面在指定日期已更改时。无新的结果可用,返回304,表 Not Modified
If-Unmodified-Since //当文档早于指定日期时,操作才会成功。
Referer // 所指向的 Web 页的 URL。
User-Agent // 识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。
五、Servlet HTTP响应头信息
Allow // 服务器支持的请求方法(GET、POST 等)。
Cache-Control // 响应在何种情况下可以安全地缓存。
// Public 可缓存,Private 单用户私用,仅存私有(非共享)缓存,no-cache 不应缓存
Connection // 是否使用持久 HTTP 连接。close 不持久连接,keep-alive 持久连接。
Content-Disposition // 要求用户以给定名称的文件把响应保存到磁盘。
Content-Encoding // 编码方式。
Content-Language // 使用的语言。例如,en、en-us、ru 等。
Content-Length // 响应中的字节数。使用持久(keep-alive)HTTP 连接时才需要。
Content-Type // 响应文档的 MIME(Multipurpose Internet Mail Extension)类型。
Expires // 内容过期的时间,过期后不缓存。
Last-Modified // 最后修改时间。客户端可缓存,并在以后请求中通过 If-Modified-Since 提供日期。
Location // 所有带状态码的响应中,300s 内,通知浏览器文档的地址。自动重连到该位置,并获取文档。
Refresh // 如何刷新即刷新时间。
Retry-After // 与 503(Service Unavailable 服务不可用)响应配合,设置重复请求时间。
Set-Cookie // 页面关联的 cookie。
六、过滤器
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。可实现:
- 在客户端的请求访问后端资源之前,拦截这些请求。
- 在服务器的响应发送回客户端之前,处理这些响应。
过滤器拦截请求后,则可按需求进行处理,常用到的有身份验证、加密解密、权限控制等。如下,为一个拦截器的实现,在web.xml文件中将其映射到url或者Servlet。
//导入必需的 java 库
import javax.servlet.*;
import java.util.*;
//实现 Filter 类
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// 获取初始化参数
String site = config.getInitParameter("Site");
// 输出初始化参数
System.out.println("地址: " + site);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException {
System.out.println("这是拦截器");
// 把请求传回过滤链,过滤链串联多个filter,按照web.xml中的定义依次执行
chain.doFilter(request,response);
}
public void destroy( ){
/* 在 Filter 实例被 Web 容器从服务移除之前调用 */
}
}
七、推荐文章
Servlet之Filter详细讲解https://www.cnblogs.com/zlbx/p/4888312.html