Установка параметров в jsp и в сервлетах - PullRequest
1 голос
/ 21 марта 2012

В моем веб-приложении я получаю запрос от клиента. Я обрабатываю запрос на моей странице jsp или в сервлете (который всегда вызывается) и хочу перенаправить его на другие jsp или сервлеты соответственно.

Но перед пересылкой я хочу установить несколько параметров, а затем переслать их с этими новые параметры. Старые параметры не должны присутствовать при пересылке. Должны присутствовать только новые параметры. Как это можно сделать?
Можно ли переслать сервлет в jsp и наоборот?
Скажите, пожалуйста, как это можно сделать?

Ответы [ 5 ]

3 голосов
/ 21 марта 2012

Вы можете использовать диспетчер запросов и перенаправить согласно вашим потребностям и требованиям.

ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("url");

rd.forward(request,response);

или

response.sendRedirect("url");

sendRedirect () отправляет заголовок обратно в браузер, который содержитимя ресурса, на который нужно перенаправить.Таким образом, это будет новый запрос к ресурсу из браузера.

Действие forward () происходит на сервере без ведома браузера.

3 голосов
/ 21 марта 2012

да, вы можете переслать сервлет параметров в jsp, а jsp - в сервлет.

если вы можете установить атрибут в запросе, тогда он будет потерян в приемнике. Это означает, что вы не можете получить к нему доступ в третьем ресурсе.

request.setAttribute(attribute name,attribute value)

вы можете делать то же самое в сеансе.

2 голосов
/ 21 марта 2012

Если вы не используете параметры запроса и ваш jsp / servlet ничего не записал в ответ, то я полагаю, что было бы хорошо использовать перенаправление вместо перенаправления, так как перенаправление отклонит запрос вместе с параметрами.

Когда вы делаете перенаправление, вы можете создать динамически и установить строку запроса следующим образом:

response.sendRedirect("url?a=" + var1 +"&b=" + var2);

Обратите внимание, что это будет метод GET для URL. Если URL-адрес будет преобразован в сервлет, вы можете реализовать метод doGet, чтобы просто вызвать doPost.

Обратите внимание, что перенаправление будет игнорироваться, если jsp / servlet уже что-то написал в ответе ...

0 голосов
/ 21 марта 2012

Вы должны переслать в JSP / Servlet, используя RequestDisptcher.Установите атрибут запроса в запросе для установки параметров, используя

request.setAttribute(name, value)

Переадресованный JSP может считывать параметр, используя

request.getAttribute(name)

Но, Вы cannot hide the attribute existing before forward by default.Вы можете достичь этого, используя Request Wrapper.Оберните запрос перед пересылкой, переопределите методы set и get.

Ниже приведен код, объясняющий

    RequestDisptcher dispatcher =  req.getRequestDispatcher("url");
    HideExistingRequestWrapper requestWrapper = 
                                         new HideExistingRequestWrapper(request);
    requestWrapper.setAtribute("forwarded", "forwarded value");
    dispatcher.forward(requestWrapper, response);

Вот код реализации оболочки:

    class HideExistingRequestWrapper extends HttpServletRequestWrapper {

           private Map localattributes = new HashMap();

           public HideExistingRequestWrapper (HttpServletRequest orignialRequest) {
                  super(orignialRequest);
           }

           public Object getAttribute(java.lang.String name) { 
                 return localattributes.get(name);
           }

           public Object setAttribute(java.lang.String name, java.lang.String value) { 
                 return localattributes.put(name, value);
           }

    }
0 голосов
/ 21 марта 2012

использование

ServletRequest.removeAttribute(name of your old attribute)
ServletRequest.setAttribute(name , value)

После установки атрибутов получите RequestDispatcher , используя

getRequestDispatcher(url)

и затем используйте forward () метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...