Search code examples
javajspattributeshttpsession

Use a Java HttpSession variable in JSP


I'm new to Java Web development. I read many post related to this problem, it have been discussed a lot... but I can't figure out how to make it work for me... So please be kind :o)

I have a simple form that I can submit. By default I want the form to display today's date.

Here is my servlets code snippet:

@WebServlet("/Main")
public class Main extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Main() {
        super();
        // TODO Auto-generated constructor stub
    }

    public String date;

    public String getDate() {
        return date;
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        // response.getWriter().append("Served at: ").append(request.getContextPath());
        System.out.println("\n-----------------------------------------\nBegin doGet");
        System.out.println("Date " + date);

        HttpSession session = request.getSession();

        // Date - Get today date to fill the welcome form
        Date dNow = new Date();
        SimpleDateFormat ft = new SimpleDateFormat("dd MMMM yyyy");
        date = (String) ft.format(dNow);
        session.setAttribute("date", date);

        // Go to main page
        this.getServletContext().getRequestDispatcher("/WEB-INF/main.jsp").forward(request, response);
        System.out.println("\nEnd doGet\n-----------------------------------------");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        System.out.println("\n-----------------------------------------\nBegin Post Session");
        System.out.println("Date " + date);

        HttpSession session = request.getSession();

        this.getServletContext().getRequestDispatcher("/WEB-INF/main.jsp").forward(request, response);
        System.out.println("\nEnd doPost\n-----------------------------------------");
    }

}

The trace in the eclipse console show the correct value.

But in my JSP I don't know how to display it. I tried

<p>${date}</p>

this one give a blank paragraph. and

<%= session.getAttribute("date");%>

This one gives an execution error on the server side.

Can someone explain me what is wrong in my code? Not just a link on the forum which I've already read but not understood ;o)

Thank you


Solution

  • You can access session attributes as follows in jsp pages,

    Use ${sessionScope.date} instead of ${date} in <p> tag.

    Make sure the jsp is allow access session by adding <%@ page session="true" %> at the top of the page.