Передача переменных из сервлета в JSP - PullRequest
50 голосов
/ 31 августа 2010

Как передать переменную из сервлета в jsp?setAttribute и getAttribute у меня не сработали: - (

Ответы [ 9 ]

83 голосов
/ 31 августа 2010

Он не будет работать, когда:

  1. Вы перенаправляете ответ на новый запрос на response.sendRedirect("page.jsp").Вновь созданный объект запроса, конечно, больше не будет содержать атрибутов, и они не будут доступны в перенаправленном JSP.Вам нужно пересылать, а не перенаправлять.Например,

    request.setAttribute("name", "value");
    request.getRequestDispatcher("page.jsp").forward(request, response);
    
  2. Вы обращаетесь к нему неверным способом или используете неправильное имя .Предполагая, что вы установили его, используя имя "name", вы сможете получить к нему доступ на странице переадресации JSP следующим образом:

    ${name}
    
25 голосов
/ 16 декабря 2012

Простой способ, который я нашел, это

В сервлете:

Вы можете установить значение и переслать его в JSP, как показано ниже

req.setAttribute("myname",login);
req.getRequestDispatcher("welcome.jsp").forward(req, resp); 

В Welcome.jsp вы можете получить значения по

.<%String name = (String)request.getAttribute("myname"); %>
<%= name%>

(или) напрямую вы можете позвонить

<%= request.getAttribute("myname") %>.
15 голосов
/ 31 августа 2010

Используйте

request.setAttribute ("attributeName");

, а затем

getServletContext (). GetRequestDispatcher ("/file.jsp "). forward ();

Тогда он будет доступен в JSP.

Как примечание - в вашем jsp избегайте использования кода Java.Используйте JSTL.

13 голосов
/ 22 февраля 2012

Помимо использования атрибута для передачи информации из сервлета на страницу JSP, можно также передать параметр .Это можно сделать, просто перенаправив URL-адрес, указывающий соответствующую страницу JSP, и добавив обычный механизм передачи параметров через URL.

Пример.Соответствующая часть кода сервлета:

protected void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException
{
    response.setContentType( "text/html" );
    // processing the request not shown...
    //
    // here we decide to send the value "bar" in parameter
    // "foo" to the JSP page example.jsp:
    response.sendRedirect( "example.jsp?foo=bar" );
}

И соответствующая часть страницы JSP example.jsp:

<%
    String fooParameter = request.getParameter( "foo" );
    if ( fooParameter == null )
    {
%>
    <p>No parameter foo given to this page.</p>
<%
    }
    else
    {
%>
    <p>The value of parameter foo is <%= fooParameter.toString() %>.</p>
<%
    }
%>
12 голосов
/ 31 августа 2010

Вы можете установить все значения в объекте ответа, прежде чем пересылать запрос в jsp. Или вы можете поместить свои значения в сессионный компонент и получить к нему доступ в jsp.

9 голосов
/ 18 июня 2015

Это код сервлета, который содержит строковую переменную a.значение для получения от HTML-страницы с формой.затем установите переменную в объект запроса.затем передайте его в jsp с помощью методов forward и requestdispatcher.

String a=req.getParameter("username");
req.setAttribute("name", a);
RequestDispatcher rd=req.getRequestDispatcher("/login.jsp");
rd.forward(req, resp);

в jsp выполните следующие действия, показанные ниже в программе

<%String name=(String)request.getAttribute("name");
out.print("your name"+name);%>
2 голосов
/ 07 ноября 2014

Вы также можете использовать RequestDispacher и передавать данные вместе с необходимой страницей jsp.

request.setAttribute("MyData", data);
RequestDispatcher rd = request.getRequestDispatcher("page.jsp");
rd.forward(request, response);
1 голос
/ 03 мая 2018

При использовании setAttribute и getRequestDispatcher на doGet убедитесь, что вы обращаетесь к своим страницам с помощью urlPatterns (например, "/ login"), определенной для вашего сервлета.Если вы сделаете это с "/login.jsp", ваш doGet не будет вызван, поэтому ни один из ваших атрибутов не будет доступен.

0 голосов
/ 14 июня 2018

Если вы используете Action, Actionforward способ обработки бизнес-логики и показ следующей страницы, проверьте, вызван ли редирект.Как отмечали многие другие, перенаправление не сохраняет ваш исходный запрос, поскольку в основном вынуждает вас сделать новый запрос к указанному пути.Таким образом, значение, установленное в исходном запросе, исчезнет, ​​если вы будете использовать перенаправление вместо requestdispatch.

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