Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 【一步一個腳印】Tomcat+MySQL為自己的APP打造服務器(2-1)Servlet的使用

【一步一個腳印】Tomcat+MySQL為自己的APP打造服務器(2-1)Servlet的使用

編輯:關於Android編程

這次直接找一個JavaEE版本的Eclipse解壓到我們想安裝的目錄下即可,用過 Eclipse+ADT 開發 Android 的同學都知道 Eclipse 是免安裝的,在 /eclipse 下直接打開 eclipse.exe 即可。

到此我們只是簡單安裝了一個服務器的運行環境,現在我們開始寫自己的服務器程序。 不管你是學Java的,還是 Android 的,肯定都學過 Core-Java 課程,那麼你肯定學過 Servlet ,或許你忘了,但這無所謂,我們重新開始。

一、Servlet簡介

摘自書上的一小段解釋——“Java Servlet 是運行在 Web 服務器或應用服務器上的程序,它是作為來自 Web 浏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。使用 Servlet,您可以收集來自網頁表單的用戶輸入,呈現來自數據庫或者其他源的記錄,還可以動態創建網頁”。Servlet 是 sun 公司提供的一門用於開發動態 web 資源的技術。其實,"Servlet"本來是指 Java語言實現的一個接口(狹義的Servlet),但更多的也更普遍的情況是:我們把任何實現了 Servlet 接口的類都叫作 "Servlet"。Servlet 的作用主要是對 Request 的請求數據進行解析、按照業務邏輯處理並將結果封裝成 Response 返回我的理解就是“讀-計算-寫”,像數學計算器一樣,輸入操作數、操作符按"等於"就顯示出結果;也像人的腦神經元一樣“接受刺激-信號處理-作出響應”。為了便於理解,我們來慢慢拆解:

二、Servlet在服務器中的位置

在普通用戶看來,我們平時使用互聯網就像下圖這樣:

普通用戶眼中的服務濃kyvc=" src="/uploadfile/Collfiles/20160601/20160601094130707.png" />

普通用戶只關心自己作為一個客戶端,是和一個叫服務器的東西在進行數據交互,具體服務器在哪裡、做什麼、怎麼實現、數據庫用哪種... ...這些都不重要。

而作為開發者的我們,用戶不關心的問題我們卻理當視如家珍(這是我們吃飯的家伙啊)——我們將服務器部分放大,從一個入門級的服務器開發者的角度來看看服務器的構造(這裡僅以 Servlet 為例):

入門開發者的視角觀察服務器

服務器接收來自不同用戶的不同的請求(當然是以該服務器作為請求目標的那些請求),分析不同的請求,控制模塊將各自的請求分送至對應的 Servlet (如登陸請求,則將登陸數據送至LoginServlet),然後 Servlet 根據請求內容處理業務邏輯(如登陸請求則解析用戶名密碼,並和數據庫中保存的用戶名密碼進行對比,得出是否是合法用戶的結論),完成響應數據的封裝返回給控制模塊,控制模塊再將該響應返回給對應的請求用戶,這樣即完成一次網絡交互。

三、從小白開始使用Servlet

