1.什么是servlet
servlet本身就是一种java类,这种java类可以提供web形式的访问(Java EE 规范)
2.怎么按照JavaEE的规范编写一个servlet
关键字 作用 说明
Servlet 接口 有五个抽象方法
GenericServlet 抽象类 有一个抽象方法
HttpServlet 抽象类 没有抽象方法
HttpServlet-继承->GenericServlet-实现->Servlet接口
所以编写一个servlet,有三种方式
第一种方式:
写一个类去实现接口servlet
最重要的是实现接口中的service方法
这个方法就是我们在访问servlet的时候被tomcat服务器调用的
第二种方式:
写一个类去继承父类GenericServlet
抽象类GenericServlet里面有一个抽象方法service,这个方法是servlet接口中的方法,所以GenericServlet只实现了Servlet接口中的四个抽象方法,还剩下这个service没有实现。同时,GenericServlet类中不但实现了Servlet接口中的init方法,而且还重载了一个无参的init()方法
源代码中两个init方法的实现:
//tomcat服务器默认调用的是这个init方法
@Override
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
//用户需要重写的是这个init()方法
public void init() throws ServletException{
// NOOP by default
}
第三种方式:
写一个类去继承父类HttpServlet
HttpServlet是一个抽象类,但是没有任何抽象方法
HttpServlet类中自定义了很多doXxxx方法,每一种方法都对应了浏览器发送请求的方法,一般常用的浏览器发请求方式为get和post,这两种方式分别对应了这个类中的doGet方法和doPost方法。
HttpServlet类中,有两个service方法
//这个service方法Servlet接口中的
void service(ServletRequest req, ServletResponse res){...}
//这个service是HttpServlet中重载的方法
void service(HttpServletRequest req, HttpServletResponse resp){...}
源代码中俩个service方法的实现:
//实现Servlet接口中的service方法
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest) req;
response = (HttpServletResponse) res;
} catch (ClassCastException e) {
throw new ServletException("non-HTTP request or response");
}
//调用重载之后的service方法
service(request, respon