• javax.servlet包介绍


     

    来源:http://blog.163.com/jianhuren2005@126/blog/static/17158171200782333849784/

     

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

    以Servlet2.3规范,我们介绍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在同一时刻只能服务一个用户请求,后至的用户请求必须在队列中等待.
  • 相关阅读:
    使用MyBatis生成插件
    关联源码及日志
    下载依赖
    框架简介及基本使用
    注解的本质 及 反射读取属性值
    元注解
    广告系统学习笔记(一)
    Nginx学习笔记(三)
    Nginx学习笔记(二)
    Nginx学习笔记(一)
  • 原文地址:https://www.cnblogs.com/wkhuahuo/p/4275782.html
Copyright © 2020-2023  润新知