Servlet技术是开发动态网页的核心组件,用于处理客户端浏览器向服务端发送的请求。
要成为Servlet,类应该扩展HttpServlet,并根据是以GET或POST方式发送数据来覆盖doGet或doPost。如果希望同一个Servlet既能处理GET,又能处理POST,并且对两种方法都使用同一种操作,只需让doGet调用doPost即可,反之亦然。
程序清单4.1显示了处理GET请求的基本Servlet。
package com.example.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import java.io.IOException;
import java.io.PrintStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="helloWorldServlet",urlPatterns= {"/helloworld"})
public class HelloWorldServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintStream out = new PrintStream(response.getOutputStream());
//输出html标签
out.println("<html>");
out.println("<head>");
out.println("<title>first Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>HelloWorld</h1>");
out.println("</body>");
out.println("</html>");
}
}HelloWorldServlet重写了doGet()方法,doGet()和doPost()方法都需要接受两个参数:HttpServletRequest和HttpServletResponse。
HttpServletRequest提供了一些方法,可以确定诸如表单数据、HTTP请求头和客户端传入的信息。HttpServletResponse允许指定诸如HTTP状态码和响应头的服务端返回信息。它还提供了获取输出流的方法getOutputStream(),该方法返回一个输出流,服务端返回给客户端的信息将写入到该输出流。
注解@WebServlet将一个继承于javax.servlet.http.HttpServlet的类标注为可以处理用户请求的Servlet。注解的“name”属性指定Servlet的名称,注解的“urlPatterns”属性用于定义请求的路径。例如“/helloworld”请求路径为web服务根目录下的helloworld。如图4-1所示。