JSP-javabean返回null,但为什么?
当用户按下JSP上的登录按钮时,请求被提交到my servlet,它通过JSP-javabean返回null,但为什么?,java,jsp,servlets,Java,Jsp,Servlets,当用户按下JSP上的登录按钮时,请求被提交到my servlet,它通过getParameter()从登录表单中获取输入的用户名和密码 用户名和密码存储在javabean中。如果我放入一个println()语句,其中显示bean.getUsername()和bean.getPassword()的值,那么它会在日志中打印用户名和密码 但是下面是我的母版页上的代码片段 <jsp:useBean id="bean" class="package.Bean" scope="session" /&g
getParameter()
从登录表单中获取输入的用户名和密码
用户名和密码存储在javabean中。如果我放入一个println()
语句,其中显示bean.getUsername()
和bean.getPassword()
的值,那么它会在日志中打印用户名和密码
但是下面是我的母版页上的代码片段
<jsp:useBean id="bean" class="package.Bean" scope="session" />
<jsp:getProperty name="bean" property="username" />
可能您没有让servlet将bean存储在会话范围中。但是,既然您使用的是servlet,那么就忘了
这件事吧。这在技术上毫无价值。它还将模型与视图紧密耦合
只需让servlet将bean放入会话范围:
User user = userDAO.find(username, password);
if (user != null) {
request.getSession().setAttribute("user", user); // Store logged-in user in session.
response.sendRedirect("home"); // Redirect to login home page or whatever.
} else {
request.setAttribute("message", "Unknown login, please try again"); // Store error message for redisplay in login page.
request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); // Forward to login page.
}
然后在用户主页中,只需使用EL(表达式语言)访问user
bean
<p>Welcome, <c:out value="${user.username}" /></p>
欢迎光临
${foo}
基本上是在页面、请求、会话和应用程序范围中搜索以名称foo
存储的属性,并返回第一个非空值。在本例中,${user}
将引用存储在会话范围中的user
bean。${user.username}
基本上将显示user.getUsername()
的返回值
顺便说一下,
不是必需的,但它可以防止您的页面受到潜在的XSS攻击
另见:
与具体问题无关,
package
是一个关键字,因此是一个非法的包名。发布过于简单的代码示例时请小心;)如果您想混淆包名,可以使用com.example
或其他方法
更新:根据您的更新,您正在会话范围中设置用户名,而不是bean本身。即使您可以通过
${username}
来显示它,为了能够使用${bean.username}
,您需要按照上面的回答相应地修复它。为您的servlet显示。您是否将bean添加到servlet中的会话范围中?真的吗?我创建了bean对象来存储用户名和密码。困惑。我在会话范围中设置了用户名,但没有看到我的代码与您的代码有什么不同。您试图使用
访问一个bean,而您根本没有将其放入会话范围,因此JSP正在创建一个全新的bean,而不是在会话中重用现有的bean。但毕竟您不需要创建一个新的,所以只需去掉JSP中的这两行,只需使用${username}
来显示用户名。再次阅读答案(不仅是代码,还包括文本),找出细微的差异和链接,进一步了解所有这些应该如何工作。
<p>Welcome, <c:out value="${user.username}" /></p>