from now, 开始我的web开发扫盲系列。搞web,怎么能不懂servlet呢?but,我就是不懂,那就从servlet开始。
什么是servlet?
servlet就是在服务器端运行的一个程序,是一个被编译好的java类;当web服务器开始执行时,servlet类就被初始化;当现实在某个浏览器上的XHTML文档请求某个servlet类对象时,该对象就在服务器上运行。它会处理浏览器上发来的请求,并动态生成XHTML文档作为响应。
其实通俗点讲,它的作用就是:动态生成对浏览器请求的响应。
servlet的实现
任何servlet要么实现Servlet接口,要么就得扩展实现一个Servlet类。
客户在编程时,通常使用的是继承一个HttpServlet类(HttpServlet类是对GenericServlet类的继承,GenericServlet类是一个预定义的Servlet接口的实现)。
HttpServlet提供了多种响应客户请求的方法,最常用的几种方法如下表:
方法 | 用途 |
doGet | 处理HTTP GET请求 |
doPost | 处理HTTP POST请求 |
doPut | 处理HTTP PUT请求 |
doDelete | 处理HTTP DELETE请求 |
我们在继承HttpServlet时,必须覆盖上面方法的至少其中一种。
其中HTTP PUT和HTTP DELETE的作用分别是客户端请求上传文件到服务器或者删除服务器上的文件,而在大多数情况下,服务器时不允许用户操作上面的文件,所以一半情况下,我们只需要覆盖doGet、doPost方法,即处理HTTP GET和HTTP POST请求。
下面我么讲一个例子,怎么去覆盖doGet方法(doPost方法类似)
doGet方法的协议如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException
其中两个参数,HttpServletRequest参数包含了客户端请求,HttServletResponse提供服务器返回给客户段的响应方法。
现在假设我们客户端发送一个HttpGet请求,希望服务器返回一个字符串,我们来看看服务器端的servlet要怎么写
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter returnHTML;
response.setContentType("text/html"); //设置文档的返回类型
returnHTML = response.getWriter();
returnHTML.println("<html><head><title>");
returnHTML.println("A simple GET servlet");
returnHTML.println("</title></head><body>");
returnHTML.println("<h2> This is your servlet answering </h2>");
returnHTML.println("</body></html>");
returnHTML.close();
}
}
这样我们就返回了一句“This is your servlet answering“来响应客户段的get请求。
另外别忘了,现在常用Tomcat servlet容器来运行servlet。至于Tomcat的配置方法,自己google去吧。