【菜鳥學Java】4:Servlet 技術

        什麼是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可能用的比較少了。

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