Servlet和web服務器關系


前面的博客我詳細的羅列了下Servlet的常用的類和接口,然后在前面的前面我類似tomcat模擬了一套web服務器,這里來做一個統一的整理,這樣子可以更好的把握Servlet,也可以更好的了解下web服務器原理。

  • 第一點:
Servlet是一套規范,也就是說其中的一部分的類抽象成了接口,實際過程中Servlet運行在web服務器中,具體的實現要有web服務器來實現,這個和JDBC的驅動一個道理。


在Servlet中,Servlet是一個接口,在Servlet中的init方法用來初始化這個Servlet,其中方法參數ServletConfig也是一個接口。然后呢,javax.servlet包為了我們提供了一個抽象類GenericServlet來實現這2個接口,然后HttpServlet抽象類繼承GenericServlet,我們如果底層來寫自己的Servlet也就是來繼承這個抽象類。為什么HttpServlet沒有抽象方法但是它卻被定義成是一個抽象類呢?個人覺得是這里的HttpServlet只是一個模板,將service方法也就是提供服務的方法具體的抽象成了doXXX等方法,所以這里定義成抽象類,我們開發自己的Servlet的時候具體的講doXXX重寫就OK。


  • 第二點:
Servlet是用來處理請求和響應的,Servlet為我們提供了request和response2個接口,web服務器就是實現了這2個接口用來處理請求和響應,我們要是自己想開發一套web服務器,其實最核心的也就是實現這2個接口。前面的博客里面也已經說過,自己寫一個server,啟動一個serverSocket用來監聽一個端口,然后自己實現一個request和一個response就可以跑一個web項目了,至於如何跳轉頁面,如果傳遞參數,這些就在request和response里面自己寫IO流就好了。




最后,我們自己寫一個自己的Servlet來看看里面具體的對象吧。

package linkin;

import java.io.IOException;

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
{

	@Override
	public void destroy()
	{
		
	}

	@Override
	public ServletConfig getServletConfig()
	{
		return null;
	}

	@Override
	public String getServletInfo()
	{
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException
	{
		System.out.println(arg0);
	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException
	{
		System.out.println(arg0);
		System.out.println(arg1);
	}


}
<?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">
	<servlet>
		<servlet-name>LinkinServlet</servlet-name>
		<servlet-class>linkin.LinkinServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>LinkinServlet</servlet-name>
		<url-pattern>/LinkinServlet</url-pattern>
	</servlet-mapping>

</web-app>


  • 第三點:Servlet的注冊與運行

Servlet程序必須通過Servlet容器來啟動運行,並且儲存目錄有特殊要求,通需要存儲在<WEB應用程序目錄>\WEB-INF\classes\目錄中。 Servlet程序必須在WEB應用程序的web.xml文件中進行注冊和映射其訪問路徑,才可以被Servlet引擎加載和被外界訪問。一個<servlet>元素用於注冊一個Servlet,它包含有兩個主要的子元素:<servlet-name>和<servlet-class>,分別用於設置Servlet的注冊名稱和Servlet的完整類名。 一個<servlet-mapping>元素用於映射一個已注冊的Servlet的一個對外訪問路徑,它包含有兩個子元素:<servlet-name>和<url-pattern>,分別用於指定Servlet的注冊名稱和Servlet的對外訪問路徑。


最后這里以2張圖片結束本篇博客:

1,tomcat的目錄層次結構,前面博客也有詳細整理,這里只做復習


2,Servlet規范中定義了web應用程序的目錄層次




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM