今天動手實踐了一下寫Servlet的代碼,感覺不錯.現在寫些東西給大家分享一下:
我們是用Servlet的API處理HTTP請求的,現在我給大家看一段代碼,它的作用就是在瀏覽器里面打出一行字,經典的不能再經典(你想說老土我也不反對)就是,Hello,World
package Chap2;
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;
public class HelloWorld extends HttpServlet
{
// eclipse非要讓我加這句話,要么會有一個警告,我看對運行沒有什么影響我就加了,不知道哪位高人知道怎么用這個東西
private static final long serialVersionUID = 1L;
// 這個方法可以處理GET的請求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 設置一個Content-Type首部
response.setContentType("text/html");
// 這個東西就像你拿到了向客戶端瀏覽器寫字的一支筆
PrintWriter out = response.getWriter();
// 現在可以往客戶端的瀏覽器寫HTML代碼了,想怎么寫就怎么寫,呵呵
out.println( "<HTML>" );
out.println( "<HEAD><TITLE>Hello World</TITLE></HEAD>" );
out.println( "<BODY>" );
out.println( "<BIG>Hello World</BIG>" );
out.println( "</BODY></HTML>" );
}
}
把這個東西發布到你的服務器下面,你就可以看到一行字:Hello,World.
至于怎么配置服務器,近期我會給大家一份資料,里面詳細描述了配置JDK+Tomcat+Eclipse+MyEclipse的方法,這些軟件都可以到我的網站上去下載,鏈接在我的簽名里面!
下面我們來點動態的東西,做完了以后,學過JSP的人們會發現,這個...不就是JSP么?
對!JSP就是拿這個東西實現的,就如同Windows API和MFC的關系;相信如果你是個肯鉆研的主,早就不愿意學MFC那個把你規定的死死的東西了吧.
第二個例子:
package Chap2;
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;
public class Exp2 extends HttpServlet
{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String name = request.getParameter( "name" );
out.println( "<HTML>" );
out.println( "<HEAD>" );
out.println( "<TITLE>Hello " + name + ".</TITLE>" );
out.println( "</HEAD>" );
out.println( "<BODY>" );
out.println( "Hello, " + name + "." );
out.println( "</BODY>" );
out.println( "</HTML>" );
}
public String getServletInfo()
{
return "A servlet that knows the name of the person to whom it's saying hello";
}
}
這個Servlet可以接受一個name的參數,當然你可以新建一個頁面來讓用戶來提交這個參數.
我給大家一個
<HTML>
<HEAD>
<TITLE>Introductions</TITLE>
</HEAD>
<BODY>
Exp2
<FORM METHOD=GET ACTION="servlet/Exp2"> If you don't mind me asking, what is your name?
<INPUT TYPE=TEXT NAME="name"></P>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
純粹的HTML代碼,簡單的不能再簡單,根據你服務器配置的不同和Servlet存放的地方的不同,你要看你的FORM標簽上面那個ACTION屬性該怎么填!
Exp2那個Servlet就是接受了一個name的變量,然后叫一下你的名字,問候你下你呵呵.
但是有時候用戶會發出一個HEAD請求(客戶端只想看到響應的首部時發出的請求),這個東西可能會讓你很煩,你心里會說這些人就會給我搗亂,發什么HEAD請求啊!確實這個東西看上去微不足道,也沒有doHead()的方法可以使用.任何有子類HttpServlet和實現了doGet方法的servlet都支持HEAD請求.
現在我們看一下處理HEAD請求的工作過程:
HttpServlet的service()方法確定HEAD請求并把它特殊對待。它構建一個修改過的HttpServletResponse對象,并把它和原來的請求一起發給doGet方法(你知道了,我們要在doGet那個東西里面做文章!)。很高興地告訴你,如果是一個HEAD請求,系統可以為我們自動屏蔽后面的輸出,但是如果讓我們來做一個判斷,你可以提高你的程序性能,也能加深我們對這個Servlet的了解。
我們要在Exp2的doGet()方法中加一句話:
if( request.getMethod().equals( "HEAD" ) ) return;
通過request這個對象我們可以看到客戶端的請求類型,如果這個字符串時HEAD,哈哈,干掉他!
但是,即使我們只是處理一個HEAD請求,我們也要設置Content-Type首部。
posted on 2005-12-30 13:32
Fusion KISS 閱讀(418)
評論(0) 編輯 收藏