【问题标题】:Accessing request scoped bean inside servlet在 servlet 中访问请求范围的 bean
【发布时间】:2015-12-26 05:56:20
【问题描述】:

我有一个 jsp 页面,我在其中使用 bean 作为请求范围 bean。我有一个输入文本,其值为 bean 的属性。在提交表单上,我的操作是 someServlet。现在在 someServlet 中,我想访问我在我的 jsp 页面中使用的 bean。 这是我正在使用的示例代码。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="userBean" scope="request" class="com.iceman.bean.UserBean">
<jsp:setProperty property="*" name="userBean"/></jsp:useBean>
    <form action="action.do" method="post">
        Type Your Name:<input type="text" name="userName"/><br/>
        <input type="submit" value="Submit"/> 
    </form>
</body>
</html>

服务器

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        UserBean userBean = (UserBean)request.getAttribute("userBean");
        response.getWriter().print(userBean.getUserName());
    }

当我运行这个时,我在调用 bean getter 方法的 servlet 行上得到一个空指针异常。

我哪里做错了?

【问题讨论】:

标签: java jsp servlets


【解决方案1】:

只是因为render请求和post请求是不同的请求:

  • 客户端发送第一个请求,服务器端使用jsp构建响应。在 JSP 中创建的请求范围 bean 仅存在于那个中
  • 用户填写表单并发布新请求

在请求之间保持信息的唯一方法是:

  • 会话(以及一些框架提供的 flash,如 ruby​​ on rails 或 Spring MVC)
  • 表单域(包括隐藏域)
  • 网址参数

【讨论】:

  • 所以我无法从 servlet 访问请求 bean?
  • @UsmanRiaz :你可以,在 same 请求。如果您使用 include 或 forward 调用 servlet,则可以访问请求范围的 bean。
  • 我只是在提交一个表单并期待 servlet 中的这个请求的 bean :-(
【解决方案2】:

为清楚起见,您需要将 bean 声明 &lt;jsp:useBean id="userBean" scope="request" class="com.iceman.bean.UserBean"&gt;&lt;/jsp:useBean&gt; 放在 form 元素之外,并将定义更改为

<jsp:useBean id="userBean" scope="request" class="com.iceman.bean.UserBean">
<jsp:setProperty name="userBean" property="*" />
</jsp:useBean>

星号 ( * ) 表示所有名称与发送到页面的请求参数匹配的 bean 属性都会自动设置。 (根据 O`Reilly 的书)

那你需要把&lt;input type="text" value="${userBean.userName}"/&gt;换成&lt;input type="text" name="one of field names as per your UserBean class "/&gt;

您尚未分享 UserBean 类的详细信息,但我猜字段名称是 userName

关于request中的bean是NULL,请参考Jan Zyka的回答jsp useBean is NULL by getAttribute by servlet

希望对你有帮助!!

【讨论】:

  • 感谢您的友好回答@Sabir Khan。我仍然无法从 servlet 中的请求中获取 bean。我已根据您的回答编辑了我的代码。请看一下
  • 你的 &lt;jsp:setProperty property="*" name="userBean"/&gt; 在 &lt;jsp:useBean&gt; 标签之外,需要在里面。
  • 它现在在里面但仍然在servlet中出现空指针异常
  • 尝试在你的jsp中添加&lt;%@page import="com.iceman.bean.UserBean"%&gt;
  • 好吧,我在类属性中使用了完全限定名称,我还是这样做了,但错误仍然存​​在?你能看看我上面的servlet代码吗?我想一定是少了什么。
猜你喜欢
  • 1970-01-01
  • 2014-11-26
  • 2012-05-26
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 2011-09-06
  • 2013-01-21
  • 2011-11-11
相关资源
最近更新 更多