servlet包的名称

常用的servlet包的名称是?
A. java.servlet
B. javax.servlet
C. servlet.http
D. javax.servlet.http

正确答案:B D

JavaSE API里没有关于Servlet的包,JavaEE API里关于Servlet的全部包如图所示:
在这里插入图片描述
javax是Sun公司提供的一个扩展包,算是对原 JAVA 包的一些优化处理,现在已经有很多都是基于JAVAX的程序开发而不是java包.,就像 netbeans 里的图形处理都是使用jabax包

javax.servlet 包

使用 Java 技术开发 WEB 应用程序 , 深入了解 Servlet 的机制对应用的开发将有重要的推动作用 . 而想深入了解 Servlet 的机制就不得不了解 javax.servlet 包 .

javax.servlet 包中包含了 7 个接口 ,3 个类和 2 个异常类 , 它们分别是 :

接口

RequestDispatcher,Servlet,ServletConfig,ServletContext,ServletRequest,ServletResponse 和 SingleThreadModel

GenericServlet,ServletInputStream 和 ServletOutputStream

异常类

ServletException 和 UnavailableException

Servlet 的生命周期

在 Servlet 的接口中定义了一个 Servlet 的生命周期方法 , 分别是 Init,Service 和 Destroy

演示了 Servlet 生命周期方法的简单 Servlet:

import javax.servlet.*;
import java.io.IOException;

public class PrimitiveServlet implements Servlet {

  public void init(ServletConfig config) throws ServletException {
    System.out.println("init");
  } 

  public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException {
    System.out.println("service");
  }  

  public void destroy() {
    System.out.println("destroy");
  } 

  public String getServletInfo() {
    return null;
  }

  public ServletConfig getServletConfig() {
    return null;
  } 

}

在 Servlet 中如何获取 ServletConfig 对象 ?

在Servlet 的Init 方法中 ,Servlet Container 将会传入一个 ServletConfig对象 , 开发人员可以通过这个对象获取在 web.xml 文件中定义的 Servlet 初始化参数 .

下面是一个获取 Servlet 初始参数的示例 :

import javax.servlet.*;
import java.util.Enumeration;
import java.io.IOException; 

public class ConfigDemoServlet implements Servlet {

  public void init(ServletConfig config) throws ServletException {
    Enumeration parameters = config.getInitParameterNames();
    
    while (parameters.hasMoreElements()) {
      String parameter = (String) parameters.nextElement();
       
      System.out.println("Parameter name : " + parameter);
      System.out.println("Parameter value : " +config.getInitParameter(parameter));
    }
  }

  public void destroy() {
  }

  public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException {
  }
 
  public String getServletInfo() {
    return null;
  }

  public ServletConfig getServletConfig() {
    return null;
  }
}

如何获取 ServletContext 对象 ?

可以通过 ServletConfig 对象的 getServletContext 方法获取 ServletContext 对象

import javax.servlet.*;
import java.util.Enumeration;
import java.io.IOException; 

public class ContextDemoServlet implements Servlet {
  ServletConfig servletConfig; 
  
  public void init(ServletConfig config) throws ServletException {
    servletConfig = config;
  }
  
  public void destroy() {
  } 

  public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException { 
    ServletContext servletContext = servletConfig.getServletContext();
    Enumeration attributes = servletContext.getAttributeNames();
    
    while (attributes.hasMoreElements()) {
      String attribute = (String) attributes.nextElement();
      System.out.println("Attribute name : " + attribute);
      System.out.println("Attribute value : "+servletContext.getAttribute(attribute));
    }
    System.out.println("Major version : " +servletContext.getMajorVersion());
    System.out.println("Minor version : " +servletContext.getMinorVersion());
    System.out.println("Server info : " + servletContext.getServerInfo());
  }

  public String getServletInfo() {
    return null;
  }

  public ServletConfig getServletConfig() {
    return null;
  } 
}

如何在 Servlet 之间共享信息 ?

我们可以通过 ServletContext 来维护在不同 Servlet 之间共享的信息 .

如何解决 Servlet 的多 Thread 问题 ?

如果 Servlet 需要读写外部资源 , 我们需要考虑 Thread 的问题 , 我们可以使用声明性接口 SingleThreadModel 来避免多 Thread 之间的资源冲突问题 . 但是需要注意的是 , 如果 Servlet 仅仅只是读外部资源的话 , 我们通常不应该实现这个接口 . 如果实现这个接口 ,Servlet 在同一时刻只能服务一个用户请求 , 后至的用户请求必须在队列中等待

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值