在JSP中使用Java HttpSession变量

问题描述 投票:0回答:2

我是Java Web开发的新手。我读了很多与这个问题相关的帖子,已经讨论了很多......但我无法弄清楚如何让它对我有用......所以请善待:o)

我有一个简单的表格,我可以提交。默认情况下,我希望表单显示今天的日期。

这是我的servlets代码片段:

@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-----------------------------------------");
    }

}

eclipse控制台中的跟踪显示正确的值。

但是在我的JSP中我不知道如何显示它。我试过了

<p>${date}</p>

这个给出一个空白段落。和

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

这个在服务器端给出了执行错误。

有人能解释我的代码中有什么问题吗?论坛上的链接不仅仅是我已经阅读过但未被理解的; o)

谢谢

java jsp attributes httpsession
2个回答
0
投票

您可以在jsp页面中按如下方式访问会话属性,

${sessionScope.date}标签中使用${date}而不是<p>

通过在页面顶部添加<%@ page session="true" %>来确保jsp允许访问会话。


0
投票

JSP表达式不使用“;”结束表达。代替:

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

尝试

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

此外,servlet通常处理并发请求,因此它需要是无状态的。将date移动为本地方法变量而不是类变量,因此它是线程安全的。

© www.soinside.com 2019 - 2024. All rights reserved.