servlet的基础知识

来源:互联网 发布:十大网络官场小说 编辑:程序博客网 时间:2024/06/11 01:01
servlet 的生命周期
3个阶段
初始化阶段 调用init()方法
响应客户请求阶段 调用service()方法
终止阶段 调用destory()


1、初始化阶段
servlet容器装载servlet:
1、自动装载,web.xml配置<servlet></serlvet>之间配置<loadon-startup>1,</loadon-startup>
2、在servlet容器启动后,客户首次向servlet发送请求
3、servlet文件被更新,重新装载servlet
servlet被加载之后,servlet容器创建一个servlet实例并且调用init()方法初始化,在生命周期内,init()方法只调用一次


servlet工作原理
首先是工作过程
客户发送请求,servlet调用service()方法对请求响应,在service()方法中队请求进行了匹配,调用了doGet()或者doPost()方法,然后实现逻辑层业务,实现对客户的响应,Servlet中没有这doGet和doPost等方法,所以HttpServlet定义了这些方法,需要重写

自定义的servlet实现servlet接口,接口中5个方法,三个方法涉及到生命周期,是init(),service(),destory()
HttpServlet 实现了Service()方法,并将请求ServletRequest,ServletResponse强转为HttpRequest和HttpResponse。

Servlet响应请求阶段:
  对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。


对于tomcat来说,他会将参数放在一个hashtable中,
private Hashtable<String String[]> paramHashStringArray = newHashtable<String String[]>();
是一个String->string[]的键值映射,

servlet终止
web应用停止,servlet容器停止,servlet容器重新装载servlet实例是,servlet容器会调用servlet的destory()方法释放servlet占的资源


Servlet何时被创建:
  1,默认情况下,当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例。
  2,当web.xml文件中如果<servlet>元素中指定了<load-on-startup>子元素时,Servlet容器在启动web服务器时,将按照顺序创建并初始化Servlet对象。
  注意:在web.xml文件中,某些Servlet只有<serlvet>元素,没有<servlet-mapping>元素,这样我们无法通过url的方式访问这些Servlet,这种Servlet通常会在<servlet>元素中配置一个<load-on-startup>子元素,让容器在启动的时候自动加载这些Servlet并调用init()方法,完成一些全局性的初始化工作。


Web应用何时被启动:
  1,当Servlet容器启动的时候,所有的Web应用都会被启动
  2,控制器启动web应用
-----------------------------------------------------------------------------------------------------------------------------------------------
Servlet与JSP的比较:
  有许多相似之处,都可以生成动态网页。
  JSP的优点是擅长于网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。

  Servlet是纯Java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观。



servlet配置 在web.xml

<!-- 配置和映射servlet -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.test.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>


0 0
原创粉丝点击