共计 2600 个字符,预计需要花费 7 分钟才能阅读完成。
一、什么是 Servlet
Servlet 是 JavaWeb 的 三大组件之一,它属于动态资源。Servlet 的作用是处理请求,服务器会把接收到的请求交给 Servlet 来处理,在 Servlet 中通常需要:
- 接收请求数据;
- 处理请求;
- 完成响应。
例如客户端发出登录请求,或者输出注册请求,这些请求都应该由 Servlet 来完成处理!Servlet 需要我们自己来编写,每个 Servlet 必须实现 javax.servlet.Servlet 接口。
二、实现 Servlet 的方式
实现 Servlet 有三种方式:
1、实现 javax.servlet.Servlet 接口;
2、继承 javax.servlet.GenericServlet 类;
3、继承 javax.servlet.http.HttpServlet 类;
通常我们会去继承 HttpServlet 类来完成我们的 Servlet,但学习 Servlet 还要从 javax.servlet.Servlet 接口开始学习。
了解 Servlet 接口
Servlet.java
public interface Servlet {public void init(ServletConfig config) throws ServletException; | |
public ServletConfig getServletConfig(); | |
public void service(ServletRequest req, ServletResponse res) | |
throws ServletException, IOException; | |
public String getServletInfo(); | |
public void destroy(); | |
} |
了解 GenericServlet 类
GenericServlet 是 Servlet 接口的实现类,我们可以通过继承 GenericServlet 来编写自己的 Servlet。
GenericServlet.java
public abstract class GenericServlet implements Servlet, ServletConfig, | |
java.io.Serializable {private static final long serialVersionUID = 1L; | |
private transient ServletConfig config; | |
public GenericServlet() {} | |
public void destroy() {} | |
public String getInitParameter(String name) {return getServletConfig().getInitParameter(name); | |
} | |
public Enumeration<String> getInitParameterNames() {return getServletConfig().getInitParameterNames(); | |
} | |
public ServletConfig getServletConfig() {return config; | |
} | |
public ServletContext getServletContext() {return getServletConfig().getServletContext(); | |
} | |
public String getServletInfo() {return ""; | |
} | |
public void init (ServletConfig config) throws ServletException {this.config = config; | |
this.init();} | |
public void init () throws ServletException {} | |
public void log(String msg) {getServletContext().log(getServletName() + ":" + msg); | |
} | |
public void log(String message, Throwable t) {getServletContext().log(getServletName() + ":" + message, t); | |
} | |
public abstract void service(ServletRequest req, ServletResponse res) | |
throws ServletException, IOException; | |
public String getServletName() {return config.getServletName();} | |
} | |
了解 HttpServlet 类
HttpServlet 类是 GenericServlet 的子类,它提供了对 HTTP 请求的特殊支持,所以通常我们都会通过继承 HttpServlet 来完成自定义的 Servlet。
HttpServlet.java
public abstract class HttpServlet extends GenericServlet {protected void service(HttpServletRequest req, HttpServletResponse resp) | |
throws ServletException, IOException {……} | |
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(request, response); | |
} | |
…… | |
} | |
注意:
Servlet 中的方法大多数不由我们来调用,而是由 Tomcat 来调用。并且 Servlet 的对象也不由我们来创建,由 Tomcat 来创建!
