Servlet入门1——第一個Servlet程式

從Java程式設計人員的角度來看,Servlet其實就是一個Java類別,它實作 javax.servlet.Servlet介面,通常會繼承實作該介面的javax.servlet.GenericServlet類別或javax.servlet.http.HttpServlet類別,前者用於與協定無關的Servlet,後者專門適於處理HTTP請求與回應的Servlet。

繼承GenericServlet類別的Servlet通常會改寫service()方法,而繼承HttpServlet類別的 service()會處理request並傳送給doXXX()方法,例如doGet()或doPost()方法,通常很少會去改寫service(),而是改寫doGet()doPost()方法,下面就仍以一個簡單的Hello!Servlet!來示範如何撰寫與設定Servlet,讓其可以傳回一個 HTML網頁顯示Hello!Servlet!文字:

  • HelloServlet.java
package onlyfun.caterpillar;

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

public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();

out.println("<html>");
out.println("<head>");
out.println("<title>Hello!Servlet!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1><b>Hello!Servlet!</b></h1>");
out.println("</body>");
out.println("</html>");
}
}

為了要能編譯上面這個類別,您需要將servlet-api.jar加至CLASSPATH中,在Tomcat的話servlet-api.jar是放在 common/lib目錄下。

doGet()處理客戶端請求的GET方法,只要是客戶端請求資源時是使用GET方法,就會呼叫它來處理,它獲得兩個參數,分別表示用戶端的請求與回應,您可以回憶一下JSP的隱含物件request與response,其對應的就是HttpServletRequest與 HttpServletResponse物件,您由HttpServletResponse物件取得寫出至用戶端的PrintWriter物件,並寫出一個HTML網頁至用戶端,PrintWriter物件可以使用println()方法將資料寫出。

假設您的Web應用程式位於webapps/myServlet/下,則編譯完成的Servlet類別必須放置在WEB-INF/classes/之下,為了要讓容器能知道這個Servlet的存在並實例化,您必須在WEB-INF/web.xml中告知:

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

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<description>
My Servlet Examples.
</description>
<display-name>Servlet Examples</display-name>

<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>
onlyfun.caterpillar.HelloServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>

</web-app>

在容器實例化並初始化Servlet並給予相關環境物件之前,Servlet只不過是個普通的Java類別,並不具備有Servlet的該有的功能,容器會為每一個註冊的<servlet-name>實例化一個<servlet-class>指定的類別,而<url- pattern>用於指定與<servlet-name>對應的Servlet實例,經由這麽指定,在啟動 Tomcat之後,您可以透過這樣的網址來執行Servlet:
http://localhost:8080/myServlet/helloServlet

當然,如果您想要的話,也可以在<url-pattern>中偽裝Servlet,例如偽裝為PHP網頁,就設定為 /helloworld.php。

下面是Servlet的傳回結果:
<html>
<head>
<title>Hello!Servlet!</title>
</head>
<body>
<h1><b>Hello!Servlet!</b></h1>
</body>
</html>
 

事實上,上面的程式只是為了示範而已,在MVC架構中,Servlet中是不會出現out.println()這樣的陳述句的,在Servlet中撰寫 HTML或視圖相關的邏輯基本上是不被鼓勵的,Servlet在
Model 2 架構中主要是擔任控制者(Controller)的角色。

PS. 廣義的來說,容器藉由使用者的請求網址決定該由哪一個Servlet來處理請求,本身也是控制器的角色,但實際上很少將容器用於控制器角色上,而是設計一個Servlet來處理請求轉發,將控制器的角色由該Servlet擔任。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值