Servlet初始化和filter过滤器映射的问题

1.web.xml部署有编译servlet吗?会的,在部署的时候会根据servlet-mapping映射里的<servlet-name>找到<servlet-class>进行对servlet类编译
2.编译有实例化对象吗??没有,因为以前我们有在实例化对象的构造函数里面写System.out.println(),都没有打印出来,只有解释运行的时候才有打印出来

3.还有什么叫映射
也就是<filter-mapping>
filter-mapping元素
 filter-mapping元素用来声明Web应用中的过滤器映射。过滤器可被映射到一个servlet或一个URL模式。将过滤器映射到一个  servlet中会造成过滤器作用于servlet上。将过滤器映射到一个URL模式中则可以将过滤器应用于任何资源,只要该资源的URL与URL模式匹配。过滤是按照部署描述符的filter-mapping元素出现的顺序执行的。(也就是说当客户有请求的时候,就会先执行filter-mapping从上到下执行找到对应的url)

4.Servlet加载和实例化对象:

servlet有良好的生存期的定义,包括如何加载、实例化、初始化、处理客户端请求以及如何被移除。这个生存期由 javax.servlet.Servlet接口的init,service和destroy方法表达。那么Servlet是何时被加载和实例化的呢?很 多人认为是在容器启动的时候。这个观点是在一定条件下才成立的。我们来看一个例子:

//TestServlet.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends javax.servlet.http.HttpServlet {
     static final long serialVersionUID = 1L;
   
       public TestServlet() {
     super();
     System.out.println("实例化Servlet.");
}
 
public void destroy() {
     // TODO Auto-generated method stub
     super.destroy();
     System.out.println("销毁Servlet.");
   

     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     // TODO Auto-generated method stub
     System.out.println("正在处理请求.");
 
 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     // TODO Auto-generated method stub
     doGet(request, response);
             
 
public void init() throws ServletException {
     // TODO Auto-generated method stub
     super.init();
     System.out.println("初始化Servlet.");
 
}

<!--web.xml-->
<servlet>
       <display-name>TestServlet</display-name>
       <servlet-name>TestServlet</servlet-name>
       <servlet-class>TestServlet</servlet-class>
       </servlet>
<servlet-mapping>
       <servlet-name>TestServlet</servlet-name>
       <url-pattern>/TestServlet</url-pattern>
</servlet-mapping>


我们启动Tomcat服务器,在控制台中我们并没有看到“实例化Servlet.初始化Servlet.”的打印信息;我们在浏览器中输入此 Servlet的URL来请求此Servlet,控制台中打印出“实例化Servlet.初始化Servlet.正在处理请求.”的信息。这说 明,Servlet的加载和实例化是发生在第一次请求Servlet之前发生的。接下来我们在web.xml文件中的Servlet下面加上“1”这一句 配置,重复上面的过程。发现在启动Tomcat服务器时就看到了“实例化Servlet.初始化Servlet.”的打印信息;请求的时候只打印了“正在 处理请求”信息。这说明,Servlet的加载和实例化是发生在容器启动的时候发生的。当我们把配置改为“-1”,结果和第一种相同。

如此说来,什么时候加载和实例化Servlet是由“1”配置来决定的。同意初始化发生在实例化Servlet之后。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值