JSP拾遗(六)——Servlet

本文介绍了在J2EE环境中如何使用Servlet进行初始化配置及后台线程启动等操作。通过具体的示例展示了如何在web.xml中配置Servlet并在SystemInitServlet中读取数据库连接信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在典型的J2EE中,我们的应用是通过应用服务器(如TOMCATJBOSSWEBLOGIC等)来加载启动的。如果我们需要在JSP之外做些额外的操作,这些操作并不依赖客户端的请求而执行,那么,我们就需要一个途径来告知服务器,如何来实现自己的操作。而我们程序内部与WEB服务器之间交互信息的途径就是web.xml里面的配置。在这里面,提供了三个接口配置来实现我们自己的需要。这三个接口是:servletfilterlistener

前面的jsp所生成的java代码中我们已经看到了servlet的一个子类的结构。给我们的最直观的感觉是,所有的html都需要用out.write()out.print()来输出,正是因为这个原因,才使得jsp大为流行,因为对于jsp来说,java编码人员和界面设计人员(美工)都可以很容易的修改。但jsp编程并不会取代servlet编程。我们可以定义一个servlet并使其在web应用启动后开始启动,这是jsp所做不到的,jsp只能在客户端发送请求后才能启动。

一个典型的servlet,包含以下方法:

void init(ServletConfig config) : 初始化servlet,根据ServletConfig传入的配置参数,来初始化相关信息。在servlet容器启动该servlet时执行,在一个servlet的生命周期内,这个方法只会执行一次;

void destroy() : 销毁servlet,释放servlet所占用的资源,如数据库链接等。在servlet容器停止该servlet时执行,在一个servlet的生命周期内,这个方法只会执行一次。

void service(ServletRequest req, ServletResponse res)处理请求并作出响应。当servlet容器指示改servlet对请求作出应答时,改方法被执行,在一个servlet的生命周期内,这个方法可以执行多次。

String  getServletInfo(): 返回该servlet的说明信息,如作者,版本等,当然,也可以声明都不做。

ServletConfig getServletConfig(): 返回该servlet的配置信息。一般可以直接返回init时传入的config信息。

典型的servlet用在初始化信息、启动后台线程、执行特定请求(不需要html页面的返回信息,如输出验证码、AJAX服务端等)场合。

下面这个例子将数据库链接信息配置到web.xml中,并由servlet读取配置。

配置信息:

<servlet>
	<description>init system parameters</description>
	<servlet-class>com.hx.servlet.SystemInitServlet</servlet-class>
	<init-param>
		<param-name>DRIVER_CLASS</param-name>
		<param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
	</init-param>
	<init-param>
		<param-name>CONN_URL</param-name>
		<param-value>jdbc:odbc:hxdb</param-value>
	</init-param>
	<init-param>
		<param-name>CONN_USERNAME</param-name>
		<param-value>sa</param-value>
	</init-param>
	<init-param>
		<param-name>CONN_PASSWORD</param-name>
		<param-value>sa</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

 SystemInitServlet类中读取这些信息:

 

package com.hx.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 *
 */
public class SystemInitServlet implements Servlet {

    private ServletConfig config;

    private static String DRIVER_CLASS;

    private static String CONN_URL;

    private static String CONN_USERNAME;

    private static String CONN_PASSWORD;

    /* (non-Javadoc)
     * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
     */
    public void init(ServletConfig servletConfig) throws ServletException {
        config = servletConfig;
        DRIVER_CLASS = servletConfig.getInitParameter("DRIVER_CLASS");
        CONN_URL = servletConfig.getInitParameter("CONN_URL");
        CONN_USERNAME = servletConfig.getInitParameter("CONN_USERNAME");
        CONN_PASSWORD = servletConfig.getInitParameter("CONN_PASSWORD");

        System.out.println("system init servlet processed successfully.DRIVER_CLASS=" + DRIVER_CLASS + ",CONN_URL="  + CONN_URL + ",CONN_USERNAME=" + CONN_USERNAME + ",CONN_PASSWORD=" + CONN_PASSWORD);
    }

    /** 
     */
    public static String getDriverClass() {
        return DRIVER_CLASS;
    }

    /**
     * @return
     */
    public static String getConnectionURL() {
        return CONN_URL;
    }

    /**
     * @return
     */
    public static String getConnectionUsername() {
        return CONN_USERNAME;
    }

    /**
     * @return
     */
    public static String getConnectionPassword() {
        return CONN_PASSWORD;
    }

    /* (non-Javadoc)
     * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
     */
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
    }

    /* (non-Javadoc)
     * @see javax.servlet.Servlet#destroy()
     */
    public void destroy() {
    }

    /* (non-Javadoc)
     * @see javax.servlet.Servlet#getServletConfig()
     */
    public ServletConfig getServletConfig() {
        return config;
    }

    /* (non-Javadoc)
     * @see javax.servlet.Servlet#getServletInfo()
     */
    public String getServletInfo() {
        return null;
    }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值