下面,我們來一步一步開始使用 Servlet 創建一個應用服務器: 在 JavaEE 版的 Eclipse 中創建 Dynamic Web Project (我們這裡以一個全新的 workspace 為例,為什麼用一個新的workspace?後邊會涉及到): \ 工程設置 接下來的步驟都默認,Next 直到下圖: 創建工程最後一步   到此,工程創建成功,我們來簡單了解一下目錄結構: 工程目錄 這裡需要說明一下:在創建工程時我們的 Dynamic web module version 選項默認選擇的3.0,就會出現後面要勾選 Generate web.xml deployment descriptor 才能創建 web.xml 文件的情況,若是3.0之前的版本是沒有這個勾選選項的,而web.xml文件是默認創建的。這是因為Servlet3.0 的新注解機制的結果。   新建 Servlet 類: 新建Servlet 新建Servlet Servlet配置 \ 不知道是什麼就先Add一下,待會看看是什麼。   URL mappings,我更改成 /Home/FirstServlet: 更改URL   NEXT: 創建Servlet最後一步 看一看都重寫了哪些方法,最後 finish,我們第一個Servlet就創建好了。   打開剛創建的 FirstServlet.java 看看——Oh!Shit!你會驚訝的發現“祖國江山一片紅”,各種類未定義、各種包找不見!不要驚訝,這就是剛開始我們以一個全新的 WorkSpace 為例的原因。 發現問題解決問題,我們是天不怕地不怕的程序猿得意! 還記得我在創建 Servlet 時指定名字的下一個選項嗎?就是這個: Servlet父類,可以看到Servlet的父類是 java.servlet.http.HttpServlet,而在這裡找不到,說明還缺東西,不是 .jar 就是環境。——這就是問題所在。   問題根源找到就容易解決了——還記得我們一開始創建 Dynamic Web Project 的時候並沒有指定 Target runtime 嗎?這就是指定運行時環境,就是我們比較外行的說法-環境問題。沒關系,現在我們再來做這件事: 在 Project Explorer 空白區域 > 右鍵 > New > Other > 選擇Server: 選擇創建類型“Server”   NEXT > 選擇Tomcat Server(由於我的 Tomcat 裝的是8.0.32,我在【一步一個腳印】Tomcat+MySQL為自己的APP打造服務器(1)服務器環境搭建中給的也是這個版本,所以這裡選 v8.0,各位要根據自己的 Tomcat 選擇相應的版本): 選擇Tomcat Server版本   NEXT > 設置 Tomcat 安裝路徑(JRE可以workspace默認的JRE,也可以選擇一個特定的JRE,如JRE1.7),之後 finish完成: 設置Tomcat路徑   (也可以Next > 將之前創建的 工程Add到服務器中,再finish,這一步是可選的): 可選步驟 發現之前各種錯誤一片紅還是沒有解決?不要著急,再一步就搞定了—— 剛剛創建的工程"右鍵" > properties > Targeted Runtimes,勾選剛創建好的Server,OK,看看工程,正常了吧?當然,這些創建或選擇 Target Runtime也可以在創建工程的時候就做,只是我這裡單獨拿出來走一遍而已,讓我們都印象深刻一點。好了,這個問題解決了。繼續回到我們的主線。   我們再來看之前留下的那個問題——Initialization parameters、URL mappings 是什麼,字面意思就是初始化參數、URL 映射。結合上下文,我們是在創建 Servlet 的時候編輯的這些內容,所以初始化參數肯定是這個 Servlet 的參數,URL 映射也肯定是這個 Servlet 的路徑映射。 為了比較,我們再創建一個PreferenceServlet ,在創建過程中可以不填的選項都不填,對比一下代碼,會發現不同的地只有有如下:   FirstServlet中有:
@WebServlet(description = "學習Servlet創建的", urlPatterns = { "/Home/FirstServlet" }, initParams = {
		@WebInitParam(name = "userName", value = "abc", description = "用戶姓名") })
PreferenceServlet中為:
@WebServlet("/Home/PreferenceServlet")
可以發現,之前添加的這些選項都是以注解的方式出現的一些說明、初始化參數。為了理解這一點,我找出了Servlet3.0之前版本的 web.xml文件中對Servlet的配置文件內容進行說明:
	
		FirstServlet
		servlet.FirstServlet
		
			userName
			abc
		
	
	
		FirstServlet
		/Home/FirstServlet
	
這兩種寫法的功能是一樣的,只是Servlet3.0之後支持注解的方式進行配置更方便、更高效而已。標簽和標簽相互對應,servlet-name 必須一致(可以有多個mapping對應一個Servlet,即多個地址對應一個目標),當一個請求到達後,服務器先在中尋找匹配的地址,然後用對應的 servlet-name 在標簽中匹配該請求 Servlet 對應的Java類,然後將請求發送至該類;初始化參數可用getInitParameter("parameterName") 來獲取。 用事實說話,在上邊我們創建的 FirstServlet中的 doget 方法中如下:
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.getWriter().append("\n初始化參數userName = " + getInitParameter("userName"));
	}
然後工程上右鍵>Run As: 運行工程 Server選擇之前創建的,Add該工程到服務器配置,finish。出現 \ 狀態 即說明運行成功了! 在浏覽器地址欄輸入http://localhost:8080/ServletTest/Home/FirstServlet 回車,會看到: 運行結果   好了,初步成功了。如果你是個新手,肯定還有很多地方不知道為什麼,比如請求地址為什麼這樣寫?Servlet 的響應怎麼返回的?為什麼顯示的中文成了亂碼?沒關系,萬事都不是一蹴而就的,我們就像標題一樣,一步一個腳印,仔仔細細來。限於篇幅,本以為一篇就能說完,沒想到還是留下了不少的內容,我們下篇繼續。  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved