• servlet的配置和上下文


    一、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()方法同步。

  • 相关阅读:
    flash加载外部swf文件层次问题
    C语言之算法初步(骑士周游世界)
    cocos2dx 画一个有边框的矩形
    C++程序员学习历程
    再诡异的现象背后可能只是一个傻X的低级错误——谈调试心态
    [原创]TimeQuest约束外设之ddio的潜规则
    [原创]三段式状态机的思维陷阱
    [原创]TimeQuest约束外设之诡异的Create Generated Clocks用法
    [原创]换位思考多周期约束
    毫秒必争之如何搞定cache(下)
  • 原文地址:https://www.cnblogs.com/zhangxiaopeng/p/4864784.html
Copyright © 2020-2023  润新知