• servlet主要数据结构

Servlet 接口:主要定义了servlet的生命周期方法

ServletConfig接口:为servlet提供了使用容器服务的若干重要对象和方法。

ServletContext接口:是Servlet的上下文对象,这个对象是在服务器启动时创建的,为servlet提供了使用容器服务的若干重要方法。

GenericServlet抽象类:为servlet提供了一般的实现(包括实现了servlet和ServletConfig两个接口),保存了容器通过init方法传递给servlet的一个ServletConfig类型的重要对象。

HttpServlet抽象类:为处理http请求的servlet提供了一般实现,主要是定义和实现了若干service方法。



  • servlet继承关系

在整个Servlet程序中最重要的就是Servlet接口了,在此接口下定义了一个GenericServlet的子类,但是一般都不会直接继承此类,而是根据所使用的协议选择GenericServlet的子类继承。一般的,我们都采用HTTP协议处理,所以一般而言当需要使用HTTP协议操作时我们自定义的Servlet都要继承HttpServlet类。具体的继承关系如下:

Servlet-->GenericServlet-->HttpServlet-->我们自己的Servlet。





OK,现在来看一下Servlet接口:

  • 定义

public interface Servlet

这个接口定义了一个 Servlet:一个在 Web 服务器上继承了这个功能的 Java 类。

  • 方法

1、init

public void init(ServletConfig config) throws ServletException;

Servlet 引擎会在 Servlet 实例化之后, 置入服务之前精确地调用 init 方法。 在调用 service方法之前,init 方法必须成功退出。如果 init 方法抛出一个 ServletException,你不能将这个 Servlet 置入服务中,如果 init方法在超时范围内没完成,我们也可以假定这个 Servlet 是不具备功能的,也不能置入服务中。

2、service

public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException;

Servlet 引擎调用这个方法以允许 Servlet 响应请求。这个方法在 Servlet 未成功初始化之前无法调用。在 Servlet 被初始化之前,Servlet 引擎能够封锁未决的请求。在一个 Servlet 对象被卸载后,直到一个新的 Servelt 被初始化,Servlet 引擎不能调用这个方法

3、destroy

public void destroy();

当一个 Servlet 被从服务中去除时,Servlet 引擎调用这个方法。在这个对象的 service 方法所有线程未全部退出或者没被引擎认为发生超时操作时,destroy 方法不能被调用。

4、getServletConfig

public ServletConfig getServletConfig();

返回一个 ServletConfig 对象,作为一个 Servlet 的开发者,你应该通过 init 方法存储ServletConfig 对象以便这个方法能返回这个对象。为了你的便利,GenericServlet 在执行这个接口时,已经这样做了。

5、getServletInfo

public String getServletInfo();

允许 Servlet 向主机的 Servlet 运行者提供有关它本身的信息。返回的字符串应该是纯文本格式而不应有任何标志(例如 HTML,XML 等) 。

package linkin;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class LinkinServlet implements Servlet
{ public void destroy()
{
System.out.println("销毁的方法被调用。。。");
} public ServletConfig getServletConfig()
{
return null;
} public String getServletInfo()
{
return null;
} public void init(ServletConfig arg0) throws ServletException
{
System.out.println("初始化方法被调用。。。");
} public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException
{
//1.编写输出语句,证明当前方法被调用
System.out.println("处理请求,返回响应。。。");
//2.通过PrintWriter对象向浏览器端发送响应信息
PrintWriter writer = arg1.getWriter();
writer.write("成功跳转。。。");
writer.close();
} }
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>LinkinServlet</servlet-name>
<!-- 注册Servlet实现类的全类名 -->
<servlet-class>linkin.LinkinServlet</servlet-class>
</servlet>
<!-- 建立一个从虚拟路径到Servlet组件之间的映射关系 -->
<servlet-mapping>
<!-- 引用Servlet组件名称 -->
<servlet-name>LinkinServlet</servlet-name>
<!-- 映射到Servlet的虚拟路径:“/LinkinServlet” -->
<url-pattern>/LinkinServlet</url-pattern>
</servlet-mapping> </web-app>

