在scriptlet和EL中使用ServletContext和ServletConfig

时间:2011-07-19 16:29:59

标签: jstl el jsp-tags

我试图运行以下几行。

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

${initParam.tagline}
<br />
${pageContext.servletConfig.initParameter("admincontact")}

我的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>

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

此致 约翰

2 个答案:

答案 0 :(得分:6)

FAQ on JavaRanch这个。

它陈述如下;

  

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

     

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

     

${pageContext.servletConfig.initParameter.name}

     

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

     

根据JavaBean规范,该属性有getter&amp;二传手   

形式的方法      

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

     

public void setXXX(type1)

     

现在将pageContext视为bean对象。该   PageContext类有像getServletConfig(),getRequest()这样的方法,   getSession()等你可以访问这些像pageContext.page,   EL中的pageContext.request等。

     

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

     

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

     

注意

     

我们可以使用${initParam.name}

访问上下文初始化参数

答案 1 :(得分:0)

除了Moose先生的回答,我发现这个解决方案使用EL定义自定义标签。 它适用于我的情况。 这里是link

基本上你必须创建一个这样的Java类:

package example.customTags;

import javax.servlet.jsp.JspPage;

public class MyFunctions {

        public static String getJspInitParameter(JspPage page, String param){
            return page.getServletConfig().getInitParameter(param);
        }
    }

像这样创建一个tld文件(我的文件路径是WEB-INF/myTags/customTags.tld):

<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>Functions</short-name>
    <function>
        <name>getJspInitParameter</name>
        <function-class>example.customTags.MyFunctions</function-class>
        <function-signature>
            java.lang.String getJspInitParameter(javax.servlet.jsp.JspPage, java.lang.String)
        </function-signature>
    </function>
</taglib>

并在你的JSP中使用它:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="my" uri="../WEB-INF/myTags/customTags.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Example</title>
    </head>
    <body>
        <c:out value="${my:getJspInitParameter(pageContext.page, 'admincontact')}"/>
    </body>
</html>