Servlet 是什么?java
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是做为来自 Web 浏览器或其余 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。web
使用 Servlet,您能够收集来自网页表单的用户输入,呈现来自数据库或者其余源的记录,还能够动态建立网页。算法
Java Servlet 一般状况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序能够达到殊途同归的效果。可是相比于 CGI,Servlet 有如下几点优点:数据库
Servlet 架构浏览器
下图显示了 Servlet 在 Web 应用程序中的位置。缓存
Servlet 任务安全
Servlet 执行如下主要任务:服务器
Servlet 生命周期cookie
Servlet 生命周期可被定义为从建立直到毁灭的整个过程。如下是 Servlet 遵循的过程:架构
init() 方法
init 方法被设计成只调用一次。它在第一次建立 Servlet 时被调用,在后续每次用户请求时再也不调用。所以,它是用于一次性初始化,就像 Applet 的 init 方法同样。
Servlet 建立于用户第一次调用对应于该 Servlet 的 URL 时,可是您也能够指定 Servlet 在服务器第一次启动时被加载。
当用户调用一个 Servlet 时,就会建立一个 Servlet 实例,每个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地建立或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
init 方法的定义以下:
public void init() throws ServletException { // 初始化代码... }
service() 方法
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
下面是该方法的特征:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{ }
service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。因此,您不用对 service() 方法作任何动做,您只须要根据来自客户端的请求类型来重载 doGet() 或 doPost() 便可。
doGet() 和 doPost() 方法是每次服务请求中最经常使用的方法。下面是这两种方法的特征。
doGet() 方法
GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 }
doPost() 方法
POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 }
destroy() 方法
destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可让您的 Servlet 关闭数据库链接、中止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其余相似的清理活动。
在调用 destroy() 方法以后,servlet 对象被标记为垃圾回收。destroy 方法定义以下所示:
public void destroy() { // 终止化代码... }
架构图
下图显示了一个典型的 Servlet 生命周期方案。
如下为生命周期的一个简单实例:
// Servlet 生命周期的三个方法 // 1.被建立,执行且只执行一次 init 方法 @Override public void init() throws ServletException { super.init(); } // 2.提供服务,执行 service 方法,执行屡次 @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.service(req, resp); } // 3.被销毁,当 Servlet 服务器正常关闭时,执行 destroy 方法,只执行一次 @Override public void destroy() { super.destroy(); }
Servlet 部署
默认状况下,Servlet 应用程序位于路径 /webapps/ROOT 下,且类文件放在 /webapps/ROOT/WEB-INF/classes 中。
若是您有一个彻底合格的类名称 com.myorg.MyServlet,那么这个 Servlet 类必须位于 WEB-INF/classes/com/myorg/MyServlet.class 中。
如今,让咱们把 HelloWorld.class 复制到 /webapps/ROOT/WEB-INF/classes 中,并在位于 /webapps/ROOT/WEB-INF/ 的 web.xml 文件中建立如下条目:
<servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping>
上面的条目要被建立在 web.xml 文件中的标签内。在该文件中可能已经有各类可用的条目,但不要在乎。
Servlet和JSP的区别
JSP做为Servlet技术的扩展,常常会有人将JSP和Servlet搞混。本文,将为你们带来servlet和jsp的区别,但愿对你们有所帮助。
Servlet和JSP的区别
一、Servlet在Java代码中能够经过HttpServletResponse对象动态输出HTML内容。
二、JSP是在静态HTML内容中嵌入Java代码,而后Java代码在被动态执行后生成HTML内容。
Servlet和JSP各自的特色
一、Servlet虽然可以很好地组织业务逻辑代码,可是在Java源文件中,由于是经过字符串拼接的方式生成动态HTML内容,这样就容易致使代码维护困难、可读性差。
二、JSP虽然规避了Servlet在生成HTML内容方面的劣势,可是在HTML中混入大量、复杂的业务逻辑。
经过MVC双剑合璧
JSP和Servlet都有自身的适用环境,那么有没有什么办法可以让它们发挥各自的优点呢?答案是肯有的,MVC模式就可以完美解决这一问题。
MVC模式,是Model-View-Controller的简称,是软件工程中的一种软件架构模式,分为三个基本部分,分别是:模型(Model)、视图(View)和控制器(Controller):
Controller——负责转发请求,对请求进行处理
View——负责界面显示
Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操做实现
在JSP/Servlet开发的软件系统中,这三个部分的描述以下所示:
一、Web浏览器发送HTTP请求到服务端,而后被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)
二、Controller(Servlet)调用核心业务逻辑——Model部分,得到结果
三、Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容
四、动态生成的HTML内容返回到浏览器显示
MVC模式在Web开发中有很大的优点,它完美规避了JSP与Servlet各自的缺点,让Servlet只负责业务逻辑部分,而不会生成HTML代码;同时JSP中也不会充斥着大量的业务代码,这样能大提升了代码的可读性和可维护性。