传统的 JAVA 企业级应用开发中, Servlet 的配置一直是一件令开发人员头痛的事情。文章使用 Annotation 技术实现的 @Servlet 注解,可以让 Servlet 的配置不再繁杂,只需要简单的标注就可以实现 Servlet 的配置功能,能极大地简化开发人员的工作,也让配置文件更加干净简洁。
JAVA EE 规范中规定,在使用 Servlet 开发应用系统时,需要在 web.xml 文件中为每一个 Servlet 配置相关信息。一个大型应用系统中, Servlet 的数量是很庞大的,如果要为每一个 Servlet 都配置上述信息,这无疑是开发人员的噩梦。现在主流的 MVC 框架(如 Struts 、 WebWork ),它们在一定程度上解决了这样繁琐的配置,但这些框架本身就引入了大量的 XML 文件配置。 JDK1. 5 版本之后, JAVA 语言提供了一种叫做 Annotation(JSR250) 的新数据类型,中文译为注解或标注,它的出现为铺天盖地的 XML 配置文件提供了一个完美的解决方案,让 JAVA EE 开发更加方便快速,也更加干净了。
@Servlet 注解的实现
上面简要地介绍了注解的定义声明与使用方式,了解到了注解在后台需要一个处理器才能起作用。下面我们定义一个 @Servlet 注解,将 Servlet 在 web.xml 中的配置信息使用注解来表示,使用注解后,只需要在相应 Servlet 类的前面使用类似 @Servlet(“/servlet/Login”) 注解就可以达到和上述 web.xml 文件中配置信息一样的目的。注解 @Servlet 中的属性值 ” /servlet/Login” 表示了 web.xml 配置文件中 <servlet-mapping> 元素的子元素 <url-pattern> 里的值。通过这样的注解能简化在 XML 文件中配置 Servlet 信息,整个配置文件将会非常简洁干净,开发人员的工作也将大大减少。
1 注解的定义
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Servlet { String value(); }
@Target 注解的属性值表明了 @Servlet 注解只能用于类或接口定义声明的前面, @Servlet 注解有一个必填的属性 value 。调用方式为: @Servlet(value=“/xxxx”) ,因语法规定如果属性名为 value 且只填 value 属性值时,可以省略 value 属性名,即也可以写作:@Servlet(“/xxxx”) 。
2 使用注解后程序流程
在 web.xml 文件中配置:
<listener> <listener-class>edu.xju.AnnotationListener</listener-class> </listener> <context-param> <!-- 扫描包及其子包, 如果有多个参数,以逗号分隔 --> <param-name>basePackage</param-name> <param-value>edu.xju.web</param-value> </context-param> <servlet> <servlet-name>ActionServlet</servlet-name> <servlet-class>edu.xju.action.ActionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ActionServlet</servlet-name> <url-pattern>*.svt</url-pattern> </servlet-mapping>
观察 web.xml 文件,会发现系统实现了一个名为 AnnotationListener 的监听器和一个名为 ActionServlet 的 Servlet ,二者为 @Servlet 注解提供了后台处理器 。应用服务器(如 Tomcat )启动时加载 web.xml 文件,并会立即执行 AnnotationListener 监听器的 contextInitialized 方法,在此方法中,根据 <context-param> 元素指定的 basepackage 参数,读取这些包 (package) 及其子包下的所有类,使用 JAVA 中的反射 API 对这些类进行分析。如果类前使用了 @Servlet 注解,如 @Servlet(“/servlet/LoginServlet”) ,则以 Key 为 ”/servlet/LoginServlet” , Value 为此 Servlet 类的一个实例对象,放入一个 Map 结构中。解析这些包下的所有的类之后,将得到的此 Map 结构对象置入 ServletContext 对象中。到此,完成了注解的解析,服务器成功运行起来了。
3 服务器将以下图的方式与客户端进行交互
根据 web.xml 文件的配置,所有后缀名为 .svt 请求,都交由 ActionServlet 处理。 ActionServlet 本身也是一个 Servlet ,它也可以使用 @Servlet 注解方法进行配置,但将其配置在 web.xml 文件中具有更好的可读性与可维护性。 ActionServlet 继承于 HttpServlet ,重写了 HttpServlet 类中 protected 修饰的 service 方法。
在此 service 方法的实现代码中,从 HttpServletRequest 请求对象中得到请求的方式类型( GET/POST )和请求的 URI 。如有请求, http://localhost/testProject/servlet/loginServlet.svt ,此时请求方法类型为 POST , URI 值为 /testProject/servlet/loginServlet.svt 。从 ServletConext 对象中获取到在监听器中保存的 Map 结构,根据 URI 获得一个 Key=” /servlet/loginServlet” ,从 Map 结构中根据此 Key 得到 Value ,此时 Value 就是要请求调用的那个 Servlet 对象实例。再根据前面得到的请求方法类型,能决定调用此 Servlet 对象实例的 doGet 或 doPost 方法。最终客户端发生的后缀为 . svt 请求,经由 ActionServlet 对请求对象( HttpServletRequest )的分析,从而调用相应某 Servlet 的 doGet 或 doPost 方法,完成了一次客户端请求到服务器响应的过程。
4 注解的扩展
通过 @Servlet 注解, Servlet 不用再在 web.xml 文件中进行繁冗的注册。考虑性能因素,使用单例设计模式,让每个 Servlet 类在内存中只有一个实例,这些类的实例对象在服务器启动时在监听器中就已经产生了。
通过 @Servlet 注解,我们还可以减少 Servlet 类文件的数量,并且此时不要求类继承或实现 Servlet 任何的类或接口,一个普通的类即可。不过此时注解 @Servlet 不应放在类前面,而应该让它能放在方法前面,需要将 @Servlet 定义时的 @Target(ElementType.TYPE) 改成 @Target(ElementType.METHOD) 。加 @Servlet 注解的方法,名称可以是任意的,但参数必须有 HttpServletRequest 类型及 HttpServletResponse 类型。这是因为我们的方法要对请求和响应做相应的处理。
JAVA 提供的注解,为简化开发人员的工作带来了无限的可能。在 JAVA EE 5 版本中,提供了一些注解的使用来解化开发,而像 Struts2.x 、 Hibernate 、 Spring 等框架中,也开始加了大量的注解,使用这些注解可以极大地简化了配置文件的编写,基本上实现了“零配置”。注解还在面向切面编程( AOP )等领域都有很好的应用。在 JAVA 企业级应用开发中,注解技术将越来越广泛地被使用。
分享到:
相关推荐
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
weixin138社区互助养老+ssm(论文+源码)_kaic.zip
光纤到户及通信基础设施报装申请表.docx
项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
功能完善的电商数据智能爬虫采集系统项目全套技术资料.zip
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
### Android程序开发初级教程(一):初识Android **平台概述** Google推出的Android操作系统平台已经正式亮相,这是一个基于Linux内核的开源操作系统。对于开发者而言,了解其架构和支持的开发语言至关重要。以下是Android平台的架构概览: **平台架构及功能** 1. **应用框架(Application Framework)**:包含可重用和可替换的组件,确保所有软件在该层面上的平等性。 2. **Dalvik虚拟机(Dalvik Virtual Machine)**:一个基于Linux的虚拟机,为Android应用提供运行环境。 3. **集成浏览器(Integrated Browser)**:基于开源WebKit引擎的浏览器,位于应用层。 4. **优化图形(Optimized Graphics)**:包括自定义的2D图形库和遵循OpenGL ES 1.0标准的3D实现。 5. **SQLite数据库**:用于数据存储。 6. **多媒体支持(Media Support)**:支持通用音频、视频以及多种图片格式(如MPEG4, H.264
内容概要:本文档是《组合数学答案-网络流传版.pdf》的内容,主要包含了排列组合的基础知识以及一些经典的组合数学题目。这些题目涵盖了从排列数计算、二项式定理的应用到容斥原理的实际应用等方面。通过对这些题目的解析,帮助读者加深对组合数学概念和技巧的理解。 适用人群:适合初学者和有一定基础的学习者。 使用场景及目标:可以在学习组合数学课程时作为练习题参考,也可以在复习考试或准备竞赛时使用,目的是提高解决组合数学问题的能力。 其他说明:文档中的题目覆盖了组合数学的基本知识点,适合逐步深入学习。每个题目都有详细的解答步骤,有助于读者掌握解题思路和方法。
.net core mvc在线考试系统asp.net考试系统源码考试管理系统 主要技术: 基于.net core mvc架构和sql server数据库,数据库访问采用EF core code first,前端采用vue.js和bootstrap。 功能模块: 系统包括前台和后台两个部分,分三种角色登录。 管理员登录后台,拥有科目管理,题库管理,考试管理,成绩管理,用户管理等功能。 教师登录后台,可进行题库管理,考试管理和成绩管理。 用户登录前台,可查看考试列表,参加考试,查看已考试的结果,修改密码等。 系统实现了国际化,支持中英两种语言。 源码打包: 包含全套源码,数据库文件,需求分析和代码说明文档。 运行环境: 运行需vs2019或者以上版本,sql server2012或者以上版本。
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
包含了登陆注册、用户管理、部门管理、文件管理、权限管理、日志管理、个人中心、数据字典和代码生成这九个功能模块 系统采用了基于角色的访问控制,角色和菜单关联,一个角色可以配置多个菜单权限;然后再将用户和角色关联,一位用户可以赋予多个角色。这样用户就可以根据角色拿到该有的菜单权限,更方便管理者进行权限管控。 本系统还封装了文件管理功能,在其他模块如若要实现图片/文件上传预览时,前端只需导入现成的 Vue 组件即可实现(使用 viewerjs 依赖实现),后端只需定义 String 类型的实体类变量即可,无需再去研究文件上传预览的相关功能,简化了开发者的工作量。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
三相10Kw光伏并网逆变器。包含全套理图 PCB 源代码
GJB 5236-2004 军用软件质量度量文档,本称准规定了车用软件产品的质重模型和基本的度量。本标准为确定车用软件质量需求和衡量军用 软件产品的能力提供了一个框架。
基于MATLAB车牌识别系统【GUI含界面】.zip。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
【宿舍管理系统】是一种专为高校或住宿机构设计的信息化解决方案,旨在提高宿舍管理的效率和准确性。该系统包含了多项核心功能,如宿舍管理员管理、宿舍信息维护、查询、卫生检查以及电费缴纳等,旨在实现全面的宿舍运营自动化。 **宿舍管理员管理**功能允许指定的管理员进行用户权限分配和角色设定。这包括对管理员账户的创建、修改和删除,以及设置不同的操作权限,例如只读、编辑或管理员权限。通过这样的权限控制,可以确保数据的安全性和管理的规范性。 **宿舍添加与管理**是系统的基础模块。管理员可以录入宿舍的基本信息,如宿舍号、楼栋、楼层、房间类型(单人间、双人间等)、容纳人数、设施配置等。此外,系统还支持批量导入或导出宿舍信息,方便数据的备份和迁移。 **查询功能**是系统的重要组成部分,它允许管理员和学生根据不同的条件(如宿舍号、楼栋、学生姓名等)快速查找宿舍信息。此外,系统还可以生成各种统计报告,如宿舍占用率、空闲宿舍数量等,以便于决策者进行资源优化。 **卫生检查**功能则是对宿舍卫生状况进行定期评估。管理员可设定检查计划,包括检查周期、评分标准等,并记录每次检查的结果。系统能自动生成卫生报表,用于
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
九缸星形发动机点火器3D
本项目可以作为小程序毕设项目,主要功能为音乐播放器,主要功能是:可以播放歌曲(采用mp3网络连接实现)、专辑封面播放时可以旋转,能够实现开始和暂停播放,可以点击下一首歌曲,主页面实现动态轮播图
出差审批单(表格模板).docx