Servlet 3.0概述

Servlet 3.0 –具有许多突破性的功能,这些功能最终将改变开发人员编写和编写JEE Web应用程序的方式–有人可能会说,它的约定违背了我们对事物在理论上“应该”如何工作的大多数理解,但这就是其中之一。创新和持续改进; 挑战公约并提供更好,有效的解决方案。

本博客文章涵盖的主题:

  1. 易于发展–发生了什么变化?
  2. Servlet和过滤器的动态注册
  3. 可插拔性
  4. 捆绑的jar文件中的资源–一种称为Web片段的新功能。

易于发展

这是JEE Development世界中的主观主题之一–它不是一直在拖放,而是关于如何进一步完善符合标准,经过最佳惯例并经过严格检查的开发方式。

通过注释的声明式编程风格–在JEE6中,web.xml现在是可选的,并且现在可以通过使用注释来标记所有POJOS。 您可以声明Servlet,过滤器,侦听器,初始化参数等-几乎可以通过使用批注来配置web.xml下的几乎所有内容。

  1. @WebServlet –定义一个Servlet
  2. @WebFilter –定义过滤器
  3. @WebListener –定义一个监听器
  4. @WebInitParam –定义初始化参数
  5. @MultipartConfig –定义文件上传属性
  6. @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文件中的资源。

javaee6_servlet3-0_basics__1_-pdf__page_29_of_32_

有了Web片段新的资源束jar支持 ,现在可以与主父应用程序分开开发需要端到端处理的功能要求。

经过改进的新Servlet 3.0带来了许多有效的工具,这些工具将使开发人员可以使用该平台创建质量更高且更强大的应用程序。 注释/声明性编程–使描述符达到了新的高度,因为Servlet,过滤器和侦听器现在可以在Java代码级别上完成。 Servlet,过滤器,侦听器等的动态注册可用于创建将处理特定业务案例的JIT pojos,DI和CDI支持使开发人员可以通过简单地让容器负责对象的制造方法和最佳方法来简化范例总而言之,Web片段和对资源束jar的支持对开发进行了不同的分离,因为它允许隔离特定功能的Web项目,利用JEE现有技术,而无需通过父Web应用程序处理大量配置。

参考:来自我们的JCG合作伙伴 Alvin Reyes的Servlet 3.0 ,位于Alvin“ Jay” Reyes博客博客中。

翻译自: https://www.javacodegeeks.com/2013/08/servlet-3-0-overview.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL(介绍,安装,密码操作,权限表)

一、数据库介绍1、数据库相关概念a、支持并发b、锁的问题c、对客户端请求进行认证d、存取效率&#xff08;降低IO次数&#xff09;数据库服务器&#xff08;本质就是一个台计算机&#xff0c;该计算机之上安装有数据库管理软件的服务端&#xff09;数据库管理管理系统RDBMS&…

matlab如何测两点的角度_【邢不行|量化小讲堂系列01-Python量化入门】如何快速上手使用Python进行金融数据分析...

引言:邢不行的系列帖子“量化小讲堂”&#xff0c;通过实际案例教初学者使用python进行量化投资&#xff0c;了解行业研究方向&#xff0c;希望能对大家有帮助。【历史文章汇总】请点击此处【必读文章】&#xff1a;【邢不行|量化小讲堂系列27-Python量化入门】EOS期现套利&…

结对项目

一、【Coding.Net项目地址】https://git.coding.net/verde/Pair_Work.git 二、【对接口进行的设计】 看教科书和其它资料中关于Information Hiding, Interface Design, Loose Coupling的章节&#xff0c;说明你们在结对编程中是如何利用这些方法对接口进行设计的。 如下图SRC的…

amd 安装 linux驱动怎么安装教程,请教,怎么在ubuntu里安装amd显卡驱动

AMD发布新版本时fglrx-updates驱动就会自动升级&#xff0c;但其实并不总是这样&#xff0c;因为Ubuntu的源的更新老是会有延迟。所以&#xff0c;你可以自己安装指定版本的专有驱动。准备开始吧&#xff0c;在终端敲入以下命令&#xff1a;sudo apt-get install build-essenti…

node.js中exports与module.exports的区别分析

前言 关于Node.js中的exports和module.exports&#xff0c;很多时候都比较容易让人混淆&#xff0c;弄不清楚两者间的区别。那么我们就从头开始理清这两者之间的关系。 来源 在开发Node.js应用的时候&#xff0c;很多模块都是需要引入才能使用&#xff0c;但是为什么exports…

Java反射教程

在本教程中&#xff0c;我主要编写一些示例来介绍Java反射可以做什么。 希望它可以给您这个概念的概述。 请留下您的评论以寻求建议。 什么是反射&#xff1f; 简而言之&#xff0c;反射是程序在运行时检查和修改对象的结构和行为的能力。 这种概念有时与内省混合在一起。 自…

NFS网络共享文件系统

1、nfs服务端配置操作 1.1 创建所需的共享目录--源 mkdir /data/rw #rw代表同步的数据可读可写 1.2 对共享目录进行授权 chown -R nfsnobody.nfsnobody /data/rw #非必需&#xff0c;根据业务需求 1.3 修改nfs服务配置文件 vim /etc/exports /data/rw 172.16.1.0/…

国家开放大学形成性考核 统一资料 参考试题

试卷代号&#xff1a;1174 水工钢筋混凝土结构&#xff08;本&#xff09;参考试题 一、选择题&#xff08;每小题2分&#xff0c;共20分&#xff0c;在所列备选项中&#xff0c;选1项正确的或最好的作为答案&#xff0c;将选项号填入各题的括号中&#xff09; 1.钢筋混凝土结…

两个向量之间的夹角公式_向量的内积

向量的内积也叫向量的数量积、点积。我们定义两个向量的内积是一个数: 其中 是这两个向量的夹角。 对于向量的内积,最重要的一个结论是: 定理1:两向量垂直的充分必要条件是它们的内积为 0,即 这个定理我们几乎不用证明了,因为从定义来看,如果两个向量都不零向量,则只能…

Go strings.Builder

Go strings.Builder 字符串拼接操作优化 最开始的时候&#xff0c;可能会使用如下的操作&#xff1a; package mainfunc main() {ss : []string{"sh","hn","test",}var str stringfor _, s : range ss {str s}print(str) }与许多支持string类型…

springcloud 入门 10 (eureka高可用)

eureka高可用: 说白了&#xff0c;就是加一个实例作为原实例的备份&#xff0c;然后一起对外提供服务。这样可以保证在一台机器宕机的时候&#xff0c;整个系统不会死掉。保证其继续对外服务。 eureka的集群化&#xff1a; 服务注册中心Eureka Server&#xff0c;是一个实例&am…

为什么REST如此重要

这篇文章致力于REST&#xff0c;一种塑造Web服务的体系结构风格&#xff0c;以及IT历史上最容易被误解的概念。 这篇文章针对的是那些正在设计Web服务api的人&#xff0c;他们并未完全了解REST的实际含义。 我想给你个主意。 这篇文章也发给了那些想知道REST意味着什么的人&…

string类有可以调换方向的函数吗_String类中常用的操作

一、获取:1、获取字符串的长度(注意是方法&#xff0c;不是跟数组的属性一样的)int length();1 public static void getLength(){2 String s "java01";3 int len s.length();4 System.out.println(len);5 }2、根据位置&#xff0c;获取该位置的那一个字符(只能是单…

你真的懂js获取可视区宽高吗

可能你会觉得获取可视区宽高不是很简单吗 原生js获取高度不就是就window.innerHeight一句话的事&#xff0c;可是真的这么简单吗 来看个测试页面,如果页面带有横向纵向的滚动条&#xff0c;我们打印出各个高度进行查看对比 顺便你也可以看看document.body和document.documentEl…

工作第七天

今天完成了一个简易的oauth服务器&#xff0c;通过login跳转到oauth保存uri和client_id&#xff0c;等待用户登录判断是否能get到user同时判断用户名和密码是否匹配&#xff0c;重定向到uri同时增加code参数&#xff0c;通过判断是否有code重定向回oauth&#xff0c;如果有code…

网上linux实验平台,Linux操作系统实验教程

第一部分 Linux操作系统基本原理.第1章 Linux操作系统简介1.1 Linux的渊源和发展简史1.2 Linux的基本特性1.3 Linux内核的开发模式与内核版本号1.4 Linux发行版介绍1.5 Linux内核源代码组织结构1.6 学习Linux的辅助软件介绍第2章 Linux的进程管理2.1 进程与进程描述符2.2 进程状…

詹金斯的Maven报告

代码质量是一个敏感的话题。 它会影响您的维护成本以及客户满意度。 更不用说您的开发人员使用代码的动力。 谁想要修复难看的代码&#xff0c;对吗&#xff1f; 讨论代码质量总是需要事实和数字&#xff01; 因此&#xff0c;这是一个简短的教程&#xff0c;介绍如何创建一些…

python实现矩阵叉乘_矩阵乘法的纯Python实现 | 离开Python库!!

点击关注我哦一篇文章带你了解矩阵乘法的纯Python实现在《这篇文章》中&#xff0c;我们有简单提到“矩阵乘法”的相关知识&#xff0c;如果你不记得了&#xff0c;可以复习一下这张图片。想起来了没&#xff1f;本篇文章将深入探讨在没有机器学习库的情况下如何从零实现矩阵乘…

Github Actions:再次改变软件开发

本文转自 FEPulse 公众号&#xff08;微信搜索 FEPulse&#xff0c;精选国内外最新前端资讯&#xff0c;为你把握前端脉搏&#xff09;。 Github Actions 是 GitHub Universe 大会上发布的&#xff0c;被 Github 主管 Sam Lambert 称为“再次改变软件开发”的一款重磅功能&…

为别人软件加入广告或者密码(特别思路)

洪雨的的这款软件比较奇特&#xff0c;是忽然想到一个思路&#xff0c;然后实现了一下。 exe文件都有一个很有趣的地方&#xff0c;只要内部完整&#xff0c;就可以运行。比如一个exe文件&#xff0c;我们运行的时候&#xff0c;电脑知道他是exe所以可以直接运行。假如洪雨将它…