博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet详解
阅读量:7114 次
发布时间:2019-06-28

本文共 4090 字,大约阅读时间需要 13 分钟。

hot3.png

一、什么是Servlet

    一个Servlet程序就是一个实现了特殊接口的java类,他由支持Servlet的WEB服务器(Servlet引擎)调用和启动运行。一个Servlet程序负责处理他所对应的一个或者一组URL地址访问请求,并接受客户端发来的请求信息和产生的响应信息内容。

二、Servlet API中几个常用类的关系

    1、一个Servlet程序就是一个实现了javax.servlet.Servlet接口的java类,Servlet接口定义了Servlet引擎和Servlet程序的通讯协议。

    2、javax.servlet.GenericServlet是实现了Servlet接口的类。他实现了Servlet接口的基本特征和功能

    3、javax.servlet.http.HttpServlet是javax.servlet.GenericServlet的子类。他在GenericServlet类的基础上对Http协议做了些扩充。

    4、客户端调用一个支持Http的Servlet程序时,Servlet引擎将调用service方法,改方法接受两个参数,一个是用于封装http请求消息的对象,其类型为HttpServletRequest,一个是代表http响应消息的对象,其类型为HttpServletResponse

    5、调用HttpServletResponse对象的getWriter()方法可获得一个文本输出流对象。向这个流对象写入的内容可作为http响应消息的实体对象部分发送个客户端。

6、HttpServletRequest和HttpServletResponse是Servlet引擎和Servlet程序通信的纽带。这好比两个好朋友A和B,当A去拜访B的时候带来两个盒子,一个盒子里是A给B的礼物,另一个是用来装B回送的礼物的。当A把HttpServletRequest给B时,B打开看了下,决定回送给A些什么装入到HttpServletResponse

举例说明:编写一个Servlet类

import javax.servlet.*; import.java.io.* import.servlet.http.*; public class ServletTest extends HttpServlet{
 public void service(HttpServletRequest request,HttpServletResponse response){
  PrintWriter out = response.getWriter();   out.println("");   out.println("11111");   out.println("");   out.println("");  } }

三、Servlet的注册和运行

1、Servlet程序必须通过Servlet引擎来启动运行,并且存储目录有特殊要求,一般是放在WEN-INF/calssess目录下

2、Servlet必须在web.xml里配置才能使用

3、一个<servlet>元素用于注册一个Servlet,他包含两个元素<servlet-name>和<servlet-class>分别用于设置servlet的名称和servlet的完整类名。

4、一个<servlet-maping>用于映射一个注册好的servlet的对外访问路径,它包含两个元素,<servlet-name>和<servlet-url>分别用于指定Servlet的注册名称和Servlet的对外访问路径

....................
AnyName
com.cws.servlet.HelloServlet
 
AnyName
/demo/hello.html
....................

四、Servlet的映射细节

1、同一个Servlet可以被映射到多个URL上

即多个<servlet-mapping>元素中的<servlet-name>中指定的名字可以是同一个。

