[COLOR=blue]第二章(第1节) 一步一步学Servlets[COLOR=blue]
http://jspzone.myrice.com/beginner/tech.htm 这章作为Servlet教程,通过写一些有代表性的Servlets,从简单到复杂的例子,来学习Servlet开发的关键技术。这章中的所有例子都已经成功编译和运行过的,完全是Servlet的程序。
2.1 Hello World!
这节将教你:
用框架去建一个简单的Servlet
写一个Servlet提供静态的内容
我们用众所周知的"Hello World"例子来,开始我们的Servlet编程:
CODE
HelloClientServlet.java
1: import java.io.*;
2: import javax.servlet.*;
3: import javax.servlet.http.*;
4:
5: public class HelloClientServlet extends HttpServlet
6: {
7: protected void doGet(HttpServletRequest req,
8: HttpServletResponse res)
9: throws ServletException, IOException
10: {
11: res.setContentType("text/html");
12: PrintWriter out = res.getWriter();
13: out.println("<HTML><HEAD><TITLE>Hello Client!</TITLE>"+
14: "</HEAD><BODY>Hello Client!</BODY></HTML>");
15: out.close();
16: }
17:
18: public String getServletInfo()
19: {
20: return "HelloClientServlet 1.0 by Stefan Zeiger";
21: }
22: }
编译这个Servlet在浏览器中打入它的URL就可以看到输出了。
下面我们来看看Servlet是如何工作的。
1到3行中引入了一些含有Servlet使用类的包(几乎所有的Servlet都要使用这些包中的类)
CODE
1: import java.io.*;
2: import javax.servlet.*;
3: import javax.servlet.http.*;
这个Servlet是在第5行被声明的,它是扩展javax.servlet.http.HttpServlet,它的标准基类是HTTP Servlets。
CODE
5: public class HelloClientServlet extends HttpServlet
7到16行是HttpServlet的doGet方法
7: protected void doGet(HttpServletRequest req,
8: HttpServletResponse res)
9: throws ServletException, IOException
10: {
...
16: }
在11行我们用HttpServletResponse对象的方法去设置我们要发送的响应对象的适当类型。在用PrintWriter或ServletOutputStream前要先定义response header。
CODE
11: res.setContentType("text/html");
在第12行我们请求一个PrintWriter对象去写文本到响应信息。
CODE
12: PrintWriter out = res.getWriter();
ServletResponse.getWrite()是JSDK 2.0版本的一个新特征,如果你的Servlet引擎不支持JSDK 2.0,你可以用“ServletOutputStream out=res.getOutputStream();”代替这一行。在该教程中的大部分例子都用到了这个新的特征。使用ServletResponse.getWriter()的好处在4.4节讨论。
在13、14行,我们使用PrintWriter去输出text/html类型的文本。
CODE
13: out.println("<HTML><HEAD><TITLE>Hello Client!</TITLE>"+
14: "</HEAD><BODY>Hello Client!</BODY></HTML>");
当我们输出完成后,在15行,把PrintWriter关闭。
CODE
15: out.close();
这行是为了完整性,并不是严格要求的,当service调用返回时,Web服务器自动关闭PintWriter或ServletOutputStream。对客户端的响应完全被输出以后,你想做一些Post处理,那么明确调用close()是很有用的。调用close()告诉Web服务器响应已经完成,对客户端的连接可以关闭了。
18到20行getServletInfo()方法的目的是返回Servlet的相关信息,例如Servlet的名字、版本、作者、版权。这不是HelloClientServlet的功能所必须的,但是可以给Servlet用户提供有价值的信息。
CODE
18: public String getServletInfo()
19: {
20: return "HelloClientServlet 1.0 by Stefan Zeiger";
21: }