Search code examples
javajsptomcatservletsembedded-tomcat-8

servlet not forwarding session attribute to jsp


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") %>

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