前面的博客我详细的罗列了下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应用程序的目录层次

最新文章

  1. 【无私分享:ASP.NET CORE 项目实战(第十三章)】Asp.net Core 使用MyCat分布式数据库,实现读写分离
  2. msql数据迁移,myisam及innoDB
  3. oracle在cmd中启动数据库实例
  4. 即时聊天IM之一 XMPP协议简述
  5. nodejs模块——http模块
  6. css外边距合并和z-index的问题
  7. 重构第17天提取父类(Extract SuperClass)
  8. Github排行榜
  9. 队列理论和队列网络模型 queueing theory and queueing network model
  10. 【转载】错误:ORA-28002: the password will expire within 7 days 解决方法
  11. 编译Android4.3内核源代码
  12. hdoj 2601(判断N=i*j+i+j)
  13. Hadoop 安装(3) JDK 的安装
  14. kinect (oldest one) (libfreenect with py_kinect) on linux ubuntu14.04 x64
  15. Ext viewport的渲染
  16. DFS算法(——模板习题与总结)
  17. 简单的线性规划-scipy
  18. 使用protostuff自定义编解码器优化springcloud-feign性能
  19. pod 使用详解
  20. Chrome开发者控制台操作教程

热门文章

  1. 小子给大家分享一个或者多个新手创建tableview经常会遇到的坑(动态创建控件,xib的重用)
  2. windows 多任务与进程
  3. apache2.2版本安装说明
  4. 【转载】MySQL5.6.27 Release Note解读(innodb及复制模块)
  5. iphone微信后退不刷新的问题
  6. 【读书笔记】【深入理解ES6】#3-函数
  7. 队列的存储结构的实现(C/C++实现)
  8. POJ 1739:Tony&#39;s Tour
  9. Vijos P1035 贪婪的送礼者【模拟】
  10. visual studio 打开微软MVC3示例MvcMusicStore的详细修改方法