• Servlet之初始化参数和传递数据(ServletConfig,ServletContext )


    ServletConfig

    容器初始化一个Servlet的时候,会为这个Servlet建一个唯一的Servletconfig的对象(Servlet的配置对象)
    容器会从部署的描述文件(web.xml)中 读出servlet 初始化参数 交给 ServletConfig对象
    再把ServletConfig对象传递给Serlvet的 init() 方法

    • ServletConfig 的配置标签需要写到 Servlet 标签中,标签如下:
    		<init-param>
    			<param-name>number</param-name>
    			<param-value>100</param-value>
    		</init-param>
    
    • 在Servlet中获取ServletConfig 对象:

    HttpServlet 中的 getServletConfig 方法来获取

    注意:ServletConfig 只能在配置的Servlet中使用,其他的Servlet是无法访问里面的配置参数的


    ServletContext

    • ServletContext 的配置标签需要写到 web-app (根标签)中 ,具体如下:
    		<context-param>
    			<param-name>appname</param-name>
    			<param-value>Servlet应用</param-value>
    		</context-param>
    
    • 在Servlet中获取ServletContext对象:

    HttpServlet中的 getServletContext 方法来获取

    注意:ServletContext 配置的内容可以在整个项目中进行访问

    因为ServletContext的数据是应用所有的servlet共享,可以通过该对象存储数据

    		ServletContext.setAttribute("nama","value");
    
    		ServletContext.getAttribute("name");
    
    

    思考:能否通过送给ServletContext设置一个属性,来判断用户是否为登陆状态,从而确定用户能否访问的到登陆才能访问到的页面?

    : 是不可以的。因为ServletContext设置的属性 虽然是整个项目都可以访问得到,但是ServletContext是一直存在的。如果不删除属性,只有当项目卸载重新发布的时候才能删除,这显然是有问题。因此我们不是用它,我们用session来代替,当用户关闭窗口的时候session过一短时间就会自动销毁。


    补充

    利用请求域属性来传递数据 (分派 RequestDispatcher )

    在ServletRequest 接口中定义了:

    void setAttribute(java.lang.String name, java.lang.Object o)   //将对象存储到ServletRequest中
    
    java.lang.Object getAttribute(java.lang.String name)  //检索存储在ServletRequest对象中的对象
    

    那么,如果是一次请求中(分派),从第一个Servlet中传递值给第二个Servlet,需要通过 ServletRequest 对象来传递

  • 相关阅读:
    Notes about "Exploring Expect"
    Reuse Sonar Checkstyle Violation Report for Custom Data Analysis
    Eclipse带参数调试的方法
    MIT Scheme Development on Ubuntu
    Manage Historical Snapshots in Sonarqube
    U盘自动弹出脚本
    hg的常用配置
    Java程序员的推荐阅读书籍
    使用shared memory 计算矩阵乘法 (其实并没有加速多少)
    CUDA 笔记
  • 原文地址:https://www.cnblogs.com/nm666/p/7967183.html
Copyright © 2020-2023  润新知