在servlet中访问请求范围的bean

时间:2015-12-26 05:56:21

标签: java jsp servlets

我有一个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>

Servler

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());
    }

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

我在哪里做错了?

2 个答案:

答案 0 :(得分:2)

这只是因为呈现请求和发布请求是不同的请求:

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

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

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

答案 1 :(得分:0)

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

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

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

然后您需要将行<input type="text" value="${userBean.userName}"/>更改为<input type="text" name="one of field names as per your UserBean class "/>

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

关于NULLrequest的bean,请参阅 Jan Zyka 的回答,问题为jsp useBean is NULL by getAttribute by servlet

希望它有所帮助!!