阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Servlet概述

217次阅读
没有评论

共计 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() {}
@Override
public void destroy() {}
@Override
public String getInitParameter(String name) {return getServletConfig().getInitParameter(name);
}
@Override
public Enumeration<String> getInitParameterNames() {return getServletConfig().getInitParameterNames();
}
@Override
public ServletConfig getServletConfig() {return config;
}
@Override
public ServletContext getServletContext() {return getServletConfig().getServletContext();
}
@Override
public String getServletInfo() {return "";
}
@Override
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);
}
@Override
public abstract void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
@Override
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 {……}
@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(request, response);
}
……
}

注意:

Servlet 中的方法大多数不由我们来调用,而是由 Tomcat 来调用。并且 Servlet 的对象也不由我们来创建,由 Tomcat 来创建!

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-06发表,共计2600字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中