Servlet原理

15 篇文章 0 订阅
1 篇文章 0 订阅
本文详细介绍了Servlet的工作原理、优势,包括其生命周期、HTTP请求头和响应头信息。同时,重点讲解了Servlet过滤器的作用及其在拦截请求和响应中的应用。适合对Web开发感兴趣的开发者深入理解。
摘要由CSDN通过智能技术生成

一、简介

        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详细讲解icon-default.png?t=LA92https://www.cnblogs.com/zlbx/p/4888312.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值