天天看點

Servlet複習Servlet複習

Servlet複習

一、ServletConfig

ServletConfig對象可以用來封裝Servlet的初始化參數。在Web容器建立Servlet對象時,會将Servlet的初始化參數封裝到ServletConfig對象中,并在調用servlet的init方法時,将ServletConfig對象傳遞給servlet。

1.1在web.xml中< init-param >标簽下設定Servlet初始化參數:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <servlet>
  	<servlet-name>servletConfigDemo1</servlet-name>
  	<servlet-class>servletReviewDemo1.servletConfigDemo1</servlet-class>
  	<!-- 在xml中設定初始化參數 -->
  	<init-param>
        <param-name>name</param-name>
        <param-value>clam</param-value>
    </init-param>
     <init-param>
        <param-name>password</param-name>
        <param-value>123</param-value>
    </init-param>
    <init-param>
        <param-name>charset</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>servletConfigDemo1</servlet-name>
  	<url-pattern>/demo1</url-pattern>
  </servlet-mapping>
</web-app>
           

1.2在Servlet中接收ServletConfig對象:

package servletReviewDemo1;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 當servlet配置了初始化參數後,web容器在建立servlet執行個體對象時
 * 會自動将這些初始化參數封裝到ServletConfig對象中
 * 并在調用servlet的init方法時,将ServletConfig對象傳遞給servlet
 * 進而,我們通過ServletConfig對象就可以得到目前servlet的初始化參數資訊
 *@author clam
 *
 */
public class servletConfigDemo1 extends HttpServlet {
	/**
	 * 定義ServletConfig對象
	 * 用來接收初始化參數
	 */
	private ServletConfig config;
	/**
	 * 接收初始化參數
	 */
	public void init(ServletConfig config){
		this.config = config;
	}
	/**
	 * 檢驗初始化參數的接收
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String param1 = this.config.getInitParameter("name");
		/*
		 * 輸出name的value值
		 */
		PrintWriter out = response.getWriter();
		
		out.println(param1);
		
		Enumeration<String> params = this.config.getInitParameterNames();
		/*
		 * 輸出全部參數的name和value值
		 */
		while(params.hasMoreElements()){
			String name = params.nextElement();
			out.println("name = "+ name);
			out.println("value = " + this.config.getInitParameter(name));
		}
	}
}

           

1.3網頁檢視輸出結果:

Servlet複習Servlet複習

二、ServletContext

WEB容器在啟動時,會為每個WEB應用程式都建立一個ServletContext對象,它代表目前的WEB程式,稱context域。

一個WEB應用程式中的Servlet共用一個context域,是以可以用context域在不同的Servlet中共享資料。

ServletConfig中維護了ServletContext對象的引用,可以通過ServletConfig的getServletContext()方法獲得context對象的引用,也可以直接使用Servlet的方法getServletContext()獲得引用。

Servlet複習Servlet複習

2.1使用context域共享資料

在demo1中将資料存入context域中,在demo2中進行通路:

demo1中的代碼:

package servletReviewDemo1;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 在Demo1中建立資料
 * 使用ServletContext在Demo2中通路該資料
 *@author clam
 *
 */
public class servletContextDemo1 extends HttpServlet {
	/*
	 * data是在Demo2中将要通路的資料
	 */
	private String data = "This is clam";
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*
		 * 獲得ServletContext對象
		 * 使用ServletConfig中的getServletContext()方法
		 */
		ServletContext context = this.getServletConfig().getServletContext();
		/*
		 * 将data放入context域中
		 */
		context.setAttribute("data", data);
	}
}

           

demo2中的代碼:

package servletReviewDemo1;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 在Demo2中通路data資料
 *@author clam
 *
 */
public class servletContextDemo2 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*
		 * 擷取ServletContext對象
		 * 使用Servlet中的getServletContext()方法
		 */
		ServletContext context = this.getServletContext();
		/*
		 * 擷取data元素
		 */
		String data = (String) context.getAttribute("data");
		
		response.getWriter().println(data);
	}

}

           

2.2擷取WEB應用的初始化參數

使用< context-param >标簽配置WEB的初始化參數(< context-param >和< init-param >的差別):

<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/test</param-value>
  </context-param>
           

在demo3中擷取初始化參數:

package servletReviewDemo1;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 使用ServletContext擷取項目初始化參數
 *@author clam
 *
 */
public class servletContextDemo3 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*
		 * 擷取context對象
		 */
		ServletContext context = this.getServletContext();
		/*
		 * 擷取初始化參數
		 */
		String value = (String) context.getInitParameter("url");
		response.getWriter().println("name = url");
		response.getWriter().println("value = " + value);
	}
}

           

2.3使用ServletContext實作請求轉發:

使用ServletContext将demo4的請求轉發至demo5

demo4中代碼:

package servletReviewDemo1;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 使用ServletContext實作請求轉發
 *@author clam
 *
 */
public class servletContextDemo4 extends HttpServlet {
	
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().println("This is demo4");
		
		ServletContext context = this.getServletContext();
		
		RequestDispatcher dispatcher = context.getRequestDispatcher("/contextdemo5");//擷取請求轉發對象
		
		dispatcher.forward(request, response);//請求轉發
	}
}

           

demo5中代碼:

package servletReviewDemo1;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class servletContextDemo5 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().println("This is demo5");
	}
}

           

使用浏覽器通路demo4時的效果:

Servlet複習Servlet複習

2.4使用ServletContext通路檔案資源

檔案目錄資訊:

Servlet複習Servlet複習

檔案中的内容:

Servlet複習Servlet複習

使用demo6通路檔案内容:

package servletReviewDemo1;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.MessageFormat;
import java.util.Properties;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 使用ServletContext讀取檔案資源
 *@author clam
 *
 */
public class servletContextDemo6 extends HttpServlet {
	
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String path = this.getServletContext().getRealPath("/WEB-INF/classes/c3p0.properties");
		
		InputStream in = new FileInputStream(path);
		
		Properties prop = new Properties();
		prop.load(in);
		
		String driver = prop.getProperty("c3p0.driverClass");
		String url = prop.getProperty("c3p0.jdbcUrl");
		String user = prop.getProperty("c3p0.user");
		String password = prop.getProperty("c3p0.password");

		response.getWriter().println(
                MessageFormat.format(
                        "driver={0},url={1},user={2},password={3}", 
                        driver,url, user, password));
	}

}

           

浏覽器通路demo6的效果:

Servlet複習Servlet複習

如有不足歡迎指出!

繼續閱讀