第五章:Servlet 模型 二

Servlet應用開發接口

在這裏插入圖片描述

在這裏插入圖片描述
Servlet服務器不會輕易銷燬,生命週期只會初始化,實例化一次。
service()方法會執行多次。容易同此數據多次讀取,線程不安全。
解決方法是多用本地數據,

在這裏插入圖片描述

在這裏插入圖片描述


Servlet的生命週期

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
參數是服務器自動生成的

在這裏插入圖片描述
第三種舉例:超負荷工作。

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述


Servlet應用進階

在這裏插入圖片描述
context是全局對象,解決了多個servlet之間的數據不同步問題

<!-- 配置全局的初始化參數,任意servlet都可以訪問-->
<context-param>
	<param-name>ContextParam1</param-name>
	<param-value>ContextParam1Value</param-value>
</context-param>
<context-param>
	<param-name>ContextParam2</param-name>
	<param-value>ContextParam2Value</param-value>
</context-param>  
  
  
  
  
  
  <!-- servlet別名 -->
<servlet>
	<servlet-name>ServletA</servlet-name>
	<servlet-class>net.lww.ServletA</servlet-class>
	<!--配置servlet初始化參數-->
	<init-param>
		<param-name>ServletParam1</param-name>
		<param-value>ServletParam1Value</param-value>
	</init-param>
	<init-param>
		<param-name>ServletParam2</param-name>
		<param-value>ServletParam2Value</param-value>
	</init-param>
</servlet>
  <!-- 虛擬路徑 -->
<servlet-mapping>
	<servlet-name>ServletA</servlet-name>
	<url-pattern>/ServletA</url-pattern>
</servlet-mapping>


在這裏插入圖片描述




ServletConfig

在這裏插入圖片描述

第一種ServletConfig方法,(一般不用)
在這裏插入圖片描述
第二種獲得ServletConfig方法,哪裏都能用
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

web.xml與@WebServlet註解

在這裏插入圖片描述

在這裏插入圖片描述





全局數據同步

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Class_7</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>ServletB</welcome-file>
  </welcome-file-list>
  
  
  
  
  
  
<!-- 配置全局的初始化參數,任意servlet都可以訪問-->
<context-param>
	<param-name>ContextParam1</param-name>
	<param-value>ContextParam1Value</param-value>
</context-param>
<context-param>
	<param-name>ContextParam2</param-name>
	<param-value>ContextParam2Value</param-value>
</context-param>  
  
  
  
  
  
  <!-- servlet別名 -->
<servlet>
	<servlet-name>ServletA</servlet-name>
	<servlet-class>net.lww.ServletA</servlet-class>
	<!--配置servlet初始化參數-->
	<init-param>
		<param-name>ServletParam1</param-name>
		<param-value>ServletParam1Value</param-value>
	</init-param>
	<init-param>
		<param-name>ServletParam2</param-name>
		<param-value>ServletParam2Value</param-value>
	</init-param>
</servlet>
  <!-- 虛擬路徑 -->
<servlet-mapping>
	<servlet-name>ServletA</servlet-name>
	<url-pattern>/ServletA</url-pattern>
</servlet-mapping>





</web-app>

```java
package net.lww;


//@WebServlet("/ServletA")//註解方式配置
public class ServletA extends HttpServlet {
	private static final long serialVersionUID = 1L;
//	private ServletConfig config;//自定義ServletConfig--------------------------
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletA() {
        super();
        // TODO Auto-generated constructor stub
    }    
    //------------------------
//	@Override
//	public void init(ServletConfig config) throws ServletException {
//		// TODO Auto-generated method stub
//		super.init(config);
//		this.config=config;//----------------
//	}
//	
	
	
	
	

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//獲取ServletConfig對象
		ServletConfig config=this.getServletConfig();
		
		
		//獲取Servlet初始化參數,此處的config是局部的對象,就近原則
		String param1=config.getInitParameter("ServletParam1");
		String param2=config.getInitParameter("ServletParam2");
		
		
		//獲取ServletContext對象。
		ServletContext context=this.getServletContext();//config.getServletContext();
		//獲取全局初始化參數
		String contextParam1=context.getInitParameter("ContextParam1");
		String contextParam2=context.getInitParameter("ContextParam2");
		
		
		//在客戶端進行顯示
		PrintWriter writer=response.getWriter();
		writer.write("paran1=="+param1);
		writer.write("<br/>");
		writer.write("param2=="+param2);
		writer.write("<br/>");
		writer.write("ContextParam1=="+contextParam1);
		writer.write("<br/>");
		writer.write("ContextParam2=="+contextParam2);
		

		writer.write("<br/>");	
		//顯示當前訪問次數
		writer.write("次數是=="+getVisitCount());
		writer.write("<br/>");	
		
	}
	
	
	private int getVisitCount() {
		//先判斷ServletContext中次數是否存在,不存在設置爲1
		//獲取ServletContext對象
		ServletContext context=this.getServletContext();
		//獲取context中的參數num
		Object obj=context.getAttribute("num");
		//判斷
		int num=0;
		if(null==obj) {
			num=1;
			context.setAttribute("num",num);
		}else {
			//訪問次數轉化爲整形
			num=Integer.parseInt(obj.toString());
			++num;
			context.setAttribute("num",num);
		}
		return num;
	}
	
	

	

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

}




```java
package net.lww;


/**
 * Servlet implementation class ServletB
 */
@WebServlet("/ServletB")
public class ServletB extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

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


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//獲取輸出流Writer對象
		PrintWriter writer=response.getWriter();
		//獲取ServletContext對象。
		ServletContext context=this.getServletContext();//config.getServletContext();
		//獲取Context對象中的所有參數
		Enumeration<String> params =  context.getInitParameterNames();
		//遍歷枚舉類型
		while(params.hasMoreElements()) {
			//得到當前參數
			String paramName=params.nextElement();
			//得到當前參數的數值
			String paramValue=context.getInitParameter(paramName);
			//參數值進行顯示
			writer.write(paramName+"="+paramValue);
			writer.write("<br/>");			
		}	
		writer.write("<br/>");	
		//顯示當前訪問次數
		writer.write("次數是=="+getVisitCount());	
	}
	
	
	

	/*實現計數器的封裝方法
	 * 獲取訪問次數
	 * */
	private int getVisitCount() {
		//先判斷ServletContext中次數是否存在,不存在設置爲1
		//獲取ServletContext對象
		ServletContext context=this.getServletContext();
		//獲取context中的參數num
		Object obj=context.getAttribute("num");
		//判斷
		int num=0;
		if(null==obj) {
			num=1;
			context.setAttribute("num",num);
		}else {
			//訪問次數轉化爲整形
			num=Integer.parseInt(obj.toString());
			++num;
			context.setAttribute("num",num);
		}
		return num;
	}
	

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}




註解配置
package net.lww;

//@WebServlet("/ServletC")//註解配置,參數是虛擬路徑
@WebServlet(
		urlPatterns = "/ServletC",
		loadOnStartup = 1,
		initParams = {
				@WebInitParam(name="p1",value="p1value"),
				@WebInitParam(name="p2",value="p2value")
		}
)
//需要什麼加什麼,不用的刪掉就好






public class ServletC extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

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


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		ServletConfig config=this.getServletConfig();
		String p2=config.getInitParameter("p2");
		response.getWriter().write("<br/>"+"p2=  "+p2);	
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章