



我們現在來創建一個簡單的Servlet:FirstServlet類,功能只是輸出“Hello!大家好!”。代碼如例3.1。
/*
* FirstServlet.java
*
* 功能:通過Servlet輸出頁面
*/
package com.jy.sample.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* HelloWorld Servlet.
* @author JY
*/
public class FirstServlet extends HttpServlet {
/** serialVersionUID. */
private static final long serialVersionUID = 2372510451801586160L;
/**
* 處理Get請求.
* @param req Request
* @param resp Response
* @throws ServletException Servlet異常
* @throws IOException IO異常
*/
@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException {
// 設定內容類型為HTML網頁UTF-8編碼
resp.setContentType("text/html;charset=UTF-8");
// 輸出頁面
PrintWriter out = resp.getWriter();
out.println("<html><head>");
out.println("<title>First Servlet Hello</title>");
out.println("</head><body>");
out.println("Hello!大家好!");
out.println("</body></html>");
out.close();
}
}
|
例3.1
下面我們來看看這段代碼,一開始我們必須導入javax.servlet.*和javax.servlet.http.*。其中,javax.servlet.* 存放與HTTP協議無關的一般性Servlet類;javax.servlet.http.* 增加了與HTTP協議有關的功能。
所有Servlet都必須實現javax.servlet.Servlet接口,但是通常我們都會從javax.servlet.GenericServlet或javax.servlet.http.HttpServlet擇一來實現。如果寫的Servlet代碼和HTTP協議無關,那么必須繼承GenericServlet類;若有關,就必須繼承HttpServlet類。我們的例子中繼承的是HttpServlet類。
javax.servlet.* 里面的ServletRequest和ServletResponse接口提供存取一般的請求和響應;而javax.servlet.http.* 里面的HttpServletRequest和HttpServletResponse接口,則提供HTTP請求及響應的存取服務。通過代碼了解到,我們代碼中用到的是HttpServletRequest和HttpServletResponse。
我們的代碼中,利用HttpServletResponse接口的setContentType()方法來設定內容類型,我們要顯示為HTML網頁類型,因此,內容類型設為“text/html”,這是HTML網頁的標準MIME類型值。之后,用getWriter()方法返回PrintWriter類型的out對象,它與PrintStream類似,但是它能夠對Java的Unicode字符進行編碼轉換。最后,利用out對象把“Hello!大家好!”的字符串顯示在網頁上。
代碼寫好后,我們來設定web.xml文件,web.xml文件在我們Web項目的WEB-INF文件夾內。如圖3.4。
圖3.4
我們來詳細看一看web.xml中這段關于Servlet的配置。配置一個Servlet需要配置兩個標簽,第一個<servlet>,一個是<servlet-mapping>。
對于<servlet>,在其中可以配置Servlet的名字,所要調用的Java類,還有Servlet初始化時傳入的參數。在這里,我們的Servlet名字是“FirstServlet”,調用的java類是“com.jy.sample.servlet.FirstServlet”,就是我們寫的Servlet的package加上類名。我們寫了一個最簡單的Servlet,我們不需要傳遞初始化參數給Servlet,所以沒有配置初始化參數,關于配置初始化參數,我們會在后邊的例子里講解。
對于<servlet-mapping>,我們首先指定了Servlet的名字,然后設置url連接,在這里,我們設置的是“/FirstServlet”。這里的Servlet名字必須和上面的<servlet>標簽中的<servlet-name>的值一致。
當我們的頁面中設定的連接和<url-pattern>中設定的值一致時,則會通過<servlet-name>找到對應Servlet類來運行。這里,當頁面的連接(a標簽或form設定的action)是“/FirstServlet”時,則會通過Servlet的名字“FirstServlet”來找到對應的Servlet類“com.jy.sample.servlet.FirstServlet”來運行。
最后,我們看看FirstServlet的執行結果,如圖3.5所示。

圖3.5