在 scriptlet 和 EL 中使用 ServletContext 和 ServletConfig

发布于 2024-11-25 05:36:14 字数 837 浏览 0 评论 0原文

我尝试运行以下几行。

<%=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")} 和空值 <%=config.getInitParameter("admincontact")%>

问候, 约翰

I tried to run the following lines.

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

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

And my web.xml is

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

I get a exception at
${pageContext.servletConfig.initParameter("admincontact")}
and null value for
<%=config.getInitParameter("admincontact")%>.

Regards,
John

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

霞映澄塘 2024-12-02 05:36:14

关于此问题,JavaRanch 上有一个常见问题解答

它指出以下内容;

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

不能使用以下语法来访问 servlet 初始化参数:

${pageContext.servletConfig.initParameter.name}

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

根据JavaBean规范,该属性有getter和getter方法。二传手
表单中的方法

public type1 getXXX() -- 无参数。

public void setXXX(type1)

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

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

如果你想使用EL访问Servlet init参数,那么就是
最好为 servlet 创建一个初始化参数的 Map 并
将其作为作用域变量放在请求中 - 比方说
初始化参数。然后您就可以通过名称获取任何参数
与 ${requestScope.initParameters.name}。

注意

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

There is an FAQ on JavaRanch about this.

It states the following;

How to access servlet init parameters using EL?

You cannot use the following syntax to access servlet init parameters:

${pageContext.servletConfig.initParameter.name}

You cannot get Servlet init parameters using this technique. The
getInitParameter(java.lang.String name) does not fit in this case,
because it requires some arguments.

According to the JavaBean spec, the property has getter & setter
methods in the form

public type1 getXXX() -- WITH NO ARGUMENTS.

public void setXXX(type1)

Now consider the pageContext as bean Object. The
PageContext class has methods like getServletConfig(), getRequest(),
getSession() etc. You can access these like pageContext.page,
pageContext.request etc in EL.

ServletContext object has a couple of methods like getMajorVersion(),
getMinorVersion() with no args. so we can access these methods
treating it as properties to sevletContext bean as
pageContext.servletContext.majorVersion and
pageContext.servletContext.minorVersion.

If you want to access Servlet init parameters using EL, then it is
better to create a Map of the init parameters for the servlet and
place it in the request as a scoped variable -- let's say
initParameters. You would then be able to obtain any param by name
with ${requestScope.initParameters.name}.

NOTE:

We can access context init parameters with ${initParam.name}

柳若烟 2024-12-02 05:36:14

除了 Moose 先生的回答之外,我还发现了这个使用 EL 定义自定义标签的解决方案。
它对我来说有效。
这里的链接

基本上你必须创建一个像这样的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>

In addition to Mr Moose's answer, I have found this solution that uses EL defining a custom tag.
It worked in my case.
Here the link

Basically you have to create a Java class like this:

package example.customTags;

import javax.servlet.jsp.JspPage;

public class MyFunctions {

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

Create a tld file like this (my filepath is 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>

And use it in your JSP like this:

<%@ 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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文