我正在试图弄清楚如何从JSP和servlet访问Java bean。
我以前在使用带有useProperty的JSP中使用bean时已经很好了。我想通过我的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");
}
}
}
}
这始终为null。我可以自己创建一个UserBean并插入它,它对于一个页面加载很好,但我刷新它再次为null。我希望它在客户端会话期间持续。
同样,我可以在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。
从我读过的内容来看,我做得对,并且这应该工作。我做错了什么?