如果我们直接通过实现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) |
如果我们要自定义一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service()方法。
在GenericServlet类中,提供了两种重载的init()方法:
第一种init()方法是Servlet接口中init()方法的实现。在这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。
通常我们在编写继承于GenericServlet的自定义Serlvet时,只需要重写第二中不带参数的init()方法就可以了。
在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对象,方式有以下几种:
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 {
}
}
ServletConfig servletConfig = getServletConfig();
ServletConfig接口提供了以下方法供使用:
Method Summary | |
---|---|
String | getInitParameter(String name) |
Enumeration | getInitParameterNames() |
ServletContext | getServletContext() |
String | getServletName() |
下面我们一一来讨论上述方法的作用:
<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”。
首先,我们需要在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”。
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
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>
转载说明:请注明作者及原文链接,谢谢!