Servlet--Servlet接口

  • 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>

时间: 2024-11-06 17:14:17

Servlet--Servlet接口的相关文章

Servlet的接口实现类

Sun公司提供了两个默认实现类 GenericServlet和HttpServlet HttpServlet指能够处理Http请求的Servlet,它在原有的Servlet基础上添加了与HTTp相关的处理方法.因此编写Servlet事,通常继承这个类 HttpServlet复写了Server方法,在该方法内自动判断请求方式,根据GET请求和POST请求分别调用doGet和doPost方法.因此,通常只需要重写这两个方法即可,不用重写service方法. 直接new一个Servlet,就是继承于H

Servlet基础之一:Servlet基本接口与类

1.概述 Servlet API中共有5个包,约113个接口和类: javax.servlet javax.servlet.http javax.servlet.jsp javax.servlet.annotation javax.servlet.descriptor 2.Servlet接口 (1)所有Servlet/JSP应用必须直接或者间接实现Servlet接口, Servlet/JSP容器会将实现了Servlet接口的类加载至容器,以供访问. (2)Servlet中共定义了5个方法: vo

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

创建一个Servlet类最直接的方式是实现javax.servlet.Servlet接口,Servlet接口的定义如下,其中定义了5个方法,Servlet的生命周期就是通过这几个方法体现的: 1 public interface Servlet { 2 public void init(ServletConfig config) throws ServletException; 3 4 public ServletConfig getServletConfig(); 5 6 public voi

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

Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的注解支持. @WebServlet @WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Servlet.该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是 vlaue 或者 urlPatterns 通常是必

javax.servlet.Servlet源码分析

要编写一个Servlet,必然要实现javax.servlet.Servlet接口 源码如下package javax.servlet;import java.io.IOException; public interface Servlet { /* 此方法负责初始化Servlet对象,一旦Servlet容器创建好Servlet对象,那么一切初始化操作由这个方法完成. init()方法执行成功后,这个Servlet才能放入服务中,被客户端请求到. 发生妨碍servlet正常操作时,抛出Servl

maven构建web项目,cannot be cast to javax.servlet.Servlet

调试Spring MVC时发现如下异常: java.lang.ClassCastException: org.springframework.web.servlet.DispatcherServlet cannot be cast to javax.servlet.Servlet 问题出在servlet-api.jar上,tomcat部署springMVC项目时是不用这个包的,而用maven构建项目时需要,如果不引用该依赖就会不识别  HttpServletRequest等的类 解决方法是在ma

Tomcat服务器启动错误之Offending class: javax/servlet/Servlet.class

引子 最近在基于Wex5项目开发中,遇到使用过程中与Tomcat功能有关的错误提示, 如题所示.最终的解决方法就是删除掉项目上与tomcat冲突的jar包. org.apache.catalina.loader.WebappClassLoader validateJarFile ??: validateJarFile(/Users/zxzpc/Downloads/X5/WeX5_V3.4mac/apache-tomcat/webapps/../../runtime/BaasServer/WEB-

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

以前都是使用myeclipse开发web工程上传sae后没有问题,但是使用javaee导出war包上传sae 无法访问?Servlet class ?XXXX is not a javax.servlet.Servlet , 后来将打包的war包使用压缩工具打开删除libs里面的javaee.jar 保存 ,上传sae即可正常访问

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.servlet.Servlet maven下web项目依赖servlet-api.jar 1 <dependency> 2 <groupId>javax.servlet</groupId> 3 <artifactId>servlet-api</artifact

[Servlet]Servlet的继承链

通过创建Servlet的Java文件中的代码内容,可以发现创建的Servlet是继承于HttpServlet类,查看JavaEE帮助文档中的HttpServlet内容. Method Summary protected void doGet(HttpServletRequest req, HttpServletResponse resp) protected void doPost(HttpServletRequest req, HttpServletResponse resp) protect