`
原来我就是麦兜
  • 浏览: 9798 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[Servlet]深入研究GenericServlet

 
阅读更多

GenericServlet概述

如果我们直接通过实现Servlet接口来编写一个Servlet类,就需要实现Servlet接口定义的5种方法,为了简化Servlet的编写,在javax.servlet包中提供了一个抽象类GenericServlet,该类提供了除service()方法外的其他4种方法的简单实现。GenericServlet类定义了一个通用的、不依赖于具体协议的Servlet,它实现了Servlet接口和ServletConfig接口。

public abstract class GenericServlet implements Servlet, ServletConfig

下列表中罗列了GenericServlet的所有方法:

Method Summary
void destroy()
ServletConfig getServletConfig()
ServletContext getServletContext()
void init()
void init(ServletConfig config)
abstract void service(ServletRequest req, ServletResponse res)

重写的init()方法

如果我们要自定义一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service()方法。

在GenericServlet类中,提供了两种重载的init()方法:

  • public void init(ServletConfig config) throws ServletException
  • public void init() throws ServletException

第一种init()方法是Servlet接口中init()方法的实现。在这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。

通常我们在编写继承于GenericServlet的自定义Serlvet时,只需要重写第二中不带参数的init()方法就可以了。

ServletConfig对象

在javax.servlet包中,定义了ServletConfig接口。Servlet容器使用ServletConfig对象在Servlet初始化时向其传递配置信息。

所谓的Serlvet配置信息,就是在Web应用程序中web.xml文件中配置有关Servlet的内容。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>FirstServlet</servlet-name>
    <servlet-class>app.java.servlet.FirstServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/servlet/FirstServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

要想从ServletConfig对象获取有关Servlet的配置信息,首先需要获得ServletConfig对象,方式有以下几种:

  • 通过继承GenericServlet,并重写init(ServletConfig config)方法来获取ServletConfig对象。
public class ConfigServlet extends GenericServlet {
    private ServletConfig config;

    @Override
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
    }

    @Override
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
    }
}
  • 通过继承GenericServlet,并调用getServletConfig()方法来获取ServletConfig对象。
ServletConfig servletConfig = getServletConfig();

ServletConfig接口提供了以下方法供使用:

Method Summary
String getInitParameter(String name)
Enumeration getInitParameterNames()
ServletContext getServletContext()
String getServletName()

下面我们一一来讨论上述方法的作用:

  • getServletName()方法:获取web.xml文件中配置的Servlet名称。
  <servlet>
    <servlet-name>ConfigServlet</servlet-name>
    <servlet-class>app.java.servlet.ConfigServlet</servlet-class>
  </servlet>

我们通过获取到的ServletConfig对象调用getServletName()方法来验证。

public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
    ServletConfig servletConfig = getServletConfig();

    String servletName = servletConfig.getServletName();
    System.out.println(servletName);
}

运行Web应用程序,在控制台中打印“ConfigServlet”。

  • getInitParameter(String name)方法:返回指定名称的初始化参数的值,如果参数不存在则返回null值。

首先,我们需要在web.xml文件中有关Servlet配置信息中,增加初始化参数的内容。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>ConfigServlet</servlet-name>
    <servlet-class>app.java.servlet.ConfigServlet</servlet-class>
    <init-param>
        <param-name>name</param-name>
        <param-value>jyl</param-value>
    </init-param>
    <init-param>
        <param-name>blog</param-name>
        <param-value>http://www.longestory.com</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>ConfigServlet</servlet-name>
    <url-pattern>/servlet/ConfigServlet</url-pattern>
  </servlet-mapping>
</web-app>

然后,我们在自定义Servlet的service()方法中获取对应初始化参数。

public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
    ServletConfig servletConfig = getServletConfig();

    String name = servletConfig.getInitParameter("name");
    String blog = servletConfig.getInitParameter("blog");
    System.out.println(name + "'s blog is " + blog);
}

运行Web应用程序,在控制台中打印“jyl’s blog is http://www.longestory.com”。

  • getInitParameterNames()方法:返回Servlet配置的所有初始化参数名称的枚举集合。
    • Enumeration是Iterator的前身,用法与Iterator一致。
public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
    ServletConfig servletConfig = getServletConfig();

    Enumeration enumeration = servletConfig.getInitParameterNames();
    while (enumeration.hasMoreElements()) {
        String element = (String) enumeration.nextElement();
        String value = servletConfig.getInitParameter(element);
        System.out.println(element + ": " + value);
    }
}

运行Web应用程序,在控制台中打印:

name: jyl
blog: http://www.longestory.com
  • getServletContext()方法:返回一个ServletContext对象,后面具体学习。

ServletConfig有哪些实际作用呢?在struts 1 框架中就运行了ServletConfig内容。

<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>
          /WEB-INF/struts-config.xml,
          /WEB-INF/struts-config-Wildcard.xml
       </param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

转载说明:请注明作者及原文链接,谢谢!

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    Servlet&GenericServlet&HttpServlet源码分析.zip_GenericServle_httpser

    Servlet&amp;GenericServlet&amp;HttpServlet源码分析,源码分析对于学习很有用

    serlvet三种开发方式之(继承GenericServlet开发、继承HttpServlet开发)

    韩顺平.2011最新j2ee视频教程.细说servlet.第10讲.serlvet三种开发方式之(继承GenericServlet开发、继承HttpServlet开发).wmv

    JavaWeb开发技术-Servlet接口及其实现类.pptx

    Servlet接口及其实现类 Java Servlet Jsp XML HTML Servlet接口及其实现类 Servlet接口及其实现类 Servlet接口 GenericServlet类 HttpServlet类 实现Servlet接口 继承GenericServlet类 Servlet接口及其实现类 方法...

    servlet继承图.jpg

    在servlet里,GenericServlet 继承servlet和Serializable和ServletConfig ,httpServlet继承GenaricServlet MyClass 继承HttpServlet (和HttpServletResponse ,HttpServletRequest 是依赖关系)

    servlet-api-2.4.jar.zip

    javax.servlet.GenericServlet javax.servlet.ServletContext javax.servlet.ServletRequest javax.servlet.http.HttpUtils javax.servlet.ServletResponse javax.servlet.ServletException javax.servlet....

    javax.servlet.jar下载

    javax.servlet.GenericServlet.class javax.servlet.SingleThreadModel.class javax.servlet.ServletRequestWrapper.class javax.servlet.ServletResponseWrapper.class javax.servlet.ServletRequestListener.class...

    servlet2.4doc

    GenericServlet() - Constructor for class javax.servlet.GenericServlet Does nothing. getAttribute(String) - Method in interface javax.servlet.ServletContext Returns the servlet container attribute ...

    Java Web应用开发:servlet.ppt

    本章内容 知道什么是...Tomcat作为Servlet容器,其基本的功能如下图所示: Servlet API的主要类和接口 (1) javax.servlet.Servlet接口 (2) javax.servlet.GenericServlet类 (3) javax.servlet.http.HttpServlet类

    servlet temple

    要创建一个 HTTP Servlet,请扩展 HttpServlet 类, 该类是用专门的方法来处理 HTML 表格的 GenericServlet 的一个子类。 HTML 表单是由 &lt;FORM&gt; 和 &lt;/FORM&gt; 标记定义的。表单中典型地包含输入字段(如文本输入字段、...

    学习servlet的实例和参考api

    类 ServletConfig ServletOutputStream ServletContext ServletInputStream ServletResponse GenericServlet ServletRequest Servlet &lt;br&gt;javax.servlet.http&lt;br&gt;接口 类 HttpSession Cookie...

    Servlet学习

    提供了实现servlet接口的两种方法:子类化javax.servlet.GenericServlet(这种方法提供了读取servlet配置信息的例子)和子类化javax.servlet.http.HttpServlet类.还有用service方法完成的经典的Hello World程序

    servlet的三种方法的实现

    开发servlet有三种方法的实现: 1.实现servlet接口 2.继承GenericServlet 3.继承HttpServlet

    servlet-api.jar需要的拿走

    Servlet接口是Java Servlet API的核心抽象。所有Servlet类必须直接或间接的实现...目前有GenericServlet和HttpServlet这两个类实现了Servlet接口。大多数情况下,开发者只需要继承HttpServlet去实现自己的Servlet即可。

    JSP/Servlet

    JSP網頁最後是轉譯為Servlet,從Java程式設計人員的角度來看,Servlet其實就是一個 Java類別,它實作Servlet介面,通常我們會繼承實作該介面的GenericServlet類別或HttpServlet類別。 基礎入門 如果您瞭解JSP中的...

    servlet资源

    要创建一个 HTTP Servlet,请扩展 HttpServlet 类, 该类是用专门的方法来处理 HTML 表格的 GenericServlet 的一个子类。 HTML 表单是由 &lt;FORM&gt; 和 &lt;/FORM&gt; 标记定义的。表单中典型地包含输入字段(如...

    java-servlet-api.doc

    Java Servlet API说明文档 绪言 这是一份关于2.1版JavaServletAPI的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/servlet/index.html下面下载Javadoc格式的文档。 谁需要读这份文档 这份...

    基于UML的毕业设计管理系统的分析与设计.docx

    编写Servlet类通常继承GenericServlet或HttpServlet类。因此Java中有两种类型的 Servlet在Rose中分别是用版型《Http_Servlet》或《Generic_Servlet》来表示。 在Rose中,用Tools→Java/J2EE→NewServlet 来创建...

    JavaWeb的三大组件详细总结

    文章目录一、Servlet(Server Applet)1、Servlet概述:1、ServletConfig API:2、GenericServlet类2、HttpServlet类:(重点掌握)1、doGet和doPost的区别:2、Servlet细节:3、web.xml文件(了解)4、...

    超全面javaweb教程28天第9天 8 GenericServlet介绍

    超全面javaweb教程28天第9天_8_GenericServlet介绍

Global site tag (gtag.js) - Google Analytics