Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / как создать новый параметр в ServletRequest? / 13 сообщений из 13, страница 1 из 1
29.03.2007, 14:45:41
    #34424798
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
Мне нужно прочитать определенный параметр в запросе, и если он не существует создать его и поместить в запрос.

Не могу понять, или я пропустил что-то в документации к классам ServletRequest и HttpServletRequest или это нетривиальныя операция.

Подскажите, кто знает.
Спасибо
...
Рейтинг: 0 / 0
29.03.2007, 14:49:28
    #34424812
y3u
y3u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
зачем тебе его класть именно в запрос?...
...
Рейтинг: 0 / 0
29.03.2007, 15:01:37
    #34424860
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
потому что я это делаю в ServletFilter, т.е. классе, который "перехватывает" запрос к сервлету. Т.е. сервлет должен получить Request с этим параметром внутри. Так как я не имею никакой возможности повлиять-изменить сервлет, мне нужно этот параметр каким-то образом сформировать.
...
Рейтинг: 0 / 0
29.03.2007, 15:11:26
    #34424903
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
можно положить параметр в атрибуты запроса или переопределить сам запрос через наследование.
...
Рейтинг: 0 / 0
29.03.2007, 15:19:11
    #34424944
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
Deadyможно положить параметр в атрибуты запроса или переопределить сам запрос через наследование.

можно чуть подробнее, плиз. Аттрибуты, насколько я понимаю, не являются параметрами. Т.е. если вы предлагаете в сервлете вместо обращения к параметру обращаться к аттрибутам, то это невозможно. Т.к. я уже сказал я не имею никакого влияния на реализацию сервлета. Это противоречит техзаданию, можно сказать. Или вы имеете в виду что-то другое.

Насчет переопределения запроса через наследование-не могли бы вы примерчик привести или объяснить подробнее?

Поясню еще раз, мой запрос уже имеет некоторые параметры. Но мне нужно дополнить этот список еще одним. Возможно ли это в принципе или нет?
...
Рейтинг: 0 / 0
29.03.2007, 15:42:17
    #34425031
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 class  MyCoolServletRequestWithDynamicParameters  implements  HttpServletRequest {

    private  Map<String, String> parameters =  new  HashMap<String, String>();
    private  HttpServletRequest req;

    public  MyCoolServletRequestWithDynamicParameters(HttpServletRequest req) {
       this .req = req;
       for  (String par: req.getParameterNames()) {
         parameters.put(par, req.getParameter(par));
      }
   }

    public   void  getParameter(String par) {
       return  parameters.get(par);
   }
    public   void  setParameter(String name, String par) {
      parameters.put(par, req.getParameter(par));
   }

   //делегируем все методы оригинальному запросу
    public  Object getAttribute(String name) {
        return  req.getAttribute(name);
   }
    public   void  setAttribute(String name, Object o) {
        return  req.setAttribute(name, o);
   }
   //и в таком духе для всех оставшихся методов

}


в фильтре

Код: plaintext
1.
2.
3.
4.
5.
6.
 void  doFilter(...) {
    if  (нет_параметра) {
       MyCoolServletRequestWithDynamicParameters o =  new  MyCoolServletRequestWithDynamicParameters((HttpServletRequest)req);
       chain.doFilter(o, resp);
   }
}


можно еще редиректнуть на себя с добавленным параметром.
...
Рейтинг: 0 / 0
29.03.2007, 16:00:31
    #34425093
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
спасибо за быстрый ответ. Пробую разобраться
...
Рейтинг: 0 / 0
29.03.2007, 18:17:03
    #34425647
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
2 Deady:

вроде разобрался. 2 вопросика еще:
1. как можно редирект на себя сделать, чтобы убедиться, что работает?

2. можно ли, чтобы не переписывать все имплементируемые из интерфейса функции, просто унаследовать какой-нибудь класс (который уже содержит все нужные методы из интерфейса) и добавить туда операцию setParameter, которой мне и не хватает?
А то как-то не очень элегантно выглядит.

Спасибо еще раз
...
Рейтинг: 0 / 0
29.03.2007, 18:26:04
    #34425670
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
Neuling2. можно ли, чтобы не переписывать все имплементируемые из интерфейса функции, просто унаследовать какой-нибудь класс (который уже содержит все нужные методы из интерфейса) и добавить туда операцию setParameter, которой мне и не хватает?
А то как-то не очень элегантно выглядит.

HttpServletRequestWrapper называется
...
Рейтинг: 0 / 0
29.03.2007, 18:31:38
    #34425687
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
Neuling2 Deady:

вроде разобрался. 2 вопросика еще:
1. как можно редирект на себя сделать, чтобы убедиться, что работает?


если запрос http://www.server.com/show.jsp?id=1
то
Код: plaintext
1.
2.
resp.sendRedirect("http://www.server.com/show.jsp?id=1&dopParameter=1");
 return ;

Neuling
2. можно ли, чтобы не переписывать все имплементируемые из интерфейса функции, просто унаследовать какой-нибудь класс (который уже содержит все нужные методы из интерфейса) и добавить туда операцию setParameter, которой мне и не хватает?
А то как-то не очень элегантно выглядит.

Спасибо еще раз

HttpServletRequest - это интерфейс. Конкретные реализации зависят от сервера. Если будете наследовать, то привяжетесь к серверу, хотя в принципе это не страшно. Дебаггером посмотрите что за класс приходит в фильтр и от него наследуйтесь.
...
Рейтинг: 0 / 0
29.03.2007, 18:49:37
    #34425742
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
Blazkowicz
HttpServletRequestWrapper называется
я вроде смотрел уже этот класс, не пойму где его параметр мап и т.д. Но все равно не получается, пытался сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public   class  MyServletRequest  extends  HttpServletRequestWrapper {

	 public  MyServletRequest(HttpServletRequest arg0) {
		 super (arg0);
	}
	
	    public   void  setParameter(String name, String par) {
		    super .getParameterMap().put(name, getParameter(par));
	}
}
и получаю проблемы при setParameter. Видимо ParameterMap недоступна для записи.
Deady
HttpServletRequest - это интерфейс. Конкретные реализации зависят от сервера. Если будете наследовать, то привяжетесь к серверу, хотя в принципе это не страшно. Дебаггером посмотрите что за класс приходит в фильтр и от него наследуйтесь.
спасибо, понятно объяснили. В общем я уже переписал все методы. Еще попробую на себя перенаправить.
...
Рейтинг: 0 / 0
29.03.2007, 19:47:28
    #34425870
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
У HttpServletRequestWrapper нет никакой мапы параметров. Это просто обертка над другим HttpServletRequest. Wrapper делегирует все методы классу который он оборачивает. Поэтому хранение кастомных параметров надо реализовывать самостоятельно.
То есть не на столько полезный класс на сколько хотелось бы, но зато не надо переопределять массы методов, достаточно только те которые возвращают параметры.
...
Рейтинг: 0 / 0
30.03.2007, 11:32:38
    #34426886
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать новый параметр в ServletRequest?
Blazkowicz
То есть не на столько полезный класс на сколько хотелось бы, но зато не надо переопределять массы методов, достаточно только те которые возвращают параметры.

да, спасибо большое. Я уже потом подумал и сам догадался, что мапу свою надо иметь.

Спасибо всем
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / как создать новый параметр в ServletRequest? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]