import javax.servlet.*;
import java.io.IOException;
/**
* 第一种方式:
* 创建方式:implements Servlet接口
* 缺点:必须实现全部方法
* servlet接口:是契约,所有servlet实例都必须实现该接口
*/
public class SevletDemo implements Servlet {
//第一次请求时,tomcat使用反射(servlet-class)创建servlet对象时调用
public SevletDemo() {
System.out.println("第一次请求,tomcat调用构造方法创建servlet实例.......");
}
//servlet对象创建后调用,eg:加载*.txt、数据源
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("servlet实例被创建后,调用init方法初始化servlet.......");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
//处理请求的方法,每次都被调用
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//设置相应的编码格式:往响应头添加
servletResponse.setContentType("text/html;charset=utf-8;msg=sb;");
servletResponse.getWriter().write("我是用servlet接口创建的servlet");
}
@Override
public String getServletInfo() {
return null;
}
//tomcat关闭时调用,eg:保存并关闭流
@Override
public void destroy() {
System.out.println("tomcat关闭,调用destroy方法,销毁servlet实例.........");
}
}
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
/**
* 第二种方式:
* 方式:extends GenericServlet接口
* 有点:不需要再实现全部方法了
*/
public class GenericServletDemo extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//设置相应的编码格式:往响应头添加
servletResponse.setContentType("text/html;charset=utf-8;msg=sb;");
servletResponse.getWriter().write("我是用GenericServlet抽象类创建的servlet");
}
}
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 第三种方式:
* 方式:extends HttpServlet抽象类
* 好处:①对请求方式进行分门别类 ②强化ServletRequest和ServletResponse
*/
public class HttpServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//业务逻辑
resp.setContentType("text/html;charset=utf-8;");
resp.getWriter().write("这是用HttpServlet抽象类创建的servlet实例");
}
}
1、实现Servlet接口
缺点:必须实现所以方法
2、继承GenericServlet抽象类
优点:不需要实现所以方法
3、继承HttpServlet抽象类
优点:①强化了ServletRequest和ServletResponse ②对请求进行分门别类
最好的方式是继承HttpServlet
1.可以减少对其他方法的要求 init destroy
2.可以根据前端的要求进行分门别类 doGet doPost