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的更多相关文章

  1. JavaWeb三大组件(Servlet、Filter、Listener)

    JavaWeb三大组件指的是:Servlet.Filter.Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet.Filter,比 ...

  2. Javaweb三大组件之一 servlet

    1.servlet基本使用 注意:单例:init只会执行一次    线程不安全 1.1 创建方式 (1)实现servlet接口[不使用] package cn.getword.servlet; imp ...

  3. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  4. 学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)

    过滤器Filter Filter和Lister是Servlet规范里的两个高级特性.不同于Servlet,它们不用于处理客户端请求,只用于对request.response进行修改或者对context ...

  5. JavaWeb三大组件

    一.JavaWeb三大组件 Servlet,Listener,Filter.它们在JavaWeb开发中分别提供不同的功能. JavaWeb三大组件都必须在Web.xml中配置 二.三大组件 1.Ser ...

  6. JavaWeb三大组件—过滤器filter

    JavaWeb三大组件 1. 都需要在web.xml中进行配置ServletListener(2个感知监听器不需要配置)Filter 2. 过滤器 它会在一组资源(jsp.servlet..css.. ...

  7. 转-JavaWeb三大组件之Listener监听器

    JavaWeb三大组件之Listener监听器一.概述1,它是一个接口,内容由我们来实现 2,它需要注册,例如注册在按钮上 3,监听器中的方法,会在特殊事件发生时被调用 二.JavaWeb中的监听器1 ...

  8. JavaWeb三大组件之一Filter知识总结

    [1] Filter简介    > Filter翻译为中文是过滤器的意思.    > Filter是JavaWeb的三大web组件之一Servlet.Filter.Listener    ...

  9. Filter过滤器-JavaWeb三大组件之一

    Servlet.Filter.Listener是JavaWeb的三大组件,给Web开发提供了很大的便利. 什么是Filter? Filter,过滤器.类似与生活中的净水器.空气净化器. JavaWeb ...

随机推荐

  1. 使用pip安装包提示TLS证书错误解决办法

    最近有在使用pip安装python包的时候,总会出现以下类似的错误: Could not fetch URL https://pypi.python.org/simple/pytest-xdist/: ...

  2. BufferedStream说明

    BufferedStream并不是将所有内容都存放到内存中,而MemoryStream则是. BufferedStream必须跟其他流如FileStream结合使用,而MemoryStream则不用

  3. 《DOM Scripting》学习笔记-——第八章 充实文档的内容

    本章内容 一.一个为文档创建“缩略词语表”的函数 二.一个为文档创建“文献来源链接”的函数 三.一个为文档创建“快速访问键清单”的函数 利用DOM动态的收集和创建一些有用的辅助信息,并把它们呈现在网页 ...

  4. ARTS打卡计划第二周-Tips-mysql-binlog-connector-java的使用

    最近发现一个挺不错的框架mysql-binlog-connector-java,可以实时监控binlog的变化. 首先检查mysql的binlog是否开启,在开启的情况下: 引入依赖 <depe ...

  5. Java Web解决跨域请求

    要知道跨域请求就要先了解同源策略,那么什么是同源?什么是不同源?简单来说就是,如果两个资源,包括HTML页面.JavaScript脚本.css样式,对应的协议.域名和端口完全相同,那么这两个资源就是同 ...

  6. 基于Dapper写的一个sqlhelp适用于多版本数据库

    ConnectionInit方法用于初始化数据库连接对象, 只需要修改databasetype参数即可进行适用各个版本的数据库, ExecuteNonQuery方法用于执行增.删.改操作,返回受影响的 ...

  7. webpack多入口优化

    最近接手的项目是公司之前搭的多页面应用脚手架,然后到现在入口页面大大小小超过半百了,然后每次更新完配置之后,重启页面就贼拉卡,实在太影响开发效率了,于是开始优化呗. 最开始发现如果你想要让加载速度变快 ...

  8. python_Tkinter

    Tkinter相关 python支持多种图形界面的第三方库,包括:TKwxWidgetsQTGTK等等但是python自带的库是支持TK的TKinter,使用使用Tkinter,无需安装任何包,就可以 ...

  9. python爬虫系列之初识爬虫

    前言 我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识,做网络爬虫还是需要基本的前端的 ...

  10. 了解计算机与操作系统发展阶段--Windows

    Windows发展的30多年,其实就是整个计算机应用,从小众化向大众化消费领域,快速前行的30多年. 让我们来一起温故下Windows这么多年的发展历程,看看Windows,是如何在市场和技术这两种力 ...