JavaWeb三大组件之Servlet
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/Servlet.html
一、Servlet继承结构体系图

从结构图中可以看出,实现一个自定义的Servlet主要有3中方式:
- 实现最顶层的Servlet接口,并重写接口中init、getServletConfig、service、getServletInfo、destory方法
- 继承GenericServlet抽象类
直接实现Servlet接口需要重写接口中全部的5个方法,这种方式实现自定义Servlet过于繁琐。GenericServlet抽象类实现了Servlet接口并重写了基接口中除Service方法外的其他所有方法。通过继承并重写GenericServlet抽象类中的Service抽象方法,即可完成自定义的Servlet开发。另外GenericServlet是不特定于任何协议的。
- 继承HttpServlet抽象类
HttpServlet是派生自GenericServlet的特定于Http协议的抽象类,并重写了父类中的Service方法,在该方法中会将ServletRequest和ServletResponse对象分别强转为HttpServletRequest、HttpServletResponse对象。HttpServlet类中还重载了Service方法,参数分别为HttpServletRequest、HttpServletResponse。在该方法内部会根据不同的请求方式调用不同的doXX方法。因此,当通过继承HttpServlet来实现自定义的Servlet时,只需要重写相应的doXX方法即可(例如doGet、doPost等)。
二、Servlet生命周期
Servlet生命周期主要分为以下3个阶段
1、初始化阶段(init):
Servlet容器加载Servlet对象后,服务器将会立即调用其init()方法。该方法主要是在Servlet对象响应请求之前完成一些初始化工作。例如读取应用程序配置信息(如数据库连接配置,主要是通过ServletConfig对象完成)。init()方法在Servlet的整个生命周期中不管执行多个少请求,都只会被调用一次
2、请求处理阶段(service):
响应逻辑处理方法,该方法通过ServletRequest获取客户端请求相关信息,通过ServletResponse设置响应信息。客户端每一次请求服务器都会开启一个新的线程并执行Servlet的service()方法,因此Service方法运行在多线程环境下,需要考虑线程安全问题(尽量确保该方法中不会同时操作全局变量等)。在Servlet的整个生命周期中,service方法可能会被执行0次、1次或多次。
3、销毁阶段(destory):
Servlet对象被销毁(如Servlet容器被关闭或重启)时将执行其destory()方法,以释放其占用的资源。Servlet对象的destory()方法在其整个生命周期中只会被执行一次
三、Servlet加载和实例化时机
默认情况下,第一次请求的时候,Servlet对象将会被创建。当web.xml文件中Servlet配置了启动参数<load-on-startup>时,该Servlet将会在Servlet容器启动时创建
四、配置Servlet的方式
1、使用xml配置
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.demo.web.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
2、使用注解配置
@WebServlet(name = "MyServlet",
urlPatterns = "/MyServlet",
loadOnStartup = 1,
initParams = {@WebInitParam(name = "username", value = "root"), @WebInitParam(name = "userpwd", value = "123456")})
五、示例代码
MyServlet.java
package com.fengjr.demo01; import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("doGet请求逻辑方法开始<br/>");
String paraStr = req.getParameter("paraStr");
String attrStr = (String) req.getAttribute("attrStr");
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("doGet请求方法逻辑结束,请求参数paraStr = " + paraStr + ",attrStr = " + attrStr);
}
}
web.xml
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.fengjr.demo01.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
JavaWeb三大组件之Servlet的更多相关文章
- JavaWeb三大组件(Servlet、Filter、Listener)
JavaWeb三大组件指的是:Servlet.Filter.Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet.Filter,比 ...
- Javaweb三大组件之一 servlet
1.servlet基本使用 注意:单例:init只会执行一次 线程不安全 1.1 创建方式 (1)实现servlet接口[不使用] package cn.getword.servlet; imp ...
- JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)
JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference
- 学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)
过滤器Filter Filter和Lister是Servlet规范里的两个高级特性.不同于Servlet,它们不用于处理客户端请求,只用于对request.response进行修改或者对context ...
- JavaWeb三大组件
一.JavaWeb三大组件 Servlet,Listener,Filter.它们在JavaWeb开发中分别提供不同的功能. JavaWeb三大组件都必须在Web.xml中配置 二.三大组件 1.Ser ...
- JavaWeb三大组件—过滤器filter
JavaWeb三大组件 1. 都需要在web.xml中进行配置ServletListener(2个感知监听器不需要配置)Filter 2. 过滤器 它会在一组资源(jsp.servlet..css.. ...
- 转-JavaWeb三大组件之Listener监听器
JavaWeb三大组件之Listener监听器一.概述1,它是一个接口,内容由我们来实现 2,它需要注册,例如注册在按钮上 3,监听器中的方法,会在特殊事件发生时被调用 二.JavaWeb中的监听器1 ...
- JavaWeb三大组件之一Filter知识总结
[1] Filter简介 > Filter翻译为中文是过滤器的意思. > Filter是JavaWeb的三大web组件之一Servlet.Filter.Listener ...
- Filter过滤器-JavaWeb三大组件之一
Servlet.Filter.Listener是JavaWeb的三大组件,给Web开发提供了很大的便利. 什么是Filter? Filter,过滤器.类似与生活中的净水器.空气净化器. JavaWeb ...
随机推荐
- Serv-U 配置说明(虚拟路径、网络驱动器、个人文件夹,数据库管理)
实现效果 1.用户数据存在数据库,可以自己修改. 2.支持匿名用户使用部分功能 3.每个用户均有私人文件夹,可以自己存放文件 4.FTP内主要的文件都在存储内,不存在服务器上 匿名用户访问情况: 普通 ...
- 开启mysql-binlog日志操作步骤
步骤1:找到mysql主库的配置文件(注意:不能为从库),lunix系统路径一般为/etc/my.cnf 步骤2:修改配置文件(可以提前备份一下)以开启mysql-binlog功能.添加以下3行: l ...
- (转)医疗IT运维系统
http://www.ewei.com/ask/87.html 含义解释 itil运维管理系统,为用户提供专业的it运维管理,对网络运行的状态.故障.性能等监控,又从业务的视角为管理人员提供综合分析和 ...
- 聚宽投资研究获取A股05年至今全部数据
#用中正全指'000985.XSHG'获取全部A股数据pool=get_index_stocks('000985.XSHG') #date存储05年开始全部交易时间 date=get_price('0 ...
- java批量生成用例脚本-保留字关键词的用例脚本生成
20171012新补丁包程序,程序整理了全部的关键字和保留字,支持 字段a = "字段b" 与 字段a = 字段b,并做了代码重构.对补丁包进行关键字专项测试,验证关键字保留字作为 ...
- Cocos2dx开发之运行与渲染流程分析
学习Cocos2dx,我们都知道程序是由 AppDelegate 的方法 applicationDidFinishLaunching 开始,在其中做些必要的初始化,并创建运行第一个 CCScene 即 ...
- pip升级后出现cannot import name 'main'
运行pip install --upgrade pip还有出现这个情况. cd /usr/bin/pip3 修改成: from pip import __main__ if __name__ == ...
- python3作业:模拟登录
__author__ = "bin007" customer = {}#存储用户信息#处理用户信息文件try: with open('login.txt','r',encoding ...
- 毕设之iframe跳转子页面问题
我的Django项目中的index.html分为三个层次,head.body.footer.其中body细分为left和right两部分,right的地图是使用iframe嵌入的map.html页面, ...
- jQuery index() 方法
比如同一级有多个li,获得点击的元素的下标,确定第几个. $("li").click(function(){alert($(this).index());});