• 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. 线上服务器上安装的VNCServer不能正常工作

    1.问题描述: 线上服务器上安装的不能正常工作 2.解决问题过程: 一. 重启vncserver 运行命令:vncserver -kill :1和vncserver :1 二. 发现vncserver ...

  2. 利用appium-1.5.3.dmg安装Appium. doctors时,提示 Could not detect Mac OS X Version from sw_vers output: '10.12'

    发生这种错误的原因是因为:appium不支持mac 10.12版本. 解决方法: https://stackoverflow.com/questions/40129794/how-to-fix-err ...

  3. ABAP开发人员未来应该学些什么

    2007年1月我大学毕业进入SAP Chengdu从事开发工作,到今天已经整整11年了. 这张图在ABAP开发圈子里曾广为流传: 为了避免这种窘境发生在ABAPer身上,我们应该做点什么呢? 2017 ...

  4. asp.net mvc 记录Action耗时

    可能有些时候需要记录Action的执行时间来优化系统功能,这时可以用过滤器来实现. 新建项目 项目名称随便取 身份验证:不进行身份验证 安装Nlog 这里使用NLog来输出日志,具体使用说明请看:ht ...

  5. Label 和 checkbox 不为人知的小秘密

    最近开发的时候同事遇见了一个问题,点击label的时候改变checkbox的属性,或许大家觉得这是一个很简单的问题,然而这里面却蕴藏着一个大坑! 举例说明: 页面简单,就是一个 <input i ...

  6. mysql5.7 设置远程访问

    mysql5.7设置远程访问不是和网上说的一样建个用户赋个权限就可以访问的.比如下边这个就是建用户赋权限,可能在之前的版本可以,但是我在我的mysql上一直不行.为此烦了好久!!!项目都耽误了!! 一 ...

  7. [已解决]pip安装包时报错:Read time out

    有一些包在源在国外,因为某些原因,网络并不是很好,常常会发生Read time out安装失败的问题. 一般解决方法有:修改国内的安装源,如果能够获取只是慢的话,还有中比较懒的方法就是增加读取的时间. ...

  8. OOAD-设计模式(一)概述

    前言 在我们很多时候设计代码都是需要用到各种不一样的设计模式的,接下来着几篇给大家领略一下设计模式.知道设计模式的作用,以及在代码的具体体现.很多时候我们看不懂代码就是因为我们不知道它使用的设计模式. ...

  9. Codeforces 626F Group Projects(滚动数组+差分dp)

    F. Group Projects time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...

  10. hbmy周赛1--E

    E - Combination Lock Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I6 ...