在scriptlet和EL中使用ServletContext和ServletConfig

Joh*_*ohn 3 jstl jsp-tags el

我试着运行以下几行.

<%=application.getInitParameter("tagline")%>               
<br />
<%=config.getInitParameter("admincontact")%>

${initParam.tagline}
<br />
${pageContext.servletConfig.initParameter("admincontact")}
Run Code Online (Sandbox Code Playgroud)

我的web.xml是

<servlet>
<jsp-file>/index.jsp</jsp-file>
<init-param>
    <param-name>admincontact</param-name>
    <param-value>8939302763</param-value>  
</init-param>
</servlet>
    <context-param>
<param-name>tagline</param-name>
<param-value>Each one Plant one</param-value>
Run Code Online (Sandbox Code Playgroud)

我得到一个异常at ${pageContext.servletConfig.initParameter("admincontact")} 和null值 <%=config.getInitParameter("admincontact")%>.

问候,约翰

Mr *_*ose 6

关于这一点,JavaRanch上有一个FAQ.

它陈述如下;

如何使用EL访问servlet init参数?

不能使用以下语法来访问servlet init参数:

${pageContext.servletConfig.initParameter.name}

您无法使用此技术获取Servlet init参数.getInitParameter(java.lang.String name)不适合这种情况,因为它需要一些参数.

根据JavaBean规范,该属性在表单中具有getter和setter方法

public type1 getXXX() - 没有任何论据.

public void setXXX(type1)

现在将pageContext视为bean对象.PageContext类具有getServletConfig(),getRequest(),getSession()等方法.您可以在EL中访问这些类似pageContext.page,pageContext.request等.

ServletContext对象有几个方法,比如getMajorVersion(),getMinorVersion()没有args.所以我们可以访问这些方法将它作为sevletContext bean的属性处理为pageContext.servletContext.majorVersion和pageContext.servletContext.minorVersion.

如果你想使用EL访问Servlet init参数,那么最好为servlet创建一个init参数的Map,并将它作为一个范围变量放在请求中 - 假设是initParameters.然后,您可以使用$ {requestScope.initParameters.name}按名称获取任何参数.

注意:

我们可以访问上下文init参数 ${initParam.name}