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内容。
<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>
<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源码分析,源码分析对于学习很有用
韩顺平.2011最新j2ee视频教程.细说servlet.第10讲.serlvet三种开发方式之(继承GenericServlet开发、继承HttpServlet开发).wmv
Servlet接口及其实现类 Java Servlet Jsp XML HTML Servlet接口及其实现类 Servlet接口及其实现类 Servlet接口 GenericServlet类 HttpServlet类 实现Servlet接口 继承GenericServlet类 Servlet接口及其实现类 方法...
在servlet里,GenericServlet 继承servlet和Serializable和ServletConfig ,httpServlet继承GenaricServlet MyClass 继承HttpServlet (和HttpServletResponse ,HttpServletRequest 是依赖关系)
javax.servlet.GenericServlet javax.servlet.ServletContext javax.servlet.ServletRequest javax.servlet.http.HttpUtils javax.servlet.ServletResponse javax.servlet.ServletException javax.servlet....
javax.servlet.GenericServlet.class javax.servlet.SingleThreadModel.class javax.servlet.ServletRequestWrapper.class javax.servlet.ServletResponseWrapper.class javax.servlet.ServletRequestListener.class...
GenericServlet() - Constructor for class javax.servlet.GenericServlet Does nothing. getAttribute(String) - Method in interface javax.servlet.ServletContext Returns the servlet container attribute ...
本章内容 知道什么是...Tomcat作为Servlet容器,其基本的功能如下图所示: Servlet API的主要类和接口 (1) javax.servlet.Servlet接口 (2) javax.servlet.GenericServlet类 (3) javax.servlet.http.HttpServlet类
要创建一个 HTTP Servlet,请扩展 HttpServlet 类, 该类是用专门的方法来处理 HTML 表格的 GenericServlet 的一个子类。 HTML 表单是由 <FORM> 和 </FORM> 标记定义的。表单中典型地包含输入字段(如文本输入字段、...
类 ServletConfig ServletOutputStream ServletContext ServletInputStream ServletResponse GenericServlet ServletRequest Servlet <br>javax.servlet.http<br>接口 类 HttpSession Cookie...
提供了实现servlet接口的两种方法:子类化javax.servlet.GenericServlet(这种方法提供了读取servlet配置信息的例子)和子类化javax.servlet.http.HttpServlet类.还有用service方法完成的经典的Hello World程序
开发servlet有三种方法的实现: 1.实现servlet接口 2.继承GenericServlet 3.继承HttpServlet
Servlet接口是Java Servlet API的核心抽象。所有Servlet类必须直接或间接的实现...目前有GenericServlet和HttpServlet这两个类实现了Servlet接口。大多数情况下,开发者只需要继承HttpServlet去实现自己的Servlet即可。
JSP網頁最後是轉譯為Servlet,從Java程式設計人員的角度來看,Servlet其實就是一個 Java類別,它實作Servlet介面,通常我們會繼承實作該介面的GenericServlet類別或HttpServlet類別。 基礎入門 如果您瞭解JSP中的...
要创建一个 HTTP Servlet,请扩展 HttpServlet 类, 该类是用专门的方法来处理 HTML 表格的 GenericServlet 的一个子类。 HTML 表单是由 <FORM> 和 </FORM> 标记定义的。表单中典型地包含输入字段(如...
Java Servlet API说明文档 绪言 这是一份关于2.1版JavaServletAPI的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/servlet/index.html下面下载Javadoc格式的文档。 谁需要读这份文档 这份...
编写Servlet类通常继承GenericServlet或HttpServlet类。因此Java中有两种类型的 Servlet在Rose中分别是用版型《Http_Servlet》或《Generic_Servlet》来表示。 在Rose中,用Tools→Java/J2EE→NewServlet 来创建...
文章目录一、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介绍