【Java Web】Java Server Page总结(Servlet篇)

学习jsp,或多或少会接触到Servlet,一开始接触Servlet的时候,觉得它是一个很神奇的东西,就往那里一放,web.xml里面一配置,它就可以使用了。

随着对它的了解加深,才明白,其实Servlet就是一个规范,为了统一Web容器的厂商对JavaWeb程序的调用而制定出来的一个规范,有了这个规范,程序员可以将精力放在实现功能上。

生命周期


Servlet的生命周期主要分为三个阶段:

  1. 初始化阶段:init()方法;
  2. 调用阶段:service()方法、doGet()方法、doPost()方法;
  3. 销毁阶段:destroy()方法。

init初始化

init()方法作为Servlet的初始化方法,在整个生命周期中只运行一次,默认情况下是第一次有用户调用该Servlet的时候,也可以由我们来配置为Web容器启动时加载,之后每当一个用户调用该Servlet,便会产生一个新的线程。

调用阶段

先来说说service()方法,这个方法是整个Servlet的核心,所有请求都要首先到达这个方法。

用户请求到达Web容器后,由web容器产生HttpServletRequest类的实例化对象和HttpServletResponse类的实例化对象,并将它们传入service()方法,接着根据GET/POST请求,再分别调用doGet()方法或者doPost()方法。

doGet()方法:这个方法是当HTTP请求为GET的时候调用的,一般如果不设置请求类型,默认都是GET

doPost()方法:当HTTP请求为POST的时候调用这个方法,另外,之所以在doPost()方法里首先调用doGet()方法,在我看来只是为了使容错率大一些吧。

destroy销毁

执行destroy()方法之后,Servlet便会进入销毁阶段,之后会被标记为垃圾,由jvm垃圾回收机制进行回收。

通常在这一阶段我们执行关闭数据库、清理线程等一些收尾工作。

配置


Servlet 3.0之前,我们需要在web.xml文件中这么配置:

<!-- servlet 标签必须和 servlet-mapping 标签成对使用,否则将无法使用 -->
<!-- servlet 标签和 servlet-mapping 标签的 servlet-name 必须一致 -->
<!-- servlet-name 可以随便取,但是不能和别的 Servlet 的 servlet-name 重复 -->
<!-- servlet-class 是该 Servlet 的完全限定名 -->
<!-- url-pattern 是该 Servlet 的调用路径,通常都是以 '/' 为开头,少数特殊情况下用 *.xxx 的形式 -->
<servlet>
  <servlet-name>Test</servlet-name>
  <servlet-class>com.vingyun.Test</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>Test</servlet-name>
  <url-pattern>/Test</url-pattern>
</servlet-mapping>

而在Servlet 3.0之后,我们只需要在Servlet的头部加上这样一个注解,便可以完成对该Servlet的声明:

@WebServlet("/Test")    //括号里的为该Servlet的调用路径
public class Test extends HttpServlet {

}

功能实现


Servlet中功能实现的写法其实和在jsp中的写法的用法并没多大差别,其中HttpServletRequest类的实例化对象和HttpServletResponse类的实例化对象可以等同于jsp中的内置对象requestresponse

另外将在后面的文章中总结一下数据库连接(JDBC)

猜你喜欢

转载自blog.csdn.net/ving_suixin/article/details/80146653