浅谈 JSP & Servlet

Posted Develon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈 JSP & Servlet相关的知识,希望对你有一定的参考价值。

背景

相信大家都见过这句话: Tomcat 是 Servlet 的容器, JSP 被动态编译为 Servlet.

什么是 Servlet ? 原来这是一个类: class javax.servlet.http.HttpServlet

JSP 页面被编译为该类的一个子类class org.apache.jsp.***_jsp, 当然, 这个类还被扩展为class org.apache.jasper.runtime.HttpJspBase

JSP 的类层次关系如下:

java.lang.Object

? `javax.servlet.GenericServlet

? ? `javax.servlet.http.HttpServlet

? ? ? `org.apache.jasper.runtime.HttpJspBase

? ? ? ? `org.apache.jsp.***_jsp

维基百科

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

通用Servlet
一般来说,通用Servlet由javax.servlet.GenericServlet实作Servlet界面。程序设计人员可以通过使用或继承这个类来实现通用Servlet应用。

HttpServlet
javax.servlet.http.HttpServlet实现了专门用于响应HTTP请求的Servlet,提供了响应对应HTTP标准请求的doGet()、doPost()等方法。

生命周期
当servlet被部署在应用服务器中(应用服务器中用于管理Java组件的部分被抽象成为容器)以后,由容器控制servlet的生命周期。除非特殊指定,否则在容器启动的时候,servlet是不会被加载的,servlet只会在第一次请求的时候被加载和实例化。servlet一旦被加载,一般不会从容器中删除,直至应用服务器关闭或重新启动。但当容器做内存回收动作时,servlet有可能被删除。也正是因为这个原因,第一次访问servlet所用的时间要大大多于以后访问所用的时间。

servlet在服务器的运行生命周期为,在第一次请求(或其实体被内存垃圾回收后再被访问)时被加载并执行一次初始化方法,跟着执行正式运行方法,之后会被常驻并每次被请求时直接执行正式运行方法,直到服务器关闭或被清理时执行一次销毁方法后实体销毁。

与JSP的关系
Java服务器页面(JSP)是HttpServlet的扩展。由于HttpServlet大多是用来响应HTTP请求,并返回Web页面(例如html、XML),所以不可避免地,在编写servlet时会涉及大量的HTML内容,这给servlet的书写效率和可读性带来很大障碍,JSP便是在这个基础上产生的。其功能是使用HTML的书写格式,在适当的地方加入Java代码片段,将程序员从复杂的HTML中解放出来,更专注于servlet本身的内容。

JSP在首次被访问的时候被应用服务器转换为servlet,在以后的运行中,容器直接调用这个servlet,而不再访问JSP页面。JSP的实质仍然是servlet。











以上是关于浅谈 JSP & Servlet的主要内容,如果未能解决你的问题,请参考以下文章

浅谈JSP0-乐字节前端

Servlet&&Jsp 概述

jsp初识servlet转发转发与重定向的比较

浅谈JSP

Java基础——JSP

Tomcat根据JSP生成Servlet机制解析