- 浏览: 254832 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
mabusyao:
漠北空城 写道请问下,你这个是JDK版本是多少呢?!忘记了,应 ...
HashMap 源码解读 -
漠北空城:
请问下,你这个是JDK版本是多少呢?!
HashMap 源码解读 -
schumee:
完美团队~
项目沉思录 - 1.1 -
winie:
整理下 搞成引擎嘛 国产需要这样的engine
简单工作流引擎 -
mabusyao:
某位同学给我提供的堪称完美的解决方案:1. 将三个int数组放 ...
CraneWork
一:Servlet简介
Servlet的最广泛用途是建造动态的网页,没有Servlet或相应的动态技术(如CGI,ASP,JSP),一个Web服务器只能提供静态的网页,不能针对用户的请求提供相应的服务器端的操作,如查询数据库并根据查询结果构造一个新的结果网页等.所有的Servlet必须遵循Java Servlet API,这个API是由两个库包及一系列类组成的:
javax.servlet:这个库包提供了普通Servlet模型
javax.servlet.http:这个库包提供了http和https的Servlet模式
普通的Servlet模型只是假定协议是建立在TCP/IP之上的,并没有对请求-回答(request-response)的协议(protocol) 作出任何具体的假设,所有与http和https有关的逻辑均在javax .servlet.http库里面,这种办法可以最大程度上把可能发生变化的部分与一般逻辑分开。
二:Servlet的主要类
servlet库中有三个类提供了主要的Servlet技术的架构,这三个类是:Servlet接口,GenericServlet类和 HttpServlet类:
(A)Servlet接口声明了三个方法,init(),destroy()和service()方法,这三个方法决定了Servlet的生命周期
(B)GenericServlet是一个抽象类,它提供了Servlet接口的默认实现,但是却留下一个service()方法,这个方法仍然是一个抽象方法,任何个体的Servlet类均必须提供service()方法,以便提供必要的具体行为.
(C)HttpServlet类继承自GenericServlet,虽然它本身也是一个抽象类,但是它为所有行为包括service和七个do方法都提供了默认的实现:doGet,doHead,doPost,doPut,doDelete,doOption,doTrace,这七个do方法基本涵盖了 http协议的各种请求的种类.
三:HttpServlet的生命周期
Servlet的生命周期描述一个Servlet如何被加载和被初始化,它是怎么样接收请求,响应请求以提供服务,java的HttpServlet类必须在一个Servlet引擎所提供的容器环境里面运行,因此,它的生命周期是由容器环境管理的.
Servlet生命周期由接口javax.servlet.Servlet所定义,所有的Servlet必须实现它才能在Servlet容器环境里面运行.它的生命周其大概如下:
(A)加载:Servlet容器可以同时创建一个或多个Servlet实例,这个过程可以在Servlet容器加载Servlet类时执行,或者在 Servlet对象响应请求时执行,也可以在两者之间的任何时候执行.
(B)初始化:Servlet容器调用一个init()方法将此Servlet初始化,初始化时,Servlet对象可以从数据库中读取初始数据,建立 Connection,或者建立对其他有价值的资源的引用.
(C)就绪:Servlet被初始化后,处于能响应请求的就绪状态,当客户端有一个请求时,Servlet容器将SevletRequest和 ServletResponse对象都转发给Servlet,这两个对象以参数的形式传给service方法,这样,service方法会进一步调用 doGet和doPost等方法处理相应的http处理请求
(D)释放:调用destroy()方法,系统将释放相应的资源,所有失去引用的Java对象都会被垃圾收集器收集.
四:模板方法模式的使用
Servlet在几个地方法采用了模板方法模式的设计
(A)service()方法是一个模板方法,这个方法调用了七个do方法中的一个或几个,完成对客户端的请求,下面是示意源码:
protexted void service(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
String method = req.getMethod();
if(method.equals("GET")){
}else if(method.equals("POST")){
}
......
}
当然,这个service方法可以被子类置换掉.
五:观察者模式的应用
Servlet引擎的事件可以分成Servlet环境事件和Session事件两种,通过Servlet引擎的事件机制可以做如下的工作:
(A)管理数据库的各种资源的使用和释放
(B)建立计数机制
(C)监视Http Session的状态及属性
Servlet引擎的事件机制与AWT和Swing库中的事件模型是一样的事件委派模型。
(1)Servlet环境事件
当Servlet环境被创建,关闭,或者一个属性被加入到环境里,一个已经在环境里的属性被删除或修改时,都会产生Servlet事件:
事件类型接口方法
servlet环境被创建javax.servlet.ServletContextListener contextInitialized
Servlet环境被关闭javax.servlet.ServletContextListener contextDestroyed
........................
(2)Session的事件
当Session被激活,钝化,或者一个属性被加入到Session对象里,一个已经在Session里的属性被删除或者修改时,都会产生Session 事件,下面的表给出了Session事件的清单,每一个事件对应的事件监听器(listener)接口,以及所对应的方法:
事件类型接口方法
一个session被激活javax.servlet.http.HttpSessionListener sessionCreated
一个session被钝化javax.servlet.http.HttPSessionListener sessionDestroyed
一个属性被加入javax.servlet.http.HttpSessionAttributesListener attributeAdded
............................
要对某一个事件做出响应,就要准备一个谓的监听器,这个类实际上扮演的就是观察者模式的角色,那么怎么才能准备一监听器类呢?
(1)针对某个事件的监听类必须实现所对应的事件接口
(2)一个监听器类必须有一个公开的默认构造子
(3)必须实现监听器接口所要求的方法
下面分为Servlet环境的舰艇器和Session属性监听器
import javax.servlet.*;
public final class myListener implements ServletContextListener
{
/** This method is called when the servlet context is
* initialized(when the Web Application is deployed).
* You can initialize servlet context related data here.
*/
public void contextInitialized(ServletContextEvent event)
{
//write your code here
}
/** This method is invoked when the Servlet Context
* (the Web Application) is undeployed or
* WebLogic Server shuts down.
*/
public void contextDestroyed(ServletContextEvent event)
{
//write your code here
}
}
import javax.servlet.*;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public final class myListener implements HttpSessionAttributeListener
{
/** This method is called when an attribute
*﹛is added to a session.
*/
public void attributeAdded(HttpSessionBindingEvent sbe)
{
}
/** This method is called when an attribute
* is removed from a session.
*/
public void attributeRemoved(HttpSessionBindingEvent sbe)
{
}
/** This method is invoked when an attibute
* is replaced in a session.
*/
public void attributeReplaced(HttpSessionBindingEvent sbe)
{
}
}
Servlet的最广泛用途是建造动态的网页,没有Servlet或相应的动态技术(如CGI,ASP,JSP),一个Web服务器只能提供静态的网页,不能针对用户的请求提供相应的服务器端的操作,如查询数据库并根据查询结果构造一个新的结果网页等.所有的Servlet必须遵循Java Servlet API,这个API是由两个库包及一系列类组成的:
javax.servlet:这个库包提供了普通Servlet模型
javax.servlet.http:这个库包提供了http和https的Servlet模式
普通的Servlet模型只是假定协议是建立在TCP/IP之上的,并没有对请求-回答(request-response)的协议(protocol) 作出任何具体的假设,所有与http和https有关的逻辑均在javax .servlet.http库里面,这种办法可以最大程度上把可能发生变化的部分与一般逻辑分开。
二:Servlet的主要类
servlet库中有三个类提供了主要的Servlet技术的架构,这三个类是:Servlet接口,GenericServlet类和 HttpServlet类:
(A)Servlet接口声明了三个方法,init(),destroy()和service()方法,这三个方法决定了Servlet的生命周期
(B)GenericServlet是一个抽象类,它提供了Servlet接口的默认实现,但是却留下一个service()方法,这个方法仍然是一个抽象方法,任何个体的Servlet类均必须提供service()方法,以便提供必要的具体行为.
(C)HttpServlet类继承自GenericServlet,虽然它本身也是一个抽象类,但是它为所有行为包括service和七个do方法都提供了默认的实现:doGet,doHead,doPost,doPut,doDelete,doOption,doTrace,这七个do方法基本涵盖了 http协议的各种请求的种类.
三:HttpServlet的生命周期
Servlet的生命周期描述一个Servlet如何被加载和被初始化,它是怎么样接收请求,响应请求以提供服务,java的HttpServlet类必须在一个Servlet引擎所提供的容器环境里面运行,因此,它的生命周期是由容器环境管理的.
Servlet生命周期由接口javax.servlet.Servlet所定义,所有的Servlet必须实现它才能在Servlet容器环境里面运行.它的生命周其大概如下:
(A)加载:Servlet容器可以同时创建一个或多个Servlet实例,这个过程可以在Servlet容器加载Servlet类时执行,或者在 Servlet对象响应请求时执行,也可以在两者之间的任何时候执行.
(B)初始化:Servlet容器调用一个init()方法将此Servlet初始化,初始化时,Servlet对象可以从数据库中读取初始数据,建立 Connection,或者建立对其他有价值的资源的引用.
(C)就绪:Servlet被初始化后,处于能响应请求的就绪状态,当客户端有一个请求时,Servlet容器将SevletRequest和 ServletResponse对象都转发给Servlet,这两个对象以参数的形式传给service方法,这样,service方法会进一步调用 doGet和doPost等方法处理相应的http处理请求
(D)释放:调用destroy()方法,系统将释放相应的资源,所有失去引用的Java对象都会被垃圾收集器收集.
四:模板方法模式的使用
Servlet在几个地方法采用了模板方法模式的设计
(A)service()方法是一个模板方法,这个方法调用了七个do方法中的一个或几个,完成对客户端的请求,下面是示意源码:
protexted void service(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
String method = req.getMethod();
if(method.equals("GET")){
}else if(method.equals("POST")){
}
......
}
当然,这个service方法可以被子类置换掉.
五:观察者模式的应用
Servlet引擎的事件可以分成Servlet环境事件和Session事件两种,通过Servlet引擎的事件机制可以做如下的工作:
(A)管理数据库的各种资源的使用和释放
(B)建立计数机制
(C)监视Http Session的状态及属性
Servlet引擎的事件机制与AWT和Swing库中的事件模型是一样的事件委派模型。
(1)Servlet环境事件
当Servlet环境被创建,关闭,或者一个属性被加入到环境里,一个已经在环境里的属性被删除或修改时,都会产生Servlet事件:
事件类型接口方法
servlet环境被创建javax.servlet.ServletContextListener contextInitialized
Servlet环境被关闭javax.servlet.ServletContextListener contextDestroyed
........................
(2)Session的事件
当Session被激活,钝化,或者一个属性被加入到Session对象里,一个已经在Session里的属性被删除或者修改时,都会产生Session 事件,下面的表给出了Session事件的清单,每一个事件对应的事件监听器(listener)接口,以及所对应的方法:
事件类型接口方法
一个session被激活javax.servlet.http.HttpSessionListener sessionCreated
一个session被钝化javax.servlet.http.HttPSessionListener sessionDestroyed
一个属性被加入javax.servlet.http.HttpSessionAttributesListener attributeAdded
............................
要对某一个事件做出响应,就要准备一个谓的监听器,这个类实际上扮演的就是观察者模式的角色,那么怎么才能准备一监听器类呢?
(1)针对某个事件的监听类必须实现所对应的事件接口
(2)一个监听器类必须有一个公开的默认构造子
(3)必须实现监听器接口所要求的方法
下面分为Servlet环境的舰艇器和Session属性监听器
import javax.servlet.*;
public final class myListener implements ServletContextListener
{
/** This method is called when the servlet context is
* initialized(when the Web Application is deployed).
* You can initialize servlet context related data here.
*/
public void contextInitialized(ServletContextEvent event)
{
//write your code here
}
/** This method is invoked when the Servlet Context
* (the Web Application) is undeployed or
* WebLogic Server shuts down.
*/
public void contextDestroyed(ServletContextEvent event)
{
//write your code here
}
}
import javax.servlet.*;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public final class myListener implements HttpSessionAttributeListener
{
/** This method is called when an attribute
*﹛is added to a session.
*/
public void attributeAdded(HttpSessionBindingEvent sbe)
{
}
/** This method is called when an attribute
* is removed from a session.
*/
public void attributeRemoved(HttpSessionBindingEvent sbe)
{
}
/** This method is invoked when an attibute
* is replaced in a session.
*/
public void attributeReplaced(HttpSessionBindingEvent sbe)
{
}
}
发表评论
-
各种语言写的wordcount
2015-09-24 16:07 0Java版本: String input ... -
数组双指针算法的研究
2015-07-14 16:59 2469双指针算法在数组/链 ... -
初识ThreadLocal
2015-07-07 13:15 1521最近公司在进行Java开发人员的招聘活动,其中有一道面试题 ... -
摩尔投票法
2015-06-30 20:13 18435摩尔投票法 提问: 给定一个int型数组,找出该数 ... -
小心寄存器
2012-11-08 13:53 4试试这段代码就知道了 public cla ... -
简单工作流引擎
2012-07-06 16:58 2419从公司的一个项目中挖出来的工作流引擎的代码,虽然是一个很简单的 ... -
Always clean the ThreadLocal variables.
2012-05-24 09:16 1221Any variable stored in ThreadLo ... -
STRUTS2 源码 - Logging System
2012-05-24 08:51 1412看了STRUTS2的源码,了解了它的logging系统,觉得还 ... -
在线词典的数据结构实现。
2012-05-18 08:37 0昨天在网上看到了一道百度的面试题: Baidu写道 ... -
Log4j 代码学习 - Factory
2012-05-17 08:47 1116我们最早提到,Log4j的初始代码在LogManager的静态 ... -
Log4j 代码学习 - Appender
2012-05-16 09:09 1366在上一篇文章里,我们 ... -
Log4j 代码学习
2012-05-15 14:58 1169最近闲来无事,正好手头上有Log4j的代码,于是就拿来学习了下 ... -
java7中的ThreadLocalRandom(转)
2012-01-20 09:08 4363今天早上看到一个关于java7中的ThreadLocalRan ... -
(转)追MM与23种设计模式
2011-11-16 14:13 10041、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德 ... -
(转)Java 参数列表
2011-11-05 19:48 2955下面的讨论以Windows ... -
(转)TOMCAT源码分析
2011-10-17 16:06 2153TOMCAT源码分析(启动框架 ... -
java写的四则运算器
2011-08-19 22:19 2744本打算做一个从RE到NFA的转换器,思路已经理清了,但是在动手 ... -
MBeanServer中instantiate 和 invoke的区别
2011-06-02 11:52 1332JMX中有两种方式调用另一个MBean中的方法 先创建一个M ... -
JMX 的一个简单例子
2011-05-30 17:41 1090废话不多说,上代码: HelloWorldMBean接口 ... -
执行JAR文件的一些问题(转)
2011-03-25 13:41 1391大家都知道一个java应用项目可以打包成一个jar,当然你必须 ...
相关推荐
在MV模式中,控制器使得代码结构更清晰,维护和扩展也更为容易。 韩顺平是一位知名的Java讲师,他经常讲解如何在实际项目中应用MV模式。通过他的源代码示例,学习者可以更直观地理解MV模式在Servlet中的运用。 ...
1、login.jsp:登录页面,登录表单提交到名为LoginServlet的Servlet。 2、在LoginServlet中检查用户名和密码,若合法(假定合法的用户名均以 “ahpu_”开头,密码均为“123”)则转发到messageBoard.jsp。 3、...
在这个名为"Servlet使用MVC模式(Dao\Service\Servlet)增删查改"的小程序中,我们将深入探讨如何利用这些组件来实现对MySQL数据库的操作。 **模型(Model)** 模型层是应用程序的核心,负责处理业务逻辑和数据访问...
在IT行业中,模型-视图-控制器(Model-View-Controller,MVC)是一种常见的软件设计模式,尤其在Web开发领域被广泛应用。本项目“JSP-Servlet 简单mvc模式”旨在演示如何利用Java的JSP和Servlet技术实现一个基础的...
Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统 Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统 Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统
### Servlet模式的留言板知识点解析 #### 一、实验概述 **实验名称:**Servlet及其应用 **实验目的:** - 熟练掌握Servlet的定义与使用。 - 掌握使用Servlet作为控制器的应用。 - 熟悉MVC(Model-View-Controller...
在DAO设计模式中,Servlet接收用户请求,调用服务层方法,这些方法又会进一步调用DAO来与数据库交互。 **3. AJAX (Asynchronous JavaScript and XML)** AJAX允许Web页面在不重新加载整个页面的情况下与服务器交换...
在Web开发领域,Servlet、JSP(JavaServer ...总的来说,使用Servlet、JSP和JavaBean开发用户登录注册程序,能够有效地分离关注点,提高代码的可读性和可维护性。结合MVC模式,可以构建出灵活且易于扩展的Web应用。
系统中使用了MySQL数据库作为数据存储。MySQL是一款广泛使用的开源关系型数据库管理系统,它具有良好的性能和稳定性,适用于中小规模的Web应用。在本系统中,Model部分可能包括与数据库交互的Java类,这些类负责执行...
Servlet生命周期和模板设计模式是Java Web开发中的两个关键概念,它们在构建动态Web应用程序时起着至关重要的作用。 首先,让我们深入理解Servlet的生命周期。Servlet是Java编程语言中的一种接口,用于扩展服务器的...
在IT行业中,Web开发是至关重要的领域,而`JSP+Servlet+JavaBean`模式是构建动态网站的经典组合。这个模式充分利用了MVC(模型-视图-控制器)设计模式,使得开发过程更加清晰和模块化。下面我们将深入探讨这个模式...
在这个实验中,学生将学习如何使用JavaBean封装数据,通过Servlet处理HTTP请求,以及DAO模式在数据库操作中的应用。此外,还将了解JavaScript客户端验证、JSP表达式和请求转发等Web开发技术。通过实践,学生能够更...
在这个模式中,Model负责数据处理和业务逻辑,View负责显示数据,Controller负责接收用户输入并调用Model进行处理,同时更新View。在本项目中,Servlet通常作为Controller,JSP作为View,而Model可能是独立的Java类...
在Servlet中,可以使用Apache Commons FileUpload库或Java 7及更高版本的内置API来解析上传的文件。文件通常会保存到服务器的指定目录,并且可能需要对文件类型和大小进行限制,以保证安全性和资源管理。 总结来说...
Jsp+Servlet+JavaBean 实现MVC模式的留言本 声明:本留言本所有源代码开源,使用者可以自由修改和传播,但仅限于非商业用途。 作者:梁龙 博客:http://www.lianglong.net.cn 由于这是本人学习JAVA的第一个项目,...
基于Servlet的MVC模式.ppt
(基于MVC模式下web端的开发,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP+JavaBean模式程序各个模块之间层次清晰) 仅供初学者参考,内有文档注释,部分细节不懂者,留言即可
在MVC模式中,Servlet作为控制器,接收请求,调用模型处理业务,然后将结果传递给jsp展示。 三、MySQL数据库的运用 1. 数据存储:MySQL是一款开源、免费的关系型数据库管理系统,具有高性能、稳定性强的特点,非常...
本示例中,我们探讨的是如何利用Servlet结合MVC(Model-View-Controller)设计模式来实现cookie缓存以及分页显示数据,这两项功能在实际Web应用中非常常见。 **MVC设计模式**: MVC模式是软件工程中的一种架构模式...
"基于JSP+JavaBean+Servlet模式的图书管理系统" 是一个使用了经典Web开发技术栈构建的应用程序。在这个系统中,JSP(JavaServer Pages)用于展示动态内容,JavaBean作为业务逻辑组件,而Servlet则处理HTTP请求和响应...