Servlet基础

晨曦之光 发布于 2012/05/16 17:05
阅读 475
收藏 15

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”


Servlet简介:Servlet是sun公司提供的一门用于开发动态web资源的技术,sun公司在API中提供了一个Servlet接口,用户若想完成一个动态web资源,需要完成以下两个步骤:

----1、编写一个Java类,实现Servlet的接口

----2、把开发好的java类部署到web服务器中

Servlet在web应用中的位置如图所示:

Servlet接口实现类

------sun公司定义了两个默认实现类,GenericeServlet,HttpServlet

------HttpServlet指的是能够处理http请求的servlet,它在原有Servlet接口上添加了一些与http协议处理方法,它比Servlet接口的功能更强大,所以,开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口

------HttpServlet在实现Servlet接口时,覆盖了Service方法,该方法体内的代码会自动判断用户的请求方式,因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写Service方法,具体请阅读HttpServlet文档。

Servlet的一些细节

------1、由于客户端是通过URL地址访问web服务器资源的,所以servlet程序若想被外界访问,必须把Servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成

<servlet>元素用于注册Servlet,它包含两个重要的子元素,<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。

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

------2、同一个Servlet可以映射到多个URl上,即多个<servlet-mapping>元素中的<servlet-name>子元素的设置值可以是同一个Servlet注册名

-----3、Servlet是一个供其它Java程序调用的Java类,他不能独立运行,它的运行完全由Servlet引擎来调度和控制。针对客户端的多次Servlet请求,通常情况下服务器只会创建一个Servlet对象,Servlet实例对象一旦创建,他就会驻留在内存中,为后续的其它请求服务,直到web容器退出,Servlet对象才会被销毁

-------*在Servlet的整个生命周期中,Servlet的init方法只会被调用一次,而对一个Servlet的每次访问请求都导致Servlet引擎调动一次Servlet的Service方法,对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的Service()方法,Service方法在根据请求方式分别调用doxxx方法。

--------4、如果在<servlet>元素中配置了一个<load-on-startup>元素,那么web一个用在启动时,就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init(0方法。

----* 为web应用写一个InitServlet,这个Servlet配置为启动时装载,为整个web应用程序创建必要的数据库表和数据

-------5、如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前web应用程序的缺省Servlet。凡是在web.xml中找不到匹配的<servlet-mapping>元素的URL,它们的访问请求都将交给缺省Servlet处理

----*在tomcat的安装目录(\conf\web.xml)文件中注册了一个名为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为缺省的Servlet

----*当访问TomCat服务器中的某个静态页面或图片时,实际上是访问这个缺省的Servlet

------6、线程安全:当多个客户端并发访问同一个Servlet时,web服务器会为每个客户端的访问请求创建一个线程,并在这个线程上调用Servlet的Service方法,因此Service方法内如果访问了同一个资源时,可能引发线程安全的问题

------*如果某个Servlet实现了SingleThreadModel接口,那么Servlet引擎将以单线程模式调用servi方法

-------*实现SingleThreadModel接口并不能真正解决线程安全问题,因为Servlet引擎会创建多个Servlet实例对象,而真正意义上解决多线程问题是指一个Servlet实例对象被多个线程同事调用的问题,在Servlet API 2.4中,已经将SingleThreadModel标记为Deprecated(过时的)。  

-------7、ServletConfig对象:在Servlet的配置文件中,可以使用一个或多个,<init-param>标签为Servlet配置一些初始化参数

-------*当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

--------8、ServletContext:WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。

--------*由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

--------9、ServletContext应用:多个Servlet通过ServletContext对象实现数据共享。

 

 

 

            

 

 

 

 



原文链接: http://blog.csdn.net/xy849288321/article/details/6944562
加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部