`
superich2008
  • 浏览: 324424 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Servlet的基础概念 监听器 过滤器等【转】

阅读更多

Servlet的基础概念

1. Servlet是什么?
答:1) 模块化的程序,运行在服务器端,增强了请求/响应导向服务;
2) 应用示例:
a. 访问远端对象;
b. 跟踪大量信息;
c. 多用户协作

2. HTTP和Servlets
答:1) Servlet是HTTP协议中作为CGI的一个替代品;
2) HttpServlet类用于开发HTTP为基础的Servlet

3. HttpServlet
答:1) 继承抽象类javax.servlet.GenericServlet,实现接口java.io.Serializable;
2) 用以开发Http协议为基础的Servlet

4. 服务方法
答:1) 每当服务接收到对Servlet的请求时,服务器就会产生一个新线程,并调用Service。service方法检查HTTP请求类型(GET、POST、PUT、DELETE等),并相应地调用doGet、doPost、doPut、doDelete等。
2) doGet/doPost方法接收HttpServletRequest和HttpServletResponse对象。
3) 99%的时间里,只需注意GET和/或POST请求;
4) 没有任何doHead方法。

5. 返回响应
答:1) PrintWriter out = response.getWriter // 用于返回文本数据给客户端
2) ServletOutputStream out = response.getOutputStream // 用于返回二进制数据给客户端

6. 支持Servlet的Web服务器
答:1) J2EE应用服务器包括:Web Container和EJB Container;
2) Web Container的Servlet Engine提供对Servlet的运行支持;

用Servlet处理表单数据

1. Form元素的属性
答:1) ACTION: 用来指定要处理FORM数据的Servlet的URL,也可以指定FORM数据将要发送到的电子邮件;
2) METHOD: 指定数据传送给HTTP服务器的方法;
3) ENCTYPE: 指定数据在传输之前进行编码的方式, 例multipart/form-data 编码将每个字段作为MIME可兼容的文档的单独部分传输。

2. 解析请求
答:1) 对于所有的请求:
a. getParameterNames: 以Enumeration形式获取表单中清单, 每一项都可以转换成String;
b. getParameter: 返回表单中参数名(区分大小写)对应的值(没有这样的参数,返回null;没有任何值,返回空String);
c. getParameterValues: 返回表单中参数名(区分大小写)对应的字符串数组(没有这样的参数,返回null;只有一个值,返回值为单一元素组);


Servlet的生命周期

1. Servlet的生命周期
答:1) 通过web Container装载(J2EE的组件都是被动地装载入Container)并实例化Servlet对象;
2) 调用init()方法(在整个生命周期中只被调用一次);
3) 调用service()方法(在整个生命周期中可被调用多次);
4) 调用destroy()方法(在整个生命周期中只被调用一次);

2. init方法
答:1) 当首次创建Servlet时就会调用init方法, 而不是每个用户请求都会调用该方法。
2) 除非被destroy方法移除,否则不能被重载;
3) init方法一结束,servlet即可接受客户端请求;

3. init方法实例
答:1) 在编写接受ServletConfig作为参数的init方法时,应该总是在首行调用super.init;
2) init方法接受ServletConfig作为参数, 用以下方法获得参数值:
a. getInitParameter: 返回指定参数名称对应的值,如果参数不存在,返回null;
b. getInitParameterNames: 返回指定参数名称对应的值枚举,如果参数不存在,返回的空枚举;

3. service方法
答:1) 每当服务器接收到对Servlet的请求时,服务器就会产生一个新线程, 并调用service。service方法检查HTTP请求类型,请相应地调用doGet、doPost、doPut、doDelete。
2) 被container调用去响应(ServletResponse)来自客户端的请求(ServletRequest);

4. Servlets的多线程安全
答:1) 多线程占用资源少,处理速度快,提高了效率。
2) 一些编码建议:
a. 对变量和方法定义适当的访问方式, 例如单纯取值操作不会有多线程安全问题;
b. 同步化所有访问重要数据的实例变量;
c. 创建访问类变量的访问方法。

5. SingleThreadModel接口
答:1) 如果希望禁止多线程访问,可以让Servlet使用SingleThreadModel接口:
public class YourServlet extends HttpServlet implements SingleThreadModel{
...
}
2) 使用此接口,系统将保证不会存在多个请求线程同时访问Servlet的单个实例。但是仍然需要同步对存储在Servlet外部的类变量或共享字段的访问。
3) 如Servlet频繁被访问,则Servlet访问的同步将严重影响性能(延时)。

6. destroy方法
答:1) 服务器决定删除已经加载的Servlet实例之前将调用Servlet的destroy方法;
2) 该方法允许Servlet:
a. 关闭数据库连接;
b. 中止后台线程;
c. 将Cookie程序清单或访问计数写到磁盘以及执行其他类似的收尾工作。

7. 在Servlet终止时处理Service线程
答:1) 在destroy()方法中:如有服务(通过一个同步化的实例方法取得当前线程数大于0),则置关闭状态为true(通过一个同步化的实例方法实现)。然后循环等待服务线程数为0.
2) 在Service()方法中: 如见关闭状态为true,便不执行具体逻辑方法,直接退出。

资源访问

1. 分布式JAVA技术
答:1) JDBC;
a. 实现了Data和Client的分开;
b. 通过简单的配置可以适用不同种类的数据库。
2) RMI(RMI使用的协议为Internet Inter ORB Protocol);
3) CORBA(核心技术为ORB:相应的你的请求转为另一个物理地址另一个不同语言对象的请求。纯Java的情况下根本不用CORBA);

2. 转发结果至可视页面
答:1) 用JavaBean(用来装载一组值,遵从一定协议的class)封装结果;
2) 每个JVM中的每一个应用程序里都存在一个上下文;
3) servletContext在servletConfig的对象中;
4) ServletContext.getRequestDispatcher(String path):返回一个RequestDispatcher
5) 通过RequestDispatcher的forward()或include()方法传送请求。

3. 转发请求至新的资源
答:1) request dispatcher的二种传送请求方式
a. Forward: 将请求从一个servlet传到服务器上的其他资源(servlet、JSP、HTML);
b. Include: 包括静态或动态内容;
2) 获得request dispatcher的二种方式:
a. ServletRequest.getRequestDispatcher() // 相对路径
b. ServletContext.getRequestDispatcher() // 绝对路径
3) 四种资源范围
a. javax.servlet.ServletContext: 整个应用程序范围内;
b. javax.servlet.http.HttpSession: 会话期间;
c. javax.servlet.ServletRequest: 一个请求期间;
d. javax.servlet.jsp.PageContext: 一个JSP页面;

Servlets中的持久状态

1. HTTP协议中无状态的优缺点:
答:优点:可以服务很多客户端;
缺点:不能在多个请求之间共享信息(通过Cookie和Session解决);

2. Cookies
答:1) Cookies是Web服务器发送到浏览器的简短文本信息,以后在访问同一个Web站点或域时浏览器就会毫无更改地返回该文本信息。
2) 用户可以决定是否接受Cookie。
3) 一个Cookie由以下内容组成:
a. 名称;
b. 单个值;
c. 一些操作属性:路径或所在域、有效期以及版本号。
4) 每个站点,浏览器通常只接受20条Cookie,总共接受300条,以及每条Cookie限制为4KB。

3. 设置Cookie
答:1) 创建Cookie:
Cookie c = new Cookie("CookieName", "CookieValue");
2) 设置有效期:
c.setMaxAge(int lifetime); 黙认为负值,只作用于当前会话,不能存储在磁盘上;如为0值表示删除Cookie;有效值为秒为单位。
3) 在响应头中放置Cookie:
response.addCookie(c);
4) 从客户端读取Cookie:
Cookie[] cookies = request.getCookies();
Cookie cookie;
for(int i=0; i<cookies.length; i++)
{
cookie = cookies[i];
out.println("<tr><td>" + cookie.getName() + "</td><td>" + cookie.getValue());
}

4. Sessions
答:1) 一个客户端和一个服务器端一次连接信息的所有集合,通过brower发出,由服务器端的servlet调用;
2) 提供一种方式在多个页面请求间确认用户或者储存关于用户的信息;
3) 实现会话跟踪的三种方式:a. cookie; b. URL重写; c. 隐藏的表单段

5. 设置Sessions
答:1) 创建Sessions:
HttpSession session = request.getSession(true); // true表示如不存在则创建一个新的session
2) 用指定名称将一个对象绑定到session:
public void setAttribute(String name, Object value);
3) 删除与指定名称相关的所有值:
public void removeAttribute(String name);
4) 返回会话中所有属性名
public Enumeration getAttributeNames();
5) 返回指定名称对象
public Object getAttribute(String name);

6. Cookies和Sessions的比较
答:1) Cookies可由用户决定是否需要, Sessions不能;
2) Cookies是一种装载sessionID的可能;
3) Cookies存储在客户端, Sessions存储于服务器端;
4) Cookies可以构造,可以由Request取出,由Response返回.

过滤器

1. 什么是过滤器?
答:与Servlet相似,过滤器是一些Web应用程序组件,可以绑定到一个Web应用程序档案中。但是与其他Web应用程序组件不同的是,过滤器是 “链”在容器的处理过程中的。这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发的响应信息返回到客户前访问这些响应信息。这种 访问使得过滤器可以检查并修改请求和响应的内容。

2. 过滤器可以用于:
答:1) 为一个Web应用程序的新功能建立原型(可被添加到Web应用程序中或者从Web应用程序中删除而不需重写基层应用程序代码);
2) 向过去的代码中添加新功能。

3. 过滤器放在容器结构什么位置?
答:过滤器放在Web资源之前,可以在请求抵达它所应用的Web资源(可以是一个servlet、一个JSP页面,甚至是一个HTML页面这样的静态内容)之前截获进入的请求,并且在它返回到客户之前截获输出请求。

4. 过滤器的存活周期
答:过滤器有四个阶段(与servlet类似):
1) 实例化;
2) 初始化(调用init()方法);
3) 过滤(调用doFilter()方法);
4) 销毁(调用destroy()方法);

5. 过滤器类和接口
答:所有的过滤器都必须实现javax.servlet.Filter接口:
1) 容器调用init()方法初始化过滤器实例:
public void init(FilterConfig config) throws ServletException
2) doFilter()方法包含过滤器逻辑:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
3) destroy()方法由容器在销毁过滤器实例之前调用:
public void destroy();
4) FilterChain的doFilter()方法之后的代码构成了后期处理过滤器调用。

6. 配置过滤器
答:使用<filter>和<filter-mapping>元素来配置:
<filter>
<filter-name>XSLTFilter</filter-name> //过滤器名
<filter-class>filters.SmartXSLFilter</filter-class> //具体过滤器类
<init-param> //初始化参数
<param-name>xsltfile</param-name>
<param-value>/xsl/stockquotes.xsl</param-value>
</init-param>
</filter>
<filter-mapping> //将过滤器应用于Web应用程序中的每个Web资源
<filter-name>Logger</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Web应用程序生命周期事件及监听器(Servlet V2.3版本以后新增功能)

1. 什么是事件监听器?
答:1) 支持ServletContext、HttpSession(since v2.3)及ServletRequest(since v2.4)中状态改变的事件通知;
2) 实现了一个或多个servlet事件监听器接口的类型;
3) 控制ServletContext、HttpSession(since v2.3)及ServletRequest(since v2.4)中的生命周期;

2. Servlet Context事件监听器
答:1) 对于应用程序而言在JVM层别管理资源或保存状态
2) 有二种类型的事件监听器:
a. ServletContextListener(以下是该监听器的方法)
contextDestroyed(ServletContextEvent sce)
contextInitialized(ServletContextEvent sce)
b. ServletContextAttributeListener(以下是该监听器的方法)
attributeAdded(ServletContextAttributeEvent scab)
attributeRemoved(ServletContextAttributeEvent scab)
attributeReplaced(ServletContextAttributeEvent scab)

3. HTTP Session事件监听器
答:1) 管理从同一个客户端或用户向一个Web应用程序发出的一系列请求相关的状态或资源;
2) 有二种类型的事件监听器:
a. HttpSessionListener(以下是该监听器的方法)
sessionCreated(HttpSessionEvent se)
sessionDestroyed(HttpSessionEvent se)
b. HttpSessionAttributeListener(以下是该监听器的方法)
attributeAdded(HttpSessionBindingEvent se)
attributeRemoved(HttpSessionBindingEvent se)
attributeReplaced(HttpSessionBindingEvent se)

4. Servlet Requst事件监听器
答:1) 管理整个request生命周期的状态
2) 有二种类型的事件监听器
a. ServletRequestListener(以下是该监听器的方法)
requestDestroyed(ServletRequestEvent sre)
requestInitialized(ServletRequestEvent sre)
b. ServletRequestAttributeListener(以下是该监听器的方法)
attributeAdded(ServletRequestAttributeEvent srae)
attributeRemoved(ServletRequestAttributeEvent srae)
attributeReplaced(ServletRequestAttributeEvent srae)

5. 监听器类的规定
答:1) 必须在部署描述符中配置实现类;

分享到:
评论

相关推荐

    servlet 过滤器做的简单登陆demo

    Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达目标Servlet之前或之后对请求和响应进行处理。在这个“servlet过滤器做的简单登陆demo”中,我们将探讨如何利用过滤器实现一个基础的登录验证...

    servlet过滤器和监听器PPT课件.ppt

    servlet过滤器和监听器,servlet过滤器和监听器课件,servlet过滤器和监听器PPT

    servlet中的过滤器与监听器

    Servlet监听器 **监听器** 是一种特殊类型的Servlet组件,它可以监听特定的事件,如会话创建、销毁、请求初始化、上下文初始化等。监听器通过实现不同的接口,如`ServletContextListener`, `HttpSessionListener`,...

    第13章使用Servlet过滤器和监听器

    第13章使用Servlet过滤器和监听器,基础知识

    Servlet、监听器、过滤器、MVC模式介绍.docx

    Servlet、监听器、过滤器和MVC模式是Java Web开发中的核心概念,它们各自承担着不同的职责,共同构建了一个高效、清晰的架构。 首先,MVC(Model-View-Controller)模式是一种软件设计模式,常用于创建Web应用程序...

    jsp/servlet中过滤器和监听器的区别

    在这些技术中,过滤器(Filter)和监听器(Listener)是两个关键的概念,它们在处理请求、响应以及管理应用程序状态时发挥着重要作用。下面将详细讲解这两者的区别。 1. **过滤器(Filter)** - **定义**:过滤器...

    Servlet过滤器与监听器

    Servlet过滤器与监听器

    Servlet过滤器与监听器.doc

    Servlet监听器则用于监听客户端的请求和服务器端的特定事件,例如session的创建、销毁,以及用户的登录、注销等。监听器通过实现Servlet规范定义的接口,如`HttpSessionListener`、`ServletRequestListener`等,可以...

    servlet过滤器与监听器.pdf

    Servlet 过滤器与监听器 概述: Servlet 过滤器(Filter)和监听器(Listener)是 Java Web 应用程序中常见的两种组件,它们提供了各种扩展 Web 应用程序功能的方式。过滤器和监听器都可以通过 Java Web 应用程序...

    Servlet基础知识总结

    过滤器(Filter)是在请求到达目标资源(如Servlet、JSP等)之前或响应从目标资源返回之后进行拦截和处理的对象。可以通过实现`javax.servlet.Filter`接口或继承`javax.servlet.Filter`的实现类来创建过滤器。 ```...

    servlet匹配,过滤器与监听器比较

    servlet的匹配原则,过滤器的匹配和执行过程,监听器的执行

    servlet基础与servlet容器模型

    2. **部署描述符**(web.xml):这是Web应用的配置文件,定义了Servlet、过滤器、监听器等组件的配置信息。 3. **Servlet**:实现了Servlet接口的Java类,处理客户端请求。 4. **Servlet实例**:Servlet容器根据...

    过滤器和监听器的使用与区别

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两种非常重要的组件,它们主要用于增强应用程序的功能和管理应用程序的状态。本篇文章将详细解释这两种技术的使用、配置及其区别。 首先,我们来了解过滤...

    我收集的servlet中事件监听器机制we吧xml配置详解

    在Servlet中,事件监听器机制和`web.xml`配置是两个关键的概念,它们极大地增强了应用的灵活性和可扩展性。 事件监听器机制在Servlet中扮演着重要角色,它允许程序员对特定的事件进行响应,例如请求到达、会话创建...

    javaweb_高级_过滤器_监听器

    【JavaWeb 高级:过滤器与监听器详解】 在JavaWeb开发中,过滤器(Filter)和监听器(Listener)是两种非常重要的组件,它们能够帮助我们实现更精细的控制和管理应用程序的行为。本篇将详细介绍过滤器的原理、使用...

    servlet过滤器1

    另一方面,Servlet监听器(Listener)则扮演着不同的角色。它们是对Web应用程序中特定事件的响应机制。例如,当一个新的会话创建时,会触发HttpSession监听器的`sessionCreated()`方法。监听器分为三类: 1. **...

    Servlet,过滤器和监听器的配置和使用.docx

    Servlet、过滤器和监听器是Java Web开发中的关键组件,它们在构建动态Web应用程序中扮演着重要角色。本文将详细阐述这三者的概念、配置和使用方法。 **Servlet** Servlet是一种Java类,它扩展了服务器的功能,特别...

    关于监听器Listener和过滤器的小demo

    在Java Web开发中,监听器(Listener)和过滤器(Filter)是两个非常重要的概念,它们主要用于增强应用程序的功能和性能。下面将详细讲解这两个概念及其应用。 ### 监听器(Listener) 监听器是实现特定接口的Java...

    关于过滤器和监听器的使用模板

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的组件,它们主要用于增强应用程序的功能和管理应用程序的状态。以下是关于这两个概念的详细说明。 **过滤器(Filter)** 过滤器是Servlet...

    监听器访问计数过滤非法字符

    在IT行业中,监听器(Listener)和过滤器(Filter)是两种非常重要的组件,它们在Web应用程序中扮演着不可或缺的角色。本文将详细讲解如何利用监听器进行访问计数以及通过过滤器来过滤非法字符,以确保系统的安全性...

Global site tag (gtag.js) - Google Analytics