Question

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") %>
Was it helpful?

Solution

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) {

OTHER TIPS

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top