方法一:实现 Servlet 接口
这是最基础的方式,需要实现 Servlet 接口的所有方法。
import javax.servlet.*;
import java.io.IOException;
public class MyServlet implements Servlet {
// 存储Servlet的配置信息
private ServletConfig config;
// 初始化Servlet,在Servlet生命周期中只执行一次
public void init(ServletConfig config) throws ServletException {
this.config = config;
System.out.println("Servlet初始化完成");
}
// 获取Servlet的配置信息
public ServletConfig getServletConfig() {
return config;
}
// 处理客户端请求的核心方法
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// 设置响应内容的类型
res.setContentType("text/html");
// 获取输出流,用于向客户端返回数据
java.io.PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head><title>Hello World</title></head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body></html>");
}
// 返回Servlet的描述信息
public String getServletInfo() {
return "这是一个简单的Servlet示例";
}
// 销毁Servlet,释放资源
public void destroy() {
System.out.println("Servlet被销毁");
}
}
特点:需要开发者自行实现 Servlet 生命周期管理,编码量较大。
方法二:继承 GenericServlet 类
这种方式简化了 Servlet 的实现,只需关注请求处理逻辑。
import javax.servlet.*;
import java.io.IOException;
public class MyServlet extends GenericServlet {
// 处理客户端请求
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
// 设置响应内容类型和字符编码
response.setContentType("text/html;charset=UTF-8");
// 获取输出流
java.io.PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>使用GenericServlet</title></head>");
out.println("<body>");
out.println("<h1>这是使用GenericServlet的示例</h1>");
out.println("</body></html>");
}
}
特点:GenericServlet 类实现了 Servlet 接口的大部分方法,开发者只需重写 service 方法。
方法三:继承 HttpServlet 类(最常用)
针对 HTTP 协议进行了优化,适合开发 Web 应用。
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class MyServlet extends HttpServlet {
// 处理HTTP的GET请求
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置响应内容类型
response.setContentType("text/html");
// 获取输出流
java.io.PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>使用HttpServlet</title></head>");
out.println("<body>");
out.println("<h1>这是使用HttpServlet的示例</h1>");
// 获取请求参数
String name = request.getParameter("name");
if (name != null) {
out.println("<p>你好," + name + "!</p>");
}
out.println("</body></html>");
}
// 处理HTTP的POST请求
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 调用doGet方法处理POST请求,也可以单独实现
doGet(request, response);
}
}
特点:专门为 HTTP 协议设计,提供了 doGet、doPost 等方法处理不同类型的 HTTP 请求。
部署 Servlet
要让 Servlet 正常工作,还需要在 web.xml 文件中进行配置(以 MyHttpServlet 为例):
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>