Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Параметры сервлета в Томкате 
:(
    Опции темы
setnull
Дата 24.1.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: нет
Всего: 1



Всем доброго настроения!

В Томкате мэпим сервлет

Код

    <servlet>
        <servlet-name>XmlRpcServlet</servlet-name>
        <servlet-class>org.apache.xmlrpc.webserver.XmlRpcServlet</servlet-class>
        <init-param>
          <param-name>enabledForExtensions</param-name>
          <param-value>true</param-value>
          <description>
            Sets, whether the servlet supports vendor extensions for XML-RPC.
          </description>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>XmlRpcServlet</servlet-name>
        <url-pattern>/xmlrpc</url-pattern>
    </servlet-mapping>


Вопрос такой, чьими средствами в окружении моего приложения я могу добраться к информации, определяемой в <init-param>?.
В доках ничего не нашел....

Но это только половина вопроса....
Если такая возможность и есть, то она у сервлета. Архитектура XmlRpcServlet (Апачевский) заключается в том, что ты пишешь класс-логику, а сервлет XmlRpcServlet вызывает его  методы... Таким образом, чтоб получить доступ к <init-param>, мне необходимо получить доступ из своего класса на экземпляр XmlRpcServlet, им манипулирующий… Как это сделать?

У меня есть задумка (еще не реализовывал), но она черезжопная и наверняка существуют более подходящие способы…

Код

try
{
    if(true)throw new Exception();
}
catch(Exception e)
{
    //находим в e.getStackTrace() экземпляр XmlRpcServlet
}


Вторая половина вопроса состоит в элегантном доступе к экземпляру XmlRpcServlet…

Спасибо!!!

PM MAIL   Вверх
ivg
Дата 24.1.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Код

package test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.xmlrpc.webserver.XmlRpcServlet;

public class MyServlet extends XmlRpcServlet {
    
    private static final ThreadLocal<MyServlet> tlMyServlet = new ThreadLocal<MyServlet>();
    
    public static MyServlet getMyServletCurrentInstance() {
        return tlMyServlet.get();
    }
    
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        tlMyServlet.set(this);
        try {
            super.doPost(request, response);
        } finally {
            tlMyServlet.remove();
        }
    }
}

В web.xml поменять имя класса сервлета на своё. В классе обработчике вызовов:
Код

  MyServlet curServlet = MyServlet.getMyServletCurrentInstance();
  ServletConfig sc = curServlet .getServletConfig();
  String enabledForExtensions = sc.getInitParameter("enabledForExtensions");

Можно ещё какие нибудь способы придумать. Вопрос - зачем вам это?
PM MAIL   Вверх
setnull
Дата 24.1.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: нет
Всего: 1



Цитата(ivg @ 24.1.2009,  15:26)
Можно ещё какие нибудь способы придумать. Вопрос - зачем вам это?

Для конфигурирования работы своего кода.

Вариант очень интересный!!! smile 
Спасибо!!!!
А, чтоб без переопределения XmlRpcServlet можно че-нить придумать?
PM MAIL   Вверх
ivg
Дата 25.1.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(setnull @  24.1.2009,  17:55 Найти цитируемый пост)
А, чтоб без переопределения XmlRpcServlet можно че-нить придумать?

В web.xml:
Код

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <context-param>
    <param-name>firstParam</param-name>
    <param-value>SomeValue</param-value>
  </context-param>
  <context-param>
    <param-name>secondParam</param-name>
    <param-value>OtherValue</param-value>
  </context-param>
  <listener>
    <listener-class>test.MyContextListener</listener-class>
  </listener>
  ...
</web-app>

Код

package test;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyContextListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // TODO Auto-generated method stub
    }

    @Override
    public void contextInitialized(ServletContextEvent event) {
        MyConfig.init(event.getServletContext());
    }
}

Код

package test;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletContext;

public class MyConfig {

    private static MyConfig instance;

    public static synchronized MyConfig getInstance() {
        if (instance == null) {
            instance = new MyConfig();
            instance._init();
        }
        return instance;
    }

    public static synchronized void init(ServletContext servletContext) {
        if (instance == null) {
            instance = new MyConfig();
        }
        instance._init(servletContext);
    }

    private Map<String, String> params = new HashMap<String, String>();
    
    private MyConfig() {}

    private void _init() {
        // some other initialization
    }

    @SuppressWarnings("unchecked")
    private void _init(ServletContext servletContext) {
        this._init();
        Enumeration<String> e = servletContext.getInitParameterNames();
        while (e.hasMoreElements()) {
            String pName = e.nextElement();
            this.params.put(pName, servletContext.getInitParameter(pName));
        }
    }
    
    public String getParam(String name) {
        return this.params.get(name);
    }
}

В классе обработчике вызовов:
Код

  MyConfig conf = MyConfig.getInstance();
  String firstParam = conf.getParam("firstParam");
  String secondParam = conf.getParam("secondParam");

PM MAIL   Вверх
setnull
Дата 27.1.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: нет
Всего: 1



Цитата(ivg @ 25.1.2009,  14:42)
Цитата(setnull @  24.1.2009,  17:55 Найти цитируемый пост)
А, чтоб без переопределения XmlRpcServlet можно че-нить придумать?

В web.xml:
Код

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <context-param>
    <param-name>firstParam</param-name>
    <param-value>SomeValue</param-value>
  </context-param>
  <context-param>
    <param-name>secondParam</param-name>
    <param-value>OtherValue</param-value>
  </context-param>
  <listener>
    <listener-class>test.MyContextListener</listener-class>
  </listener>
  ...
</web-app>

..............

Оно!
Спасибо!!!

Это сообщение отредактировал(а) setnull - 27.1.2009, 10:31
PM MAIL   Вверх
setnull
Дата 28.1.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: нет
Всего: 1



А есть возможность одно и то же приложение запускать в различных контекстах?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0804 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.