2、在servlet的url中可以使用(*)通配符,并且通配符只能有两种形式,一种是以*.扩展名,另一种是已/开头已/*结尾

105627_B9Xx_2009964.png

五、Servlet激活器

 在每个web应用程序的WEB-INF目录下都有一个web.xml文件,其中记录了servlet的一些配置信息,在tomcat的conf目录下也有一个web.xml文件,这个xml文件是所有在该tomcat上部署的web应用程序的基础配置,就是说,每个web应用程序的web.xml都是在 conf/web.xml上的基础上进行扩展和覆盖的。 

    在一些web应用程序的web.xml文件中可能找到下面的映射: 

        
invoker
       
/servlet/*
 

   这说明当匹配/servlet/*路径时,会调用一个注册名称为invoker的Servlet。可是在web.xml文件中根本找不到这个 Servlet的注册。这里注意,一个web应用程序的部署描述除了包含在该应用程序内部的web.xml文件中,还包含<tomcat主目 录>\conf目录下的web.xml文件中的全局设置信息,在<tomcat主目录>\conf\web.xml文件中可以看到: 

         
invoker
         
           org.apache.catalina.servlets.InvokerServlet         
         
2
 

    这样,如果有多个web应用程序要用到这个Servlet,我们不必在每个web应用程序中都单独注册这个servlet,而只需在web.xml文件中 映射其访问路径即可。这个Servlet的作用就是激活和调用任何其他Servlet,被称为Servlet激活器。 <load-on-startup>2</load-on-startup>设置它随Tomcat的启动而加载(其中的2代表加载的优先顺序)。所以,在web 应用程序中为Servlet激活器invoker映射的访问路径以"/*"结尾,即使某个Servlet程序没有在web.xml文件中注册,我们只需将 Servlet激活器所映射的访问路径中的通配符(*)替换为这个Servlet的完整类名,就可以通过servlet激活器来调用这个Servlet程 序。

六、缺省的Servlet

1.在tomcat安装目录中:conf下的web.xml中有这样一个代码:

        
default
        
/

servlet的映射路径为一个(/),称之为缺省的servlet。则这个servlet就成为了当前web应用程序的缺省servlet。

缺省的servlet的作用为:凡是在web.xml文件总找不到匹配的<servlet-mapping>元素的URL,他们的方位请求都将交给缺省的servlet处理。也就是说,缺省的servlet用于处理所有其他servlet不处理的访问请求。

2.当访问tomcat服务中的某个静态html文件和图片时,实际上是在访问这个缺省的servlet。

3.把上述中的代码注释掉,重启tomcat服务器,输入 ,将发现页面中的图片将显示不出,也即是因为这个原因

 七、Servlet查询数据库的过程

133922_SabN_2009964.png

八、Servlet的运行过程

1、Servlet引擎检查是否已经装载创建了改Servlet对象,如果是则执行第四步,否则执行第二步。

2、装载并创建一个Servlet对象

3、调用Servlet对象的init()方法

4、创建一个用于封装请求消息的HttpServletRequest类型对象和一个代表响应消息的HttpServletResponse对象,然后调用Servlet的Service方法,并把请求消息的对象和响应消息的对象传进去

5、web程序被停止或者重新启动时,Servlet引擎将卸载Servlet程序。并在卸载前调用Servlet的destroy()方法

九、Servlet运行过程-》特殊说明

1、在<servlet>元素中嵌套一个<load-on-startup>元素,web程序在启动的时候就会装载并创建servlet对象,并调用init()方法。例如:

invoker
org.apache.catalina.servlets.InvokerServlet
2

2、在servlet的生命周期中,init()方法和destroy()方法只被调用一次。而service()方法每一次请求都调用一次。

3、tomcat也提供了是否自动重新装载被修改的servlet的选项,在tomcat目录下的conf子目录的server.xml中的<context>中的reloadable改为true。

十、

转载于:https://my.oschina.net/u/2009964/blog/402406

你可能感兴趣的文章
JQuery 操作select
查看>>
一个有趣的Ajax Hack示范
查看>>
ASP.NET真假分页—真分页
查看>>
解决Android编译时出现aapt.exe finished with non-zero exit value 1(第二篇)
查看>>
ListView刷新某一项Item
查看>>
win7下如何配置ODBC数据源
查看>>
裸设备概况
查看>>
栈和队列6|中缀表达式转换为后缀表达式 - 数据结构和算法28
查看>>
nginx监听端口转发到后端改变的问题
查看>>
C#_delegate - 有返回值手工调用
查看>>
2017-2018-1 20145237 《信息安全系统设计基础》第9周学习总结
查看>>
Ubuntu 16.04安装Meld文件比对工具替代Beyond Compare
查看>>
error-2016-4-20
查看>>
[31]XPath
查看>>
使用LR编写HTTP协议Json报文格式接口脚本实战
查看>>
一步步用python制作游戏外挂【转】
查看>>
关于SDN
查看>>
求最小公倍数
查看>>
cursor:hand与cursor:pointer的区别介绍
查看>>
Tomcat配置
查看>>