本文共 2990 字,大约阅读时间需要 9 分钟。
开始之前先说一个小问题,是先有JSP呢还是先有Servlet呢?
答案很显然:是先有Servlet。没错,JSP的前身就是Servlet。
那么什么是Servlet呢?
Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“request-response”编程模型来访问的这个驻留在服务器内存里的Servlet程序。Tomcat的容器分为四个等级,Servlet的容器管理Context容器,一个Context对应一个Web工程,四个容器等级的包含关系以及名称如下图所示。
用户手动编写的Servlet需要继承抽象类HttpServlet(提供了 Http 相关的方法,并且扩展了GenericServlet 类),而HttpServlet类也是继承了抽象类GenericServlet(实现了 Servlet 接口,并且对其中的 初始化方法init() 、销毁方法destroy() 和 执行服务方法service() 提供了默认实现)。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //处理代码...}public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //处理代码...}
自定义完servlet后,记得要在web.xml中注册一下新定义的servlet
Servlet 生命周期可被定义为从创建直到毁灭的整个过程,以下是 Servlet 遵循的过程大体上可以分为3个阶段:
整体流程图如下:
init() 方法在Servlet的生命周期中只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。
Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是也可以指定 Servlet 在服务器第一次启动时被加载。 当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet()或 doPost() 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。public void init() throws ServletException { // 初始化代码...}
service() 方法是执行服务的主要方法。Servlet 容器调用 service() 方法来处理来自客户端(浏览器)的request,并把格式化的response返回给客户端(浏览器)。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。public void service(ServletRequest request,ServletResponse response)throws ServletException, IOException { //执行代码...}
destroy() 方法和init()方法和一样也是只会被调用一次,在Servlet生命周期结束时被调用。
destroy() 方法可以使Servlet关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。 在调用 destroy() 方法之后,servlet 对象被标记由JVM 的垃圾回收器进行垃圾回收。public void destroy() { // 终止化代码...}
注:Servlet生命周期阶段包括了初始化、加载、实例化、服务和销毁。
在下列时刻中Servlet容器进行装载Servlet:
<servlet><loadon-startup>1</loadon-startup></servlet>
中间的数字越小表示优先级越高。注:Servlet被装载后,Servlet容器创建一个Servlet实例并且点用Servlet的init()方法进行初始化。
MVC模型:MVC(Model、View、Controller),是软件开发过程中比较流行的设计思想。旨在分离模型、控制、视图,是一种分层思想的体现。
MVC 分层有助于管理复杂的应用程序,使得开发者可以在一个时间内专门关注一个方面。例如,可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。 MVC 分层简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。最典型的MVC就是JSP + Servlet + JavaBean的模式,如下图:
转载地址:http://pcwgz.baihongyu.com/