首页 > 解决方案 > 从 JSP 和 servlet 访问 bean

问题描述

我试图弄清楚如何从 JSP 和 servlet 访问 Java bean。

我以前很擅长使用 JSP 中的 bean 和 useProperty。我想通过我的 servlet 与这些相同的 bean 进行交互,但它不起作用。

我的 servlet 中有这个。这是在提交表单后调用的。

public class Login extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    String user = request.getParameter("user");
    String pass = request.getParameter("pass");

    UserBean userBean = (UserBean) request.getSession().getAttribute("user");
    if (userBean == null) {
        //this prints
        out.println("userBean is null");
        request.getSession().setAttribute("user", new UserBean());
        userBean = (UserBean) request.getSession().getAttribute("user");
        if (userBean == null) {
            //this DOES NOT print!
            out.println("userBean is null");
        }
    }

}
}

这总是出现为空。我可以自己创建一个 UserBean 并插入它,它对于一页加载来说很好,但我刷新它再次为空。我希望它在客户会话期间持续。

同样,我可以在 JSP 中执行此操作,例如 test.jsp:

    <jsp:useBean id="user" scope="session" class="my.code.UserBean" />
    <jsp:getProperty name="user" property="accesses"></jsp:getProperty>
    <jsp:setProperty name="user" property="accesses" value="cat"></jsp:setProperty>

这很有效,它将显示来自 bean 的默认访问值(“dog”),我知道 useBean 将创建一个 bean,如果没有找到。如果我重新加载我的 test.jsp,我认为它现在应该打印“cat”而不是“dog”,因为我们刚刚创建了一个 bean 并调整了访问值,但它仍然打印“dog”。如果我再次检查 servlet 是否知道用户 bean,它将显示为 null。

从我读过的内容来看,我做对了,这应该可以。我究竟做错了什么?

标签: javajspservlets

解决方案


推荐阅读