Как получить контекстные параметры во встроенном Jetty WebAppContext? [Дубликат]

Еще один подход к возврату значения из асинхронной функции - передать объект, который сохранит результат от асинхронной функции.

Вот пример того же:

var async = require("async");

// This wires up result back to the caller
var result = {};
var asyncTasks = [];
asyncTasks.push(function(_callback){
    // some asynchronous operation
    $.ajax({
        url: '...',
        success: function(response) {
            result.response = response;
            _callback();
        }
    });
});

async.parallel(asyncTasks, function(){
    // result is available after performing asynchronous operation
    console.log(result)
    console.log('Done');
});

Я использую объект result для хранения значения во время асинхронной операции. Это позволяет получить результат даже после асинхронного задания.

Я использую этот подход много. Мне было бы интересно узнать, насколько хорошо этот подход работает, когда задействован результат обратно через последовательные модули.

59
задан mina 8 February 2015 в 11:27
поделиться

4 ответа

<init-param> и <context-param> являются статическими параметрами, которые хранятся в файле web.xml. Если у вас есть данные, которые не меняются часто, вы можете сохранить их в одном из них.

Если вы хотите хранить определенные данные, которые ограничены определенной областью сервлета, вы можете использовать <init-param> . Все, что вы объявляете внутри <init-param>, доступно только для этого конкретного сервлета. Init-param объявлен внутри тега <servlet>.

<servlet>
     <display-name>HelloWorldServlet</display-name>
     <servlet-name>HelloWorldServlet</servlet-name>
     <init-param>
         <param-name>Greetings</param-name>
         <param-value>Hello</param-value>
     </init-param>
</servlet>

, и вы можете получить доступ к этим параметрам в сервлет как следует:

out.println(getInitParameter("Greetings"));

Если вы хотите хранить данные, общие для всего приложения, и если он не изменяется часто, вы можете использовать <context-param> вместо метода servletContext.setAttribute() контекста приложения. Для получения дополнительной информации об использовании <context-param> VS ServletContext.setAttribute() посмотрите на этот вопрос . context-param объявляются под тегом web-app. Вы можете объявить и получить доступ к <context-param> следующим образом

<web-app>
    <context-param>
        <param-name>Country</param-name>
        <param-value>India</param-value>
    </context-param>
    <context-param>
        <param-name>Age</param-name>
        <param-value>24</param-value>
    </context-param>
</web-app>

Использование в приложении либо в JSP, либо в Servlet

getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
85
ответ дан Neeraj 25 August 2018 в 12:40
поделиться

<init-param> будет использоваться, если вы хотите инициализировать некоторый параметр для определенного сервлета. Когда запрос приходит к сервлету сначала, его метод init будет вызываться тогда doGet/doPost, тогда как если вы хотите инициализировать некоторую переменную для всего приложения, вам нужно будет использовать <context-param>. Каждый сервлет будет иметь доступ к контекстной переменной.

5
ответ дан Adeel Ahmad 25 August 2018 в 12:40
поделиться
<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/META-INF/PersistenceContext.xml
    </param-value>
</context-param>

Я инициализировал свой PersistenceContext.xml в <context-param>, потому что все мои сервлеты будут взаимодействовать с базой данных в рамках MVC.

Howerver,

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:ApplicationContext.xml
        </param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.organisation.project.rest</param-value>
    </init-param>
</servlet>

в вышеупомянутый код, я настраиваю трикотаж и ApplicationContext.xml только для слоя отдыха. Для этого я использую </init-param>

5
ответ дан Ankur Piyush 25 August 2018 в 12:40
поделиться

Рассмотрим приведенное ниже определение в web.xml

<servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>TestServlet</servlet-class>
    <init-param>
        <param-name>myprop</param-name>
        <param-value>value</param-value>
    </init-param>
</servlet>

. Вы можете видеть, что init-param определен внутри элемента сервлета. Это означает, что он доступен только сервлету под декларацией, а не другим частям веб-приложения. Если вы хотите, чтобы этот параметр был доступен для других частей приложения, скажем, JSP, это должно быть явно передано JSP. Например, передается как request.setAttribute (). Это очень неэффективно и сложно кодировать.

Итак, если вы хотите получить доступ к глобальным значениям из любого места приложения без явно переданных этих значений, вам нужно использовать параметры контекста Init.

Рассмотрим следующее определение в сети. xml

 <web-app>
      <context-param>
           <param-name>myprop</param-name>
           <param-value>value</param-value>
      </context-param>
 </web-app>

Этот параметр контекста доступен для всех частей веб-приложения и может быть получен из объекта Context. Например, getServletContext (). GetInitParameter («dbname»);

Из JSP вы можете получить доступ к параметру контекста с помощью неявного объекта приложения. Например, application.getAttribute ("dbname");

8
ответ дан SMA 25 August 2018 в 12:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: