Serverlet程序

Serverlet是用Java编写的服务器端程序;主要用于交互地浏览和修改数据,生成动态Web内容;

一个serverlet就是一个继承于HttpServlet抽象类的Java类;下面先看一个简单的例子

import javax.servlet.*;   
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*; 
public class HelloWorldServlet extends HttpServlet {
      
     public void service(HttpServletRequest req, HttpServletResponse res) throws IOException{  
         res.setContentType("text/html");  
         PrintWriter out = res.getWriter();  
         out.println("<html><head><title>Hello World!</title></head>");  
         out.println("<body>");
         out.println("<h1>Hello World!</h1></body></html>");
     }
}
HelloWorldServlet

将这个Java代码编译成.class 类得到 HelloWorldServlet.class 文件;

然后就是将这个文件放入tomcat的一个站点的 ../WEB-INF/classes/   下面

在对应的web.xml 里面添加如下内容:

    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>HelloWorldServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/HelloWorldServlet/*</url-pattern>
    </servlet-mapping>

 OK,现在可以在浏览器里访问了;

http://localhost:8080/webapp/HelloWorldServlet/     webapp为站点名;

下面介绍servlet是怎么样被访问的,首先浏览器发送的URL,服务器会在web.xml文件中寻找对应的<url-pattern>标签,再找到对应的servlet对应的<servlet-name>,然后再根据<servlet-name>,找到对应的servlet-class类 , 然后new一个对象,执行里面的方法;

 

servlet生命周期:

1、加载(通过classloader加载类)

2、实例化(new 一个对象)  这时候会执行构造函数

3、执行初始化函数(init(servletcofig)函数)//servletcofig  这个参数记录了 web.xml中关于这个servlet的配置信息

4、处理请求

5、销毁(执行destroy函数)

注意,无论有N多用户,对于一个符合J2EE标准的服务器,一个servlet的类,值产生一个servlet对象,所有用户都使用这一个对象;

当第一个用户访问的时候,会执行步骤1~4   其他用户访问的时候,就只执行4,不会再执行1~3;

等待服务器关闭的时候,执行5;

实际上,servlet有这样一个接口,singlethread(大概是这个名字),重写这个函数,就可以使得每调用一次,创建一个对象,然而这样会非常非常消耗内存;

 

servlet 设定自启动及参数值在XML中配置的方法:

    <servlet>
        <servlet-name>Log4JInitServlet</servlet-name>
        <servlet-class>Log4JInitServlet</servlet-class>
        <init-param>
            <param-name>log4j-properties-location</param-name>
            <param-value>C:/myTestJava/Log4JWeb/WebRoot/ini/log4j.properties</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
WEB.xml 部分
import java.io.File;
import java.io.IOException; //import org.apache.logging.log4j.core.Logger;
import org.apache.log4j.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Log4JInitServlet
 */
public class Log4JInitServlet extends HttpServlet {
    private static Logger logger;

    public Log4JInitServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        //super.init(config);
        ServletContext sc = config.getServletContext(); 
        String log4jLocation = config.getInitParameter("log4j-properties-location");
        try {
            System.out
                    .println("当前路径默认=======" + System.getProperty("user.dir"));
            System.out.println("---配置文件路径---" + log4jLocation);
            logger = Logger.getLogger(Log4JInitServlet.class);
            PropertyConfigurator
                    .configure("C:/myTestJava/Log4JWeb/WebRoot/ini/log4j.properties");
            int i = 2;
            while ((i--) != 0) {
                logger.info("Info: this is info;");
                logger.debug("Debug: this is Debug;");
                logger.error("Error: this is Error;");
            }
            System.out.println("------------------Init success");
        } catch (Exception e) {
            System.out.println("Warning:there is an error:" + e.getMessage());
        }
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }
}
在init中使用了XML中配置的值

 

posted @ 2015-10-25 16:34  沙中世界  阅读(6037)  评论(0编辑  收藏  举报