gpt4 book ai didi

java - 服务器、ServletContextHandler、ServletHolder、Servlet

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:26 24 4
gpt4 key购买 nike

我正在查看一个使用 Jetty 的应用程序,它有很多不同的相关对象:

service = new Server(Integer.valueOf(System.getenv("PORT")));
final ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
MyAppServlet myAppServlet = new MyAppServlet();
ServletHolder myAppServletServletHolder = new ServletHolder(myAppServlet);
final String serviceName = 'abc';
servletContextHandler.addServlet(myAppServletServletHolder, ("/"+ serviceName));
service.setHandler(servletContextHandler);

所以看起来层次结构是:

Server
ServletContextHandler
ServletHolder
Servlet

Server的含义很明显,看起来Servlet就是实现实际应用程序的脚本。

但是ServletContextHandler的含义不太清楚。您能否给出一个简单的解释,不需要太多 Java 生态系统的背景,只需要一般的编程经验?是为了在不同的应用程序(servlet)之间共享配置变量吗?它有哪些有用的应用?

最后,我不知道为什么我们需要 ServletHolder,而不是仅仅将 Servlet 提供给 ServletContextHandler。

以下内容有点相关,但我认为不是很仔细。它与这个问题只有一类重叠:What's the difference between a ServletHandler and a ServletContextHandler in Jetty?

最佳答案

服务器 - 服务器本身。 (是的,应该是显而易见的)

ServletContextHandler - 上下文,提供javax.servlet.ServletContext中定义的范围。

您可以拥有 [0..n] ServletContextHandler 实例。
它们不得映射到相同的上下文路径。

负责:

  • 上下文路径(此上下文映射到什么?)-

示例:

/ 代表 root

http://machine.com/foo 的请求将命中 ServletContext 并处理其中为资源 /foo 映射的任何内容

/app 用于特定于应用程序

http://machine.com/app/bar 的请求将命中 /app 处的 ServletContext 并处理其中为资源 /bar 映射的任何内容

  • 属于该ServletContext的属性
  • 基础资源位置 - 您的所有内容所在的位置(请参阅:https://stackoverflow.com/a/39019797/775715)
  • Servlet 列表
  • 过滤器列表
  • Servlet 规范监听器列表
  • 保存您的 Servlet 规范 session 配置
  • 保存您的 Servlet 规范身份验证配置
  • 欢迎文件配置
  • 上下文特定的请求调度程序支持
  • 错误处理配置
  • Gzip 响应压缩支持
  • 等等...

ServletHolder - 特定 servlet 的配置

每个 Servlet 都可以配置为:

  • 感兴趣的网址模式
  • 初始化参数映射
  • 启动时是否已初始化?如果是的话,按什么顺序?

注意:过滤器还有一个等效的 FilterHolder

Servlet - 用于处理请求并生成响应的低级端点资源

这使用标准 Servlet 行为处理原始请求。

Filter - 位于 Servlet 之前的组件,可以参与请求/响应处理。

关于java - 服务器、ServletContextHandler、ServletHolder、Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50067107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com