Servlet

本文介绍Servlet的基本概念,包括其如何响应客户端的不同请求类型,如GET、POST等,并解释了Servlet的生命周期及配置方法。
Servlet 是个特殊的Java 类,这个Java 类必须继承HttpServlet 。每个Servlet 可以响应客户端的请求。Servlet 提供不同的方法用于响应客户端请求。
• doGet: 用于响应客户端的get 请求。
• doPost: 用于响应客户端的post 请求。
• doPut: 用于响应客户端的put 请求。
• doDelete: 用于响应客户端的delete 请求。
事实上,客户端的请求通常只有get 和post 两种; Servlet 为了响应这两种请求,必须重写doGet 和doPost 两个方法。如果Servlet 为了响应四个方法,则需要同时重写上面的四个方法。
大部分时候, Servlet 对于所有请求的响应都是完全一样的。此时,可以采用重写一个方法来代替上面的几个方法, Servlet 只需重写service 方法即可响应客户端的所有请求。
另外, HttpServlet 还包含两个方法。
• init(ServletConfig config): 创建Servlet 实例时,调用的初始化方法。
• destroy(): 销毁Servlet 实例时,自动调用的资源回收方法。
通常无须重写init()和destroy()两个方法,除非需要在初始化Servlet 时,完成某些资源初始化的方法,才考虑重写init 方法。如果需要在销毁Servlet 之前,先完成某些资源的回收,比如关闭数据库连接等,才需要重写destroy 方法。
注意:如果重写了init(ServletConfig config)方法,则应在重写该方法的第一行调用super.init(config) 。该方法将调用HttpServlet 的init 方法。
Servlet 和JSP 的区别在于:
• Servlet 中没有内置对象,原来JSP 中的内置对象都必须通过HttpServletRequest对象,或由HttpServletResponse 对象生成;
• 对于静态的HTML 标签, Servlet 都必须使用页面输出流逐行输出。
JSP 是Servlet 的一种简化,使用JSP 只需要完成程序员需要输出到客户端的内容,至于JSP 中的Java 脚本如何镶嵌到一个类中,由JSP 容器完成。而Servlet 则是个完整的Java 类,这个类的service 方法用于生成对客户端的响应。

编辑好的Servlet 源文件并不能响应用户请求,还必须将其编译成class 文件。将编译后的FirstServlet. class 文件放在WEB-INF/classes 路径下,如果Servlet 有包,则还应该将class 文件放在对应的包路径下。
为了让Servlet 能响应用户请求,还必须将Servlet 配置在Web 应用中。配置Servlet时,需要修改web.xrnl 文件。
配置Servlet 需要配置两个部分。
·配置Servlet 的名字:对应web.xml 文件中的<servlet/>元素。
·配置Servlet 的URL: 对应web.xml 文件中的<servlet-mapping/>元素。
因此,配置一个能响应客户请求的Servlet ,至少需要配置两个元素,例:
<! -- 配置Servlet 的名字-->
<servlet>
<! -- 指定Servlet 的名字-->
<servlet-name>firstServlet</servlet-name>
<! -- 指定Servlet 的实现类--〉
<servlet-class>lee.FirstServlet</servlet-class>
</servlet>
<! -- 配置Servlet 的URL-->
<servlet-mapping>
<!--指定Servlet 的名字-->
<servlet-name>firstServlet</servlet-name>
<!--指定Servlet 映射的URL 地址-->
<url-pattern>/firstServlet</url-pattern>
</servlet-mapping>


Servlet 的创建有两个选择。
·客户端请求对应的Servlet 时,创建Servlet 实例:大部分的Servlet 都是这种Servlet 。
• Web 应用启动时,立即创建Servlet 实例:即load-on-startup Servlet 。
每个Servlet 的运行都遵循如下生命周期。
(1)创建Servlet 实例。
(2) Web 容器调用Servlet 的init 方法,对Servlet 进行初始化。
(3) Servlet 初始化后,将一直存在于容器中,用于响应客户端请求。如果客户端有get 请求,容器调用Servlet 的doGet 方法处理并响应请求。对于不同的请求,有不同的处理方法,或者统一使用service 方法处理来响应用户请求。
(4) Web 容器角色销毁Servlet 时,调用Servlet 的destroy 方法,通常在关闭Web容器之时销毁Servlet。
Servlet生命周期:
开始-->创建实例完成-->初始化-->响应客户端请求-->被销毁-->结束
在标准的MVC 模式中, Servlet 仅作为控制器使用。
M: Model,即模型,对应JavaBean 。
V: View ,即视图,对应JSP 页面。
C: Controller,即控制器,对应Servlet。

load-on-startup Servlet
Servlet 的实例化有两个时机:用户请求之时,或应用启动之时。应用启动时就启动的Servlet 通常是用于某些后台服务的Servlet ,或者拦截很多请求的Servlet; 这种Servlet 通常作为应用的基础Servlet 使用,提供重要的后台服务。
如果需要Web 应用启动时,可使用load-on-startup 元素完成Servlet 的初始化。load-on-startup 元素只接收一个整型值,这个整型值越小, Servlet 就越优先初始化。
<servlet>
<! -- Servlet 名-->
<servlet-name>timerServlet</servlet-name>
<!-- Servlet 的实现类-->
<servlet-class>lee.TimerServlet</servlet-class>
<!-- 配置应用启动时,创建Servlet 实例-->
<load-on-startup>l</load-on-startup>
</servlet>
该Servlet 将一直作为后台服务执行。

访问Servlet 的配置参数:
访问Servlet 配置参数要通过ServletConfig 类的实例完成, ServletConfig提供如下
方法。
• java.lang.String getInitParameter(java.lang.String name): 用于获取初始化参数。
注意: JSP 的内直对象config 就是此处的ServletConfig
//获取ServletConfig对象
ServletConfig config = getServletConfig();
//通过ServletConfig对象获取配置参数: dirver
String driver = config.getInitParameter("driver");

Servlet 访问配置参数的方式非常类似于application方式。只是application 的配置参
数对整个Web 应用有效,而Servlet 配置参数仅对该Servlet 有效,下面是配置该Servlet的配置片段:
<servlet>
<!--配置Servlet 名-->
<servlet-name>testServlet</servlet-name>
<!--指定Servlet 的实现类-->
<servlet-class>lee.TestServlet</servlet-class>
<!--配置Servlet 的初始化参数: driver-->
<init-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!--确定Servlet 名-->
<servlet-name>testServlet</servlet-name>
<!--配置Servlet 映射的URL-->
<url-pattern>/testServlet</url-pattern>
</servlet-mapping>
采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值