【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基礎知識,大家還有什麼疑問可以給我留言,我會及時給大家解決。
=============================================================================================================================
=============================================================================================================================