java - 从 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。
从我读过的内容来看,我做对了,这应该可以。我究竟做错了什么?
解决方案
推荐阅读
- html - 弹出背景不覆盖导航栏
- java - Netty.io bootstrap.remoteAddress() 线程安全吗?
- python - 从窗口中删除图标
- css - 在 Vuetify 中的必填文本字段中添加星号
- android - 我们可以在 Android Kotlin 的单个协程中下载多个文件吗
- javascript - 如何处理 vue 组件中的错误?
- security - 防止在 keycloak 中对某些用户进行暴力检测
- javascript - React hooks setter在数组拼接后不会触发重新渲染
- android - ConstraintLayout 中的视图不适合屏幕边界
- php - 对数组进行分类并根据其组及其顺序获取第一个和最后一个值