首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在scriptlets和EL中使用ServletContext和ServletConfig

在scriptlets和EL中使用ServletContext和ServletConfig
EN

Stack Overflow用户
提问于 2011-07-20 00:29:59
回答 2查看 5.7K关注 0票数 3

我尝试运行以下代码行。

代码语言:javascript
复制
<%=application.getInitParameter("tagline")%>               
<br />
<%=config.getInitParameter("admincontact")%>

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

我的web.xml是

代码语言:javascript
复制
<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")}得到了一个异常,<%=config.getInitParameter("admincontact")%>得到了一个空值。

向您致敬,约翰

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-20 11:35:54

有一个关于这方面的FAQ on JavaRanch

它陈述了以下内容;

如何使用EL?访问servlet初始化参数

您无法使用以下语法访问servlet初始化参数:

${pageContext.servletConfig.initParameter.name}

您不能使用此技术获取Servlet初始化参数。getInitParameter(java.lang.String名称)不适合这种情况,因为它需要一些参数。

根据JavaBean规范,该属性具有如下形式的getter和setter方法

public type1 getXXX() --不带参数。

public void setXXX(type1)

现在考虑将pageContext作为bean对象。PageContext类有getServletConfig()、getRequest()、getSession()等方法,你可以在EL中访问pageContext.page、pageContext.request等。

ServletContext对象有几个不带参数的方法,比如getMajorVersion(),getMinorVersion()。因此,我们可以访问这些方法,将其作为sevletContext bean、pageContext.servletContext.majorVersion和pageContext.servletContext.minorVersion的属性。

如果您希望使用EL访问Servlet初始化参数,那么最好为servlet创建一个初始化参数映射,并将其作为限定了作用域的变量放在请求中--比方说initParameters。然后,您将能够使用${requestScope.initParameters.name}按名称获取任何参数。

备注

我们可以使用${initParam.name}访问上下文初始化参数

票数 6
EN

Stack Overflow用户

发布于 2016-02-16 23:17:22

除了Moose先生的回答之外,我还发现了这个使用EL定义自定义标记的解决方案。它在我的案例中起作用了。这里是link

基本上,您必须像这样创建一个Java类:

代码语言:javascript
复制
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):

代码语言:javascript
复制
<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中使用它,如下所示:

代码语言:javascript
复制
<%@ 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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6750645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档