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




  • 相关阅读:
    HDFS文件读写操作(基础基础超基础)
    LeetCode & Q35-Search Insert Position-Easy
    LeetCode & Q27-Remove Element-Easy
    LeetCode & Q26-Remove Duplicates from Sorted Array-Easy
    LeetCode & Q1-Two Sum-Easy
    Full-Stack-Fundation-Udacity------Lesson 1 Working with CRUD
    利用封装、继承对Java代码进行优化
    排序算法——冒泡排序
    排序算法——希尔排序
    排序算法——直接插入排序
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233027.html
Copyright © 2020-2023  润新知