zoukankan      html  css  js  c++  java
  • 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在同一时刻只能服务一个用户请求,后至的用户请求必须在队列中等待.
  • 相关阅读:
    【kafka学习之五】kafka运维:kafka操作日志设置和主题删除
    【Redis学习之十一】Java客户端实现redis集群操作
    FastDFS:Java客户都实现文件的上传、下载、修改、删除
    DevOps之四:Git & GitLab
    代码静态检查Eclipse插件:SonarLint插件离线安装
    DevOps之三:CentOS7.3 安装部署Jenkins(三种方式) & Hudson
    DevOps之三:Maven私服Nexus使用 && 清理nexus历史镜像
    DevOps之三:搭建Maven私服Nexus
    DevOps之二:搭建SVN服务器(SvnAdmin)
    财务对账
  • 原文地址:https://www.cnblogs.com/wkhuahuo/p/4275782.html
Copyright © 2011-2022 走看看