[RESTful] Java Servlet API Server ~2 (helloworld)
在上一篇文章中, 我們建立了 Servlet 的編譯環境,
接著, 我們就從最簡單的 helloworld 開始, 介紹如何撰寫第一支 Servlet 程式.
以下是編譯環境中的路徑:
- 網頁根目錄: /var/lib/tomcat8/webapps/ROOT/
- tomcat8 library 目錄: /usr/share/tomcat8/lib/
- tomcat8 log 目錄: /var/lib/tomcat8/logs/
首先, 我們要先定義 Servlet API 的入口,
此文件位於: /var/lib/tomcat8/webapps/ROOT/WEB-INF/web.xml
我們將內容填入如下:
<web-app> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping></web-app>
在文件中, 定義了 API 的路徑 (servlet-mapping) 以及對應的 Servlet 程式 (servlet),
透過這兩個設定, 我們就建立了 Servlet 與 API Server 之間的呼叫關係,
接著, 我們進行 helloworld 的 Servlet 程式撰寫, 以下為範例:
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
static final long serialVersionUID = 42L;
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter Printer = response.getWriter();
Printer.println("<html>");
Printer.println("<head>");
Printer.println("\t<title>Java Servlet Example</title>");
Printer.println("</head>");
Printer.println("<body>");
Printer.println("<b>Hello World!</b>");
Printer.println("</body>");
Printer.println("</html>");
return;
}
}
在範例程式中, 必須先宣告使用 Servlet 的架構 (javax.servlet.*),
並複寫在 Servlet 中 doGet 的方法, 此方法就會對應到 RESTful 的 GET 方法,
此份範例程式會產生一份相對應的 HTTP 文件作為 GET 的回應 (response),
其中, 包含了表頭 (head) 以及網頁內容 (body),
完成以上程式撰寫之後, 我們需要對此 Java 程式進行編譯,
假設已在: /var/lib/tomcat8/webapps/ROOT//WEB-INF 路徑下執行程式開發,
並已先用 mkdir 指令於此路徑下建立 classes 資料夾,
以下為編譯的指令:
sudo javac -classpath %JAVA_HOME%/lib/j2ee.jar:/usr/share/tomcat8/lib/servlet-api.jar HelloWorld.javacp ./*.class ./classessystemctl restart tomcat8
第一行為程式的編譯, 記得要引入j2ee.jar和servlet-api.jar兩個library,
第二行將編譯好的 class 檔, 放入 Servlet 用以連結的 classes 資料夾中,
第三行則是重新啟動 tomcat8, 這邊必須重新啟動的原因是:
Servlet 只有在第一次呼叫的時候會生成一個 JVM, 之後有新的呼叫會複用此 JVM,
為了確保新編譯的 class 可以被正確呼叫, 我們重啟 tomcat8,
確保下一次呼叫的目標是新編譯好的程式.
下圖 (右圖) 是該 helloworld Servlet 被成功呼叫產生的 HTTP 回應:
左圖則是目前開發環境的資料結構,
到目前為止, 我們可以建立一個單純的 Servlet API, 並回應一個 HTTP 網頁,
之後的文章, 我們將在 Servlet 架構下進行資料庫查詢, 並以 JSON 格式回報查詢結果.
參考資料:
留言
張貼留言