【java項目實戰】Servlet詳解以及Servlet編寫登錄頁面(二)

       Servlet是Sun公司提供的一門用於開發動態web網頁的技術。Sun公司在API中提供了一個servlet接口,咱們若是想使用java程序開發一個動態的web網頁,只須要實現servelet接口,並把類部署到web服務器上就能夠運行了。html


到底什麼是Servlet呢?


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


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


一、咱們先寫一個簡單的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>

二、完成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);               	
	}     
}

三、在WebRoot下的WEB-INF的web.xml,部署咱們的Servlet,啓動服務器。web


<?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>

四、必定要啓動服務器,以後在瀏覽器中輸入你的URL,此時咱們就能夠調用Servlet了,咱們看一下運行結果。

             

             

       實例的demo:http://download.csdn.net/detail/jiuqiyuliang/7593641數據庫

==============================================================================================================================小程序

 若是不知道怎麼配置java Web項目,能夠移駕到個人上篇博客(一步步教你使用MyEclipse搭建java Web項目開發環境(一)),下面咱們詳細介紹Servlet的基礎知識。瀏覽器

==============================================================================================================================安全

Servlet基礎


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

         

      解讀API對於拒絕學習API的程序員們是一種煎熬,但它倒是咱們學習和進步的最好工具,且學且珍惜。服務器

                       



       你們能夠在點進去看一看,從上圖,能夠看出Servlet接口定義三個實現類,分別是FacesServlet, GenericServlet, HttpServlet。下面咱們簡單的介紹一下。多線程


二、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就好。



三、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.以正斜槓(/)開頭並以「/*」結尾。

        servlet對url的匹配規則以及路徑問題,你們能夠上網查,有不少相關的資料,例如:http://blog.csdn.net/xh16319/article/details/8014107

             

四、Web服務器調用Servlet過程(Servlet生命週期)

     

      servlet程序是由web服務器調用,web服務器實現了對servlet生命週期的管理。servlet的生命週期分爲四步:

          1)實例化以及加載servlet,new的過程。

          2)初始化init(ServletConfig)。

          3)處理請求,調用servlet的service,doget,dopost方法將Request和Response,做爲參數傳遞。

          4)退出服務,調用destory方法釋放資源。

          


 注意:

         一、servlet只實例化一次。感受有點單例模式的意思,你們能夠研究一下Tomcat的實現原理。

         二、init方法也只執行一次。servlet實例只建立一次,因此init初始化只調用一次。


五、Servlet線程安全問題


       當多個客戶端併發訪問同一個Servlet時,web服務器會爲每個客戶端的訪問請求建立一個線程,並在這個線程上調用service方法,所以,service方法內若是訪問了同一個資源的話,就有可能引起線程安全問題。你們重點理解下面兩句便可:
(1) Servlet是單實例多線程的,若是存在能夠修改的成員變量將會出現線程安全問題。
(2) 使用Servlet最好保證Servlet是無狀態的,也就是沒有能夠修改的成員變量。



       這篇博文只是介紹了Servlet基礎知識,你們還有什麼疑問能夠給我留言,我會及時給你們解決。



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

        下篇博文,咱們作一個JDBC鏈接Oracle數據庫的實例欲知後事如何,請看下回分曉!

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

相關文章
相關標籤/搜索