использование ServletContext и ServletConfig в скриптлетах и ​​EL - PullRequest
3 голосов
/ 19 июля 2011

Я попытался запустить следующие строки.

<%=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")%>.

С уважением, John

Ответы [ 2 ]

6 голосов
/ 20 июля 2011

Существует FAQ по JavaRanch по этому поводу.

В нем говорится следующее:

Как получить доступ к параметрам инициализации сервлета с помощью EL?

Вы не можете использовать следующий синтаксис для доступа к параметрам инициализации сервлета:

${pageContext.servletConfig.initParameter.name}

Вы не можете получить параметры инициации сервлета, используя эту технику. getInitParameter (имя java.lang.String) не подходит в этом случае, потому что это требует некоторых аргументов.

Согласно спецификации JavaBean, свойство имеет getter & setter методы в виде

public type1 getXXX() - БЕЗ АРГУМЕНТОВ.

public void setXXX(type1)

Теперь рассмотрим pageContext как объект bean. Класс PageContext имеет такие методы, как getServletConfig (), getRequest (), getSession () и т. д. Вы можете получить доступ к ним, как pageContext.page, pageContext.request и т. д. в EL.

Объект ServletContext имеет несколько методов, таких как getMajorVersion (), getMinorVersion () без аргументов. так что мы можем получить доступ к этим методам обрабатывая его как свойства для bean-компонента sevletContext как pageContext.servletContext.majorVersion и pageContext.servletContext.minorVersion.

Если вы хотите получить доступ к параметрам инициализации сервлета с помощью EL, то это лучше создать карту параметров инициализации для сервлета и поместите его в запросе в качестве переменной области действия - скажем, initParameters. После этого вы сможете получить любой параметр по имени с $ {requestScope.initParameters.name}.

Примечание

Мы можем получить доступ к параметрам инициализации контекста с помощью ${initParam.name}

0 голосов
/ 16 февраля 2016

В дополнение к ответу мистера Муса я нашел решение, в котором 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>
...