Servlet(1) Servlet容器和Servlet

1. Servlet容器和Servlet的关系

Servlet是一个Java程序,一个Servlet应用有一个或多个Servlet程序。JSP页面会被转换和编译成Servlet程序。Servlet应用无法独立运行,必须运行在Servlet容器中。Servlet容器将用户的请求传递给Servlet应用,并将结果返回给用户。

2. Servlet API

Servlet的核心是Servlet接口,它是所有Servlet类必须直接或间接实现的一个接口。直接实现是指编写接口Servlet的实现类,间接实现是指继承接口Servlet的实现类。Servlet接口定义了Servlet和Servlet容器之间的契约。这个契约归结起来就是,Servlet容器将Servlet类载入内存,并在Servlet实例上调用具体方法。

用户请求会致使Servlet容器调用Servlet的service方法,并传入一个ServletRequest实例和一个ServletResponse实例。ServletRequest中封装了当前的HTTP请求,ServletResponse封装了对当前用户的HTTP响应。对于每一个应用程序,Servlet容器还会创建一个ServletContext实例,它封装了上下文(应用程序)的环境详情。此外,每一个Servlet实例都有一个封装Servlet配置的ServletConfig

Servlet接口中定义了以下5个方法

void init(ServletConfig config) throws ServletException; 
void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
void destroy();    
String getServletInfo();    
ServletConfig getServletConfig();     

init、service和destory时Servlet的生命周期方法

  • init,当且仅当该Servlet第一次被请求时,Servlet容器会调用这个方法,我们可以用这个方法完成一些初始化工作。
  • service,每当请求该Servlet时,Servlet容器就会调用这个方法。此方法接受用户的请求对象,执行业务操作,利用响应对象响应用户请求。
  • destroy,当容器监测到一个Servlet从服务中被移除时,容器调用该方法,释放资源。

getServletInfo和getServletConfig是非生命周期方法

  • getServletInfo,该方法会返回Servlet的描述信息,我们可以用它返回有用或为null的任意字符串
  • getServletConfig,这个方法会返回由Servlet容器传给init方法的ServletConfig对象。我们将传给init方法的ServletConfig对象赋值给一个类级别的变量(static变量),并在getServletConfig方法中返回出去

3. Servlet的线程安全

Servlet实例会被一个应用程序中的所有用户共享,因此不建议使用类级变量,除非他们是只读的,或者是java.util.concurrent.atomic包的成员。

参考资料

书籍《Servlet、JSP和Spring MVC初学指南》

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值