Servlet--Servlet接口的更多相关文章

  1. Servlet相关接口和Servlet的生命周期

    http://www.cnblogs.com/luotaoyeah/p/3860292.html Servlet相关接口和Servlet的生命周期 创建一个Servlet类最直接的方式是实现javax ...

  2. Java Web 学习与总结(二)Servlet核心接口+Servlet3.0配置

    Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的 ...

  3. Servlet - Servlet相关

    1. 概念 Servlet是指任何实现了Servlet接口的类, Servlet运行于支持Java的应用服务器中, Servlet可以响应任何类型的请求, 但大多数情况下, Servlet只用来扩展基 ...

  4. org.apache.cxf.transport.servlet.CXFServlet cannot be cast to javax.servlet.Servlet

    java.lang.ClassCastException: org.apache.cxf.transport.servlet.CXFServlet cannot be cast to javax.se ...

  5. sae Servlet class XXXX is not a javax.servlet.Servlet

    以前都是使用myeclipse开发web工程上传sae后没有问题,但是使用javaee导出war包上传sae 无法访问 Servlet class  XXXX is not a javax.servl ...

  6. cannot be cast to javax.servlet.Servlet

    在第一次开发Maven项目时,maven环境和仓库以及eclipse都和讲师讲解的一样,可是却遇到下面这个问题: java.lang.ClassCastException: servlet.UserS ...

  7. java.lang.ClassCastException: cn.itcase.serviceImpl.servicestudentImpl cannot be cast to javax.servlet.Servlet

    java.lang.ClassCastException: cn.itcase.serviceImpl.servicestudentImpl cannot be cast to javax.servl ...

  8. 异常:Servlet class X is not a javax.servlet.Servlet

    使用Maven命令 mvn archetype:create 创建了一个简单的web项目.导入Eclipse运行时,报这样的异常信息: Servlet class X is not a javax.s ...

  9. Servlet Servlet是Java平台上的CGI技术

    Servlet Servlet是Java平台上的CGI技术.Servlet在服务器端运行,动态地生成Web页面.与传统的CGI和许多其它类似CGI的技术相比,Java Servlet具有更高的效率并更 ...

  10. "xxx cannot be cast to jakarta.servlet.Servlet "报错解决方式

    在做jsp的上机时候同学出现了一个500错误:com.kailong.servlet.ComputeBill cannot be cast to jaka.servlet.Servlet 然后因为我用 ...

随机推荐

  1. Centos6.4三种更改hostname的方法之间的对比

    首先,利用hostname命令查看一下当前主机的主机名,在终端输入hostname,会发现显示的是完整的主机名称(主机名.域名),其中主机名与进入终端后:登录名@主机名,显示的一致,如下图所示: 其次 ...

  2. 自学Aruba2.3-Aruba Web UI --Configuration面板介绍

    点击返回:自学Aruba之路 自学Aruba2.3-Aruba Web UI --Configuration面板介绍 此文只展示重要面板,大部分通俗易懂就不过多语言介绍, 后期配置实例中再结合理论知识 ...

  3. 实体处理模块IEntityModule

    在2015年7月16日,XCode新增了实体处理模块IEntityModule,用于拦截实体对象添删改操作. 该接口参考IHttpModule设计理念,横切在实体对象的关键生命周期之中,以达到多实体类 ...

  4. 【JavaScript流程控制语句的用法及练习】

    1.做判断(if语句) if语句是基于条件成立才执行相应代码时使用的语句. 语法:  if(条件){  条件成立时执行代码   } 例子:1.假设你应聘web前端技术开发岗位,如果你会HTML技术,你 ...

  5. Codeforces 839D Winter is here【数学:容斥原理】

    D. Winter is here time limit per test:3 seconds memory limit per test:256 megabytes input:standard i ...

  6. BASH 学习笔记小结

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...

  7. SSM框架原理,作用及使用方法

    ---恢复内容开始--- 尊重原创:http://m.blog.csdn.net/dennis_wu_/article/details/73437097 作用: SSM框架是spring MVC ,s ...

  8. IntelliJ IDEA 配置 smartGit

    教你如何在IntelliJ IDEA中配置smartGit? 一.第一种方式: 1.在启动IDEA工具时,点击下拉按钮"Check out from Version Control" ...

  9. cesium编程入门(三)开始使用cesium开发

    搭建最简的开发环境 这一节来搭建一个最简单的能运行的helloworld,以后的代码也会在这一节的基础上慢慢增加 创建文件夹 mkdir cesium-test cd cesium-test 引入编译 ...

  10. 对SVD奇异值分解的理解

      首先推荐一篇博客,奇异值分解(SVD)原理详解及推导 - CSDN博客,讲解的很清楚.这里我谈谈自己的理解,方便以后回顾.   如果把向量理解为空间中的一个元素,那么矩阵可以理解为两个空间上的映射 ...