【菜鳥學Java】4:Servlet 技術

連江偉發表於2015-12-01

        什麼是Servlet?

        Servlet是java語言類,用來擴充通過請求響應模式的服務端的能力。儘管servlets可以響應任何型別的響應,它們通常用於擴充基於Web的應用程式。在這種應用程式中,Java servlet技術定義了特定的HTTP servlet類。

        Servlet通常執行在多執行緒伺服器上,因此應該瞭解到Servlet必須處理併發請求並且要小心翼翼地同步對共享資源的訪問。共享資源一般包括記憶體資料(比如例項或者類變數)和外部物件(比如檔案、資料庫連線和網路連線)。

        當然我在這裡主要討論的是產生響應HTTP請求的Servlets。說到這裡就不得不說一個很重要類HttpServlet,上文也提到了,它提供了將要被子類化以建立適用於Web站點的HttpServlet的抽象類,其子類至少必須重寫一個方法,該方法通常是諸如doGet、doPost、doDelete等方法。

        可能說了這麼多,還是對Servlet的作用不是很清楚,也許使用圖可以幫助大家更好的理解Servlet。如下圖所示

        從上圖中我們可以看到,Servlet就是一個執行在Web伺服器中的小型Java程式,它通常通過Http協議接收和響應來自Web客戶端的請求。那麼如何應用Servlet技術呢?請接著看程式碼例項。

        怎麼用Servlet?

        對於客戶端,我們使用html頁面來模擬,對於伺服器端我們編寫一個簡單的Servlet程式,用於處理網頁傳送過來的請求。具體程式碼如下;

        login.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>登入</title>
		<body>
			<form action="http://lochost:8080/test_servlet/loginServlet">
				賬號:<input type="text" name="username"><br>
				密碼:<input type="text" name="password"><br>
				<input type="submit" value="登入">
			</form>
		</body>
	</head>
</html>

        LoginServlet,java程式碼     

import java.io.*;
import java.servlet.*;
import javax.servlet.http.*;

public class LoginServlet extends HttpServlet{
	
	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");
		
		response.getWriter().println("登陸成功!!");
		
	}
}

        web.xml程式碼     

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">

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

        那麼這個Servlet程式具體的執行流程是什麼樣的,下面的時序圖可以幫助大家更好的理解

        

        從上圖可以看出,Servlet從客戶端接收使用者資料,在自己內部或者是呼叫外部程式進行處理,將處理結果傳送回客戶端,從而完成了使用者和系統的互動,就這麼簡單。

        小結一下:

        伺服器上需要一些程式,常常是根據使用者輸入訪問資料庫的程式。這些通常是使用公共閘道器介面(Common Gateway Interface,CGI)應用程式完成的。然而,在伺服器上執行 Java,這種程式可使用 Java 程式語言實現。在通訊量大的伺服器上,JavaServlet 的優點在於它們的執行速度更快於 CGI 程式。各個使用者請求被啟用成單個程式中的一個執行緒,而無需建立單獨的程式,這意味著伺服器端處理請求的系統開銷將明顯降低。

        相比較而言,Servlet更勝於CGI,主要體現在便利性,功能強大,可移植性好,僅需要很少的投入,比較便宜。不過Servlet也有其自己不足,那就是它輸出HTML語句還是採用老的CGI方式,一句一句的輸出,因此編寫和修改HTML非常的麻煩。之後出現的JSP和JSP + Bean等技術,其速度方便都比Servlet要強,所以現在Servlet可能用的比較少了。

相關文章