我正在查看使用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
服务器的含义是显而易见的,似乎Servlet是实现实际应用程序的脚本。
但ServletContextHandler的含义不太清楚。您能否给出一个简单的解释,在Java生态系统中没有多少背景,只有一般的编程经验?它是为了跨不同的应用程序(servlet)共享配置变量吗?那些有用的应用是什么?
最后,我不知道为什么我们需要一个ServletHolder,而不是仅仅将Servlet提供给ServletContextHandler。
以下内容有点相关,但我并未仔细思考。它与此问题只有一个类重叠:What's the difference between a ServletHandler and a ServletContextHandler in Jetty?
答案 0 :(得分:0)
服务器 - 服务器本身。 (是的,应该很明显)
ServletContextHandler - 上下文,提供javax.servlet.ServletContext
中定义的范围
您可以拥有[0..n] ServletContextHandler
个实例
它们不能映射到相同的上下文路径。
负责:
示例:
/
for root
http://machine.com/foo
的请求将点击ServletContext
并处理资源/foo
/app
针对特定应用
对http://machine.com/app/bar
的请求将在ServletContext
点击/app
并处理资源/bar
ServletContext
ServletHolder - 特定servlet的配置
每个Servlet都可以配置为:
注意:过滤器
还有一个FilterHolder等效项Servlet - 处理请求并生成响应的低级端点资源
它使用标准Servlet行为处理原始请求。
过滤器 - Servlet之前可以参与请求/响应处理的组件。