1. 程式人生 > >【java專案實戰】Servlet詳解以及Servlet編寫登陸頁面(二)

【java專案實戰】Servlet詳解以及Servlet編寫登陸頁面(二)

       Servlet是Sun公司提供的一門用於開發動態web網頁的技術。Sun公司在API中提供了一個servlet介面,我們如果想使用java程式開發一個動態的web網頁,只需要實現servelet介面,並把類部署到web伺服器上就可以運行了。

到底什麼是Servlet呢?

       通俗一點,只要是實現了servlet介面的java程式,均稱Servlet。Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小應用程式),Servlet是在伺服器端執行的小程式

編寫一個現實登陸的Servlet,並部署訪問

1、我們先寫一個簡單的HTML,可以在WebRoot新建,也可以複製一個寫好的HTML,我們用post提交方式,當然也可以用get提交,大家可以自己嘗試一下。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
		<title>登入</title>
	</head>
	<body>
		
		<form action="http://localhost:8080/loginServlet/LoginServlet" method="post">
			使用者:<input type="text" name="username" /><br/>
			密碼:<input type="password" name="password" /><br/>
			<input type="submit" value="登入" />
			
		</form>
	</body>
</html>

2、完成Servlet,在Web專案的src中右鍵新建一個類LoginServlet,輸入下面程式碼即可。
//引入所需要的包
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class LoginServlet extends HttpServlet {
	//重寫doGet方法
	public void doGet(HttpServletRequest request,
            HttpServletResponse response)
     throws ServletException,
            IOException {
		String username = request.getParameter("username");   
		String password = request.getParameter("password");      
		
		//伺服器端列印資訊
		//System.out.println("username=" + username);
		//System.out.println("password=" + password);
		//設定編碼格式
		response.setContentType("text/html;charset=GB18030");
		
		//返回html頁面
		response.getWriter().println("<html>");
		response.getWriter().println("<head>");	
		response.getWriter().println("<title>登入資訊</title>");	
		response.getWriter().println("</head>");	
		response.getWriter().println("<body>");	
		response.getWriter().println("歡迎【" + username + "】使用者登入成功!!!");	
		response.getWriter().println("</body>");	
		response.getWriter().println("</html>");
		}                 	
	//重寫doPost方法
	public void doPost(HttpServletRequest request,
            HttpServletResponse response)
    throws ServletException,
            IOException {
		doGet(request, response);               	
	}     
}

3、在WebRoot下的WEB-INF的web.xml,部署我們的Servlet,啟動伺服器。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
    <servlet>
	   	<servlet-name>MyServlet</servlet-name>
	   	<servlet-class>LoginServlet</servlet-class>
    </servlet>

    <servlet-mapping>
	   	<servlet-name>MyServlet</servlet-name>
	        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
</web-app>

4、一定要啟動伺服器,之後在瀏覽器中輸入你的URL,此時我們就可以呼叫Servlet了,我們看一下執行結果。

             

             

==============================================================================================================================

 如果不知道怎麼配置java Web專案,可以移駕到我的上篇部落格(),下面我們詳細介紹Servlet的基礎知識。

==============================================================================================================================

Servlet基礎

1、解讀API文件,純手工編寫一個Servlet程式,並部署訪問(如上所示)。

      解讀API對於拒絕學習API的程式設計師們是一種煎熬,但它卻是我們學習和進步的最好工具,且學且珍惜。

                       

       大家可以在點進去看一看,從上圖,可以看出Servlet介面定義三個實現類,分別是FacesServlet, GenericServlet, HttpServlet。下面我們簡單的介紹一下。

2、Servlet介面實現類

     (1)FacesServlet是一個用於管理利用JSF(JavaServer Faces)構建使用者介面的web應用程式請求處理生命週期的Servlet。(FacesServletis a servlet that manages the request processing lifecycle for web applications that are utilizing JavaServer Faces to construct the user interface.),大家如果想深入的學習,可以點這裡

     (2)GenericServlet是HttpServlet的父類,包含了servlet的常用方法。GenericServlet使得程式設計師寫servlets更加簡單,它提供了初始化和銷燬生命週期的方法,以及實現了寫日誌檔案的方法。

     (3)HttpServlet指能夠處理HTTP請求的servlet。這是開發人員在編寫Servlet時,通常應繼承這個類即可。

        對於這三個實現類,只為大家做一個簡單的介紹,如果想深入的研究,直接看API就好。

3、Servlet部署

       客戶端通過URL地址訪問web伺服器中的資源,所以若想訪問Servlet必須要把servlet程式對映到一個URL地址上,在web.xml檔案中使用<servlet>元素和<servlet-mapping>元素完成,如上面的例項。

        *<servlet>用於註冊Servlet,包含了<servlet-name>和<servlet-class>兩個子元素,分別用於設定servlet的名稱以及servlet的類名。

        *<servlet-mapping>用於對映上面<servlet>中的對外訪問路徑,同樣包含<servlet-name>和<url-pattern>兩個元素,分別用於設定servlet的名稱以及servlet的對外訪問路徑。

        在servlet對映到URL有兩種格式:

        1.“*.副檔名”

        2.以正斜槓(/)開頭並以“/*”結尾。

4、Web伺服器呼叫Servlet過程(Servlet生命週期)

      servlet程式是由web伺服器呼叫,web伺服器實現了對servlet生命週期的管理。servlet的生命週期分為四步:

          1)例項化以及載入servlet,new的過程。

          2)初始化init(ServletConfig)。

          3)處理請求,呼叫servlet的service,doget,dopost方法將Request和Response,作為引數傳遞。

          4)退出服務,呼叫destory方法釋放資源。

          

 注意:

         1、servlet只例項化一次。感覺有點單例模式的意思,大家可以研究一下Tomcat的實現原理。

         2、init方法也只執行一次。servlet例項只建立一次,所以init初始化只調用一次。

5、Servlet執行緒安全問題

       當多個客戶端併發訪問同一個Servlet時,web伺服器會為每一個客戶端的訪問請求建立一個執行緒,並在這個執行緒上呼叫service方法,因此,service方法內如果訪問了同一個資源的話,就有可能引發執行緒安全問題。大家重點理解下面兩句即可:
(1) Servlet是單例項多執行緒的,如果存在可以修改的成員變數將會出現執行緒安全問題。
(2) 使用Servlet最好保證Servlet是無狀態的,也就是沒有可以修改的成員變數。


       這篇博文只是介紹了Servlet基礎知識,大家還有什麼疑問可以給我留言,我會及時給大家解決。

=============================================================================================================================

=============================================================================================================================