Servlet是一个接口,但是接口中是没有具体实现。
HttpServlet是Servlet的一个具体实现。要创建一个 HTTP Servlet,要继承 HttpServlet 类,该类是用专门的方法来处理 HTML 表单的GenericServlet 的一个子类。
Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。Servlet容器会自动使用线程池等技术来支持系统的运行。如果servlet配置多个servlet-mapping,且servlet-name名字相同,则生成多个servlet。
要创建一个servlet,我们须要实现这个接口的5种方法
public class Hello {
public void destroy(){....}
public ServletConfig getServletConfig(){....}
public String getServletInfo(){....}
public void init(ServletConfig sc)throws ServletException{....}
public void service(ServletRequest req,ServletResponse resp)throws SevletException,IOException {....}
}
GenericServlet类,实现了除service方法以外的其他4种方法。我们创建servlet时只需要继承他,再加上实现一个service()方法就可以了 。
public class Hello extends GenericServlet {
public void service(ServletRequest greq,ServletResponse gresp)throws....{....}
}
ServletRequest 和ServletResponse 是由容器生产商(tomcat或weblogic等等)按照ServletRequest接口的定义,在容器中自动实例化生成的一个请求对象。这个对象能用该接口定义的15个方法进行操作。当然不同的生产商,实例化出来的对象都会有所不同,只不过我们不关心不同的那些部分,只关心共同的这15个操作方法(他还有什么别的方法我也不管)。
这个servlet要实现什么功能,就都写在这个service里了。这样做的最大好处是,可以编写不限于HTTP的其他应用,比如FTP,MAIL等等。
在GenericServlet类之下,有一个HttpServlet类。
我们大多数时候,只需要继承HttpServlet类就行了。当然这时候我们要写的代码就是
public class Hello extends HttpServlet {
public void service(HttpServletRequest req,HttpServletResponse resp)throws ....{....}
}
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet {
private int g_count = 0;
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(req, resp);
g_count ++;
System.out.println(" doGet====="+ g_count);
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPut(req, resp);
}
/**
* 每次请求都执行
*/
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
int t_count=0;
g_count ++;
System.out.println(" service_g_count====="+ g_count);
System.out.println(" service_t_count====="+ t_count);
}
/**
* destroy 方法并不是销毁一个servlet,而是容器在销毁一个servlet之前,
* 运行程序员执行一些操作,比如关闭数据库连接...
*
*/
@Override
public void destroy() {
// TODO Auto-generated method stub
super.destroy();
}
/**
* init方法在第一个httpServlet请求的时候初始化,
* 第二个httpServlet请求的时候不执行这个方法
*/
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
g_count ++;
System.out.println(" init====="+ g_count);
}
}
对于第一次请求g_count加上3。init,service,do**()。
对于第二次及其以后的请求每次加2, service,do**()。
如:当第一次打开浏览器A输出: init=====1
service_g_count=====2
service_t_count=====0
doGet=====3
A当刷新一次浏览器输出:
service_g_count=====4
service_t_count=====0
doGet=====5
当关闭当前浏览器A,重新打开一个浏览器B:
service_g_count=====6
service_t_count=====0
doGet=====7
重启tomcat以后,刷新浏览器B:
init=====1
service_g_count=====2
service_t_count=====0
doGet=====3
注意:当关闭当前浏览器,重新打开一个浏览器 原因是tomcat默认情况下是缓存客户端的session,这个是可以设置的,不同的tomcat版本可能不同,我用的是tocat5.0测试的。
当第一个客户请求到达时,Web容器会根据配置文件(web.xml)找到相应的Servlet类,进行实例化。Servlet的执行过程也就是Servlet的生命周期:
一、初始化时期
该时期调用了init()方法,当Servlet被Servlet引擎载入后,接下来就会执行init()这个方法,因此我们可以重载这个方法以做一些我们自己的初始化的工作。但不要忘记,自己的init()结束后,要记得呼叫super.init()以完成系统的初始化。
在Servlet的生命期中,init()方法只被执行一次,init()方法仅在服务器实例化Servlet时被执行,此后无论有多少客户机访问这个Servlet,init()都不会被重复执行。
当init()抛出异常或在规定的一个时间周期内没有返回值时,init()失败,Servlet将无法被服务器装入。
重载init()方法的基本格式是:
public void init(ServletConfig config) throws ServletException {...}
二、执行时期
在Servlet被载入后,主要通过service()方法对外响应,该方法可以被同时、多次地呼叫。
由于HttpServlet类有它自己的service()方法,所以对于HttpServlet类而言,它所使用的是自己的service()方法,我们一般所指的service()方法也是指HttpServlet类中的service()方法,当它接收到一个OPTIONS请求时,它会调用doOption()方法,同样,当它接收到一个TRACE请求时,它会调用doTrace()方法。service()方法一般不被重载。通过doOption()方法会决定相应地调用doGet()、doPost()、doPut()、doDelete()这些方法的一种或几种。doOption()方法和doTrace()方法通常也不被重载。
三、结束时期
当服务器卸载一个Servlet时,它将调用destroy()方法。这个方法给Servlet一个时机清除控制的任何资源(比如内存、文件句柄、线程)。如果你需要在结束时,关闭一些资源,你也可以重载这个方法,同样的,自己的destroy()结束后,要记得呼叫super.destroy()。
分享到:
相关推荐
jsp 与servlet基础 1:jsp概述 2:jsp基础 3:jsp隐含对象 4:jsp中使用数据库 5:jsp与javabean ...
**学习JSP和Servlet基础,你需要理解它们的基本概念、生命周期、API使用以及如何协作处理Web请求。此外,熟悉EL和JSTL,以及如何在实际项目中应用MVC模式,对于提升开发效率和代码质量至关重要。本课件将逐步引导你...
《Head First Servlet & JSP》是一本非常受欢迎的IT教程,专为准备SCWCD(Sun Certified Web Component Developer...通过阅读这本书,你可以熟练掌握Servlet和JSP的核心技术,为构建复杂的企业级Web应用打下坚实基础。
【JSP与Servlet技术实验报告】的实验主要围绕图书馆管理系统展开,该系统涵盖了登录、注册、图书管理和用户信息管理等多个核心功能。以下是系统的详细解析: 1. **系统概述** 图书馆管理系统是一个多用户平台,它...
### JSP基础 **1. JSP概述:** JSP是一种服务器端脚本语言,它允许开发人员将HTML、XML或者其他标记语言与Java代码结合起来,用于创建动态网页。JSP文件在服务器上被编译成Servlet,然后由服务器执行并返回结果到...
总之,《jsp&servlet电子书》是学习JSP和Servlet的理想教材,无论你是初学者还是有一定基础的开发者,都能从中获益匪浅。通过阅读这本书,你将能够熟练地运用这两种技术构建高效的Web应用程序,解决实际开发中的各种...
本资源是针对初学者设计的一个基于JSP(JavaServer Pages)和Servlet的简单购物车源码,旨在帮助学习者深入理解这两种技术在实际Web开发中的应用。JSP和Servlet是Java Web开发中不可或缺的组件,它们共同构建了动态...
【旅游管理系统 jsp+servlet.zip】是一个基于Java Web...总的来说,"旅游管理系统 jsp+servlet.zip"是一个全面的Java Web学习资源,涵盖了从基础到进阶的多个知识点,对于想要提升Web开发技能的开发者来说非常有价值。
1. **JSP基础**:JSP是一种动态网页技术,允许开发者在HTML页面中嵌入Java代码,以实现动态内容的生成。在“jsp+servlet实现通讯录”项目中,JSP主要用于展示用户界面,包括输入表单、查询结果等。 2. **Servlet...
在Java Web开发中,JSP(JavaServer Pages)和Servlet是两种重要的技术,它们共同构建了动态网页应用程序的基础。本文将深入探讨JSP与Servlet的重定向技术,并结合提供的资源来帮助初学者理解和掌握这一核心概念。 ...
【标题】"jsp+servlet实现简单的登录注册"是关于Web开发的一个基础教程,主要涉及到Java服务器页面(JSP)和Servlet技术的结合使用,用于构建用户登录和注册功能。在这个项目中,开发者会学习如何利用这两者来处理...
《JSP+Servlet+Tomcat应用开发从零开始学》这本书是针对初学者设计的一本教程,旨在帮助读者从零基础开始学习如何使用JavaServer Pages(JSP)、Servlet和Apache Tomcat服务器进行Web应用程序的开发。JSP、Servlet和...
在IT行业中,`JSP(JavaServer Pages)`、`Servlet`和`JavaBeans`是构建Web应用程序的经典技术栈,尤其适用于MVC(Model-View-Controller)设计模式。本示例项目“jsp+servlet+javabeans”旨在演示如何有效地结合这...
本教程以"web基础JDBC+Servlet+jsp"为主题,旨在帮助初学者掌握这三个核心概念,实现完整的CRUD(创建、读取、更新、删除)操作。下面将详细介绍这三个技术及其在Web开发中的应用。 **JDBC(Java Database ...
【基于JSP+Servlet小项目】是一个典型的JavaWeb应用程序,它是使用JavaServer Pages(JSP)技术和Servlet进行开发的。这个项目可能包含了从用户界面到后端数据处理的完整流程,展示了如何在Web环境中整合这两种技术...
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态Web应用程序方面发挥着关键作用。本课件旨在帮助学习者深入理解这两者的基础知识及其交互方式,以提升Web开发能力。** **JSP...
这份学习资料可能是对JSP和Servlet基础知识的系统性讲解,涵盖了上述概念和原理,适合初学者入门。通过阅读这份笔记,你可以了解JSP和Servlet的基本语法、生命周期、以及如何将它们结合使用来创建动态Web应用。同时...
本文将用通俗易懂的语言深入浅出地介绍JSP和Servlet的基础理论知识。 首先,我们来理解什么是JavaServer Pages(JSP)。JSP是Java平台上的一个标准视图技术,它允许开发者将HTML、CSS和JavaScript与Java代码相结合...
Eclipse JSP/Servlet 环境搭建是 Java Web 开发的基础环境,本文将指导用户从零开始搭建 Eclipse JSP/Servlet 环境,包括安装 JDK、Eclipse J2EE、Tomcat 等软件包,并配置 Tomcat 服务器和 Eclipse 环境。...
【标题】"jsp+servlet做的...总的来说,"jsp+servlet做的连连看"是一个很好的学习和实践案例,可以帮助初学者巩固JSP和Servlet的基础知识,提升Web开发技能。同时,通过实际操作,还能锻炼问题解决和项目管理能力。