• (转)ServletConfig与ServletContext


    出处:http://blog.csdn.net/cl05300629/article/details/9362601 作者:伫望碧落

    一、Servlet配置对象(ServletConfig):Servlet初始化时,容器调用其init(ServletConfig)方法,传递该对象。

    1、获得对象方法:

    (1)、直接使用getServletConfig()方法:

    ServletConfig config = getServletConfig();

    (2)、覆盖Servlet的init()方法,把容器创建的ServletConfig对象保存到一个成员变量中:

    public void init(ServletConfig config){

    super.init(config);

    this.config = config;

    }

    2、ServletConfig的4个常用方法:

    (1)、public String getInitParameter(String name):返回指定名称的初始化参数值;

    (2)、public Enumeration getInitParameterNames():返回一个包含所有初始化参数名的Enumeration对象;

    (3)、public String getServletName():返回在DD文件中<servlet-name>元素指定的Servlet名称;

    (4)、public ServletContext getServletContext():返回该Servlet所在的上下文对象;

    3、从ServletConfig对象中使用初始化参数初始化一个Servlet的过程可以实现Servlet的重用性

    二、Servlet上下文对象(ServletContext):每个Web应用程序在被启动时都会创建一个唯一的上下文对象,Servlet可通过其获得Web应用程序的初始化参数或Servlet容器的版本等信息,也可被Servlet用来与其他Servlet共享数据。

    1、获得ServletContext应用:

    (1)、直接调用getServletContext()方法

    ServletContext context = getServletContext();

    (2)、使用ServletConfig应用,再调用它的getServletContext()方法

    ServletContext context = getServletConfig.getServletContext();

    2、获得应用程序的初始化参数:

    (1)、public String getInitParameter(String name):返回指定参数名的字符串参数值,没有则返回null;

    (2)、public Enumeration getInitParameterNames():返回一个包含多有初始化参数名的Enumeration对象;

    3、通过ServletContext对象获得资源

    (1)、public URl getResource(String path):返回由给定路径的资源的URL对象,以“/”开头,为相对路径,相对于Web应用程序的文档根目录;

    (2)、public InputStream getResourceAsStream(String path):从资源上获得一个InputStream对象,等价于getResource(path).oprenStream();

    (3)、public String getRealPath(String path):返回给定的虚拟路径的真实路径;

    4、登陆日志:使用log()方法可以将指定的消息写到服务器的日志文件中

    (1)、public void log(String msg):参数msg为写入日志文件消息

    (2)、public void log(String msg,Throwable throwable):将msg指定的消息和异常的栈跟踪信息写入日志文件

    5、使用RequestDispatcher实现请求转发

    (1)、RequestDispatcher getRequestDiapatcher(String path):必须以"/"开头相对于应用程序根目录,而ServletRequest可以传递一个相对路径

    (2)、RequestDipatcher getNamedDiapatcher(String name):参数name为一个命名的Servlet对象

    6、使用ServletContext对象存储数据

    (1)、public void serAttribute(String name,Object object):将给定名称的属性值对象绑定到上下文对象上;

    (2)、public Object getAttribute(String name):返回绑定到上下文对象的给定名称的属性值;

    (3)、public Enumeration getAttributeNames():返回绑定到上下文对象上的所有属性名的Enumeration对象;

    (4)、public void removeAttribute(String name):删除绑定到上下文对象指定名称的属性;

    ServletRequest共享的对象仅在请求的生存周期中可以被访问;

    HttpSession共享的对象仅在会话的生存周期中可以被访问;

    ServletContext共享的对象在整个Web应用程序启动的生存周期中可以被访问;

    7、检索Servlet容器的信息

    (1)、public String getServletInfo():返回Servlet所运行容器的名称和版本;

    (2)、public int getMajorVersion():返回容器所支持的Servlet API的主版本号;

    (3)、public int  getMinorVersion():返回容器所支持的Servlet API的次版本号;

    (4)、public String getServletContext():返回ServletContext对应的web应用程序名称<display-name>元素定义的名称;

    三、Servlet的多线程问题

    1、当涉及到Servlet需要共享资源是,需保证Servlet是线程安全的

    2、注意事项:

    (1)、用方法的局部变量保持请求中的专有数据;

    (2)、只用Servlet的成员变量来存放那些不会改变的数据;

    (3)、对可能被请求修改的成员变量同步(用Synchronized关键字修饰);

    (4)、如果Servlet访问外部资源,那么需要同步访问这些资源;

    3、实现SingleThreadModel接口的Servlet在被多个客户请求时一个时刻只能有一个线程运行,不推荐使用。

    4、如果必须在servlet使用同步代码,应尽量在最小的范围上(代码块)进行同步,同步代码越少,Servlet执行才能越好,避免对doGet()或doPost()方法同步。

  • 相关阅读:
    sdk 今日头条_字节跳动又一Android开源力作!全新视频动画特效SDK
    Android播放透明视频(转载)
    git remote: warning: suboptimal pack
    'gitclone报错fatal:protocolerror:badpackheader'
    解决 Maven 无法下载 fastdfs-client-java 依赖。
    教我兄弟学Android逆向12 编写xposed模块
    教我兄弟学Android逆向11 动态调试init_array
    CommunicationsException
    使用css给table表格表头添加斜线(斜线表格)
    [SAA + SAP] 28. Monitoring
  • 原文地址:https://www.cnblogs.com/easilyai/p/8094806.html
Copyright © 2020-2023  润新知