开发Servlet的三种方法
1. 实现Servlet接口
2. 继承GenericServlet类
3. 继承HttpServlet类
新建web project: servlet_IServlet
----------------------------------
1. 实现Servlet接口
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>demo01</servlet-name>
<servlet-class>com.itcast.servlet.Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo01</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
Hello.java:
package com.itcast.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Hello implements Servlet {
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("init()");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
System.out.println("service()");
PrintWriter out = response.getWriter();
out.print("Hello World .");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("destroy()");
}
}
部署到Tomcat测试:
后台打印:
不断刷新页面:
从tomcat主页面reload项目:
后台打印:
总结:
1. init方法用于初始化数据, 只执行一次
2. service方法用于处理业务逻辑, 每一次刷新(请求)都执行一次
3. destroy方法在reload项目, 或者关闭tomcat服务器, 或者关机时候执行, 用于释放内存
-----------------------------------------
2. 继承GenericServlet类
web.xml:
<servlet-class>com.itcast.servlet.HelloGenericServlet</servlet-class>
<url-pattern>/genericServlet</url-pattern>
HelloGenericServlet.java:
public class HelloGenericServlet extends GenericServlet {
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
System.out.println("service genericServlet");
PrintWriter out = response.getWriter();
out.print("Hello GenericServlet");
}
}
测试:
后台打印:
总结: 只有一个方法--service(), 此方法没刷新页面一次就执行一次
----------------------------------------
3. 继承HttpServlet类
web.xml:
<servlet-class>com.itcast.servlet.HelloHttpServlet</servlet-class>
<url-pattern>/httpServlet</url-pattern>
HelloHttpServlet.java:
@SuppressWarnings("serial")
public class HelloHttpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("Hello HttpServlet");
PrintWriter out = resp.getWriter();
out.print("Hello HttpServlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
}
}
测试:
后台打印:
总结:
1. 有两个方法doGet()和doPost()
2. 每刷新一次页面就执行一次
3. 这种继承HttpServlet类开发Servlet的方法用得最多