Frage

Using embedded tomcat, this code works:

Servlet:

String test = "test";
request.setAttribute("test", test);
request.getRequestDispatcher("/index.jsp").forward(request, response);

JSP:

<%= request.getAttribute("test") %>

It sets the attribute test and then prints it out on the servlet /example's jsp page example.jsp.


However, if I try to set the attribute within the session then I don't get the same result, instead, I get a null when using this:

Servlet:

String test = "test";
request.getSession().setAttribute("test", test);
request.getRequestDispatcher("/index.jsp").forward(request, response);

JSP:

<%= session.getAttribute("test") %>
War es hilfreich?

Lösung

On the JSP side, you don't need to say request.getSession(), just session.getAttribute();
And you had a problem in your Main.java when creating the servlet context (a trick of using embedded Tomcat); you were not getting the context created by adding the webapp to tomcat, you had some other context.

//          File base = new File("src/main/webapp");
//          context = tomcat.addContext("", base.getAbsolutePath());
//          tomcat.addWebapp(null, "/", base.getAbsolutePath());

        context = tomcat.addWebapp("/", new File("src/main/webapp").getAbsolutePath());
        context.setSessionTimeout(10080);

I commented out your code and changed the context handling and now things work. And a new exception to be caught.

        } catch (ServletException | InterruptedException | LifecycleException exception) {

Andere Tipps

You may want to compare the session id in the servlet and the jsp. If they are different maybe check your session and cookie configuration in tomcat

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top