Servlet 3.0 –具有许多突破性的功能,这些功能最终将改变开发人员编写和编写JEE Web应用程序的方式–有人可能会说,它的约定违背了我们对事物在理论上“应该”如何工作的大多数理解,但这就是其中之一。创新和持续改进; 挑战公约并提供更好,有效的解决方案。
本博客文章涵盖的主题:
- 易于发展–发生了什么变化?
- Servlet和过滤器的动态注册
- 可插拔性
- 捆绑的jar文件中的资源–一种称为Web片段的新功能。
易于发展
这是JEE Development世界中的主观主题之一–它不是一直在拖放,而是关于如何进一步完善符合标准,经过最佳惯例并经过严格检查的开发方式。
通过注释的声明式编程风格–在JEE6中,web.xml现在是可选的,并且现在可以通过使用注释来标记所有POJOS。 您可以声明Servlet,过滤器,侦听器,初始化参数等-几乎可以通过使用批注来配置web.xml下的几乎所有内容。
- @WebServlet –定义一个Servlet
- @WebFilter –定义过滤器
- @WebListener –定义一个监听器
- @WebInitParam –定义初始化参数
- @MultipartConfig –定义文件上传属性
- @ServletSecurity –定义安全约束
注意:尽管可以这样做,但是开发人员仍然可以使用web.xml覆盖这些值。
我在这里附上一个示例供您测试。
Servlet和过滤器的动态注册
可用的另一个功能是动态注册-在ServletContext初始化期间执行:
public class TestServletContextListenerimplements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {ServletContext servletContext = sce.getServletContext();ServletRegistration.Dynamic dynamic =servletContext.addServlet("DynamicServlet","com.mycom.MyServlet"); dynamic.addMapping("/dynamicServlet"); // URL mappingdynamic.setAsyncSupported(true);}
}
当然,您可以查找并挂接动态servlet /过滤器
ServletRegistration declared = ServletContext.getServletRegistration("DeclaredServlet");
declared.addMapping("/declaredServlet");
declared.setInitParameter("param", "value");
在此处下载maven项目。
可插拔性
在部署描述符中无需使用样板配置即可启用第三方框架。 模块化web.xml,以允许框架独立地包含在其自己的JAR文件和编程配置API中。使用注释。
可插拔背后的动机是,如果需要特定的框架,则可以减少将所有配置放在一个单独的Sile(web.xml)中的复杂性。 例如,如果开发人员需要对现有Web应用程序的Spring支持-首先要做的是将Spring的servlet /侦听器作为其支持的一部分-将来,当出现新的EE技术时,它会变得很丑陋。您需要再次将所有内容放到web.xml文件中。
现在,借助JEE6,您可以创建一个带有web-fragment.xml的子项目,该子项目将模仿主web.xml上的一个部分,从而可以独立创建和隔离进一步的改进(或可插入功能要求)。 以下是web-fragment.xml的示例
<web-fragment><servlet><servlet-name>welcome</servlet-name><servlet-class>com.mycom.WelcomeServlet</servlet-class></servlet><servlet-mapping><servlet-name>welcome</servlet-name><url-pattern>/Welcome</url-pattern></servlet-mapping>...
</web-fragment>
它与web.xml非常/非常相似。
在此处下载示例Web片段项目。
捆绑的jar文件中的资源
- 静态和JavaServerTM Page(JSP)资源不再局限于Web应用程序的文档根目录
- 可以放在WEB-INF / lib / [* .jar] / META-INF / resources中
- 容器在处理HTTP请求和对ServletContext#getResource或ServletContext#getResourceAsStream方法的调用时必须遵循这个新位置
- 但是,文档根目录中的资源优先于捆绑的JAR文件中的资源。
有了Web片段和新的资源束jar支持 ,现在可以与主父应用程序分开开发需要端到端处理的功能要求。
经过改进的新Servlet 3.0带来了许多有效的工具,这些工具将使开发人员可以使用该平台创建质量更高且更强大的应用程序。 注释/声明性编程–使描述符达到了新的高度,因为Servlet,过滤器和侦听器现在可以在Java代码级别上完成。 Servlet,过滤器,侦听器等的动态注册可用于创建将处理特定业务案例的JIT pojos,DI和CDI支持使开发人员可以通过简单地让容器负责对象的制造方法和最佳方法来简化范例总而言之,Web片段和对资源束jar的支持对开发进行了不同的分离,因为它允许隔离特定功能的Web项目,利用JEE现有技术,而无需通过父Web应用程序处理大量配置。
翻译自: https://www.javacodegeeks.com/2013/08/servlet-3-0-overview.html