Servlet和web服务器关系

原创 2015年07月07日 10:49:28
前面的博客我详细的罗列了下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应用程序的目录层次



版权声明:本文为博主原创文章,欢迎大家转载。如有错误请多多指教。

相关文章推荐

web容器 web服务器 servlet/jsp容器 之间的区别和关系

Web服务器(软件): Apache http server, 这个它的网址,http://httpd.apache.org/download.cgi#apache24,实现的是HTTP协议,提供的...

web容器 web服务器 servlet/jsp容器 之间的区别和关系

今天学习tomcat时发现一篇写的比较好的文章,故分享给大家 Web服务器(软件): Apache http server, 这个它的网址,http://httpd.apache.org/...

深入理解Java Servlet与Web容器之间的关系

理解Java Servlet与Web容器之间的关系,有利于理解Java Web应用的运行方式。进而让Java开发者能够设计和开发出更合理的Java Web应用程序。...

servlet版本与tomcat版本对应关系,各版本web.xml头信息写法

Apache官方对各版本的解释:http://tomcat.apache.org/whichversion.html The mapping between the specificatio...
  • zzy7075
  • zzy7075
  • 2017年03月13日 15:32
  • 1418

web容器和servlet的关系

CGI(Common Gateway Interface),通用网关接口 通用网关接口,简称CGI,是一种根据请求信息动态产生回应内容的技术。通过CGI,Web 服务器可以将根据请求不同启动不同...

初学者对Servlet、JSP及Web容器之间关系的理解

Servlet就是一个Java程序,一个Servlet应用程序经常包含一个或者多个Servlet也就是当用户发送请求,例如提交表单,那么需要一个或多个Servlet协同作用,而访问的jsp页面也是一个...

servlet和web容器之间的关系

Java是一种动态加载和运行的语言。也就是说当应用程序持有一个类的地址(CLASSPATH)和名称(包名和类名)的情况下,可以在程序运行期 间任何时候加载这个类,并创建和使用该类的对象。Servlet...
  • seelye
  • seelye
  • 2013年01月05日 16:46
  • 10037

大师之路解惑基础概念篇:Java Servlet与Web容器之间的关系

原文:http://developer.51cto.com/art/201005/202412.htm 深入理解Java Servlet与Web容器之间的关系 理解Java Ser...

深入理解Java Servlet与Web容器之间的关系

http://developer.51cto.com/art/201005/202412.htm 深入理解Java Servlet与Web容器之间的关系 2010-05-27 15:0...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Servlet和web服务器关系
举报原因:
原因补充:

(最多只允许输入30个字)