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中配置的值

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM