Servlet中调用JavaBean的问题,困惑很久了……

Caesary 2007-02-10 11:18:02
我在JSP页中用<jsp:useBean id="loginInfo" scope="***" class="beans.LoginBean">创建一个javaBean的实例,想在Servlet中取得这一对象。然而,如果我在JSP中设置的scope为“request”,在Servlet中调用request.getAttribute("loginInfo")得到的就是一个null;如果JSP中的scope为“session”,在Servlet中调用request.getSession().getAttribute("loginInfo")倒是能得到一个LoginBean的对象,但里边的属性都被置空了(如果是数值就是0),似乎是重新创建了这么一个对象。
相反,我在Servlet中创建一个bean,然后用request.getSession().setAttribute( "loginInfo", loginInfo ),接着将请求发到另一个JSP,JSP可以正确地接收数据,这是为什么?请高人指点,谢谢!!!
...全文
670 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Caesary 2007-02-23
  • 打赏
  • 举报
回复
哦,了解了,十分感谢!!!!
csrcom 2007-02-23
  • 打赏
  • 举报
回复
如果提交给servlet,是在servlet中set这些属性。
那么形成表单的页面的jsp文件中就没有必要用javabean。

javabean的用法是在提交以后的那个页面,而非形成表单的页面,除非要显示或者计算用途

Caesary 2007-02-23
  • 打赏
  • 举报
回复
啊!
这样啊……
那照你的意思,在一个jsp页面中将一个bean传递给servlet,必须自己在jsp中调用set方法了?
csrcom 2007-02-23
  • 打赏
  • 举报
回复
jsp页面中javabean的属性设置是依靠 jsp engine帮你实现的。
如果表单提交到了servlet,意味着你就失去了jsp engine这个优势,需要自己set这些属性。
Caesary 2007-02-23
  • 打赏
  • 举报
回复
你的意思是到servlet中再用request.getParameter()去获得各个属性?
这样做我也知道,我就是想利用javaBean的便利特点,而且,在jsp中,是不需要调用bean的set方法给bean中的属性赋值的,只要前面有<jsp:setProperty name="loginInfo" property="*"/>,并且表单中各个属性的名字和bean中各属性的名字一致,就可以自动完成赋值的操作,这一点,我将servlet换成jsp页,就可以实现,可在servlet中就是不行……
csrcom 2007-02-23
  • 打赏
  • 举报
回复

<form action="/BeanTest/LoginServlet" method="post">
<input type="text" name="userNo"/>
<input type="password" name="password"/>
<input type="submit" value="submit"/>

</form>
你把表单提交给了servlet。根本就用不着javabean。
csrcom 2007-02-23
  • 打赏
  • 举报
回复
你什么时候对这个bean的userNo、password 进行set呢?那把你的代码贴出来。
Caesary 2007-02-23
  • 打赏
  • 举报
回复
可我在上面的写的bean的scope就是session啊,为什么在servlet中通过request.getSession().setAttribute( "loginInfo", loginInfo ) 得到的对象,各个属性都为null呢?
我的想法就是在jsp页面中获取一些信息,然后放到相应的bean里,然后在servlet中获得这个bean的对象,进行处理,应该怎么做呢?
csrcom 2007-02-23
  • 打赏
  • 举报
回复
jsp的编译完以后就是servlet,显示完成那个jsp页面完了以后,就已经是一次request了。因此在jsp中创建一个scope="request"的bean只能在 jsp中、或者是jsp通过传递方式给其他对象才能用这个bean

即使你jsp中提交的表单给另外一个servlet的,那已经是第二次request,而这次request 的目标是 LoginServlet。

request.getSession().setAttribute( "loginInfo", loginInfo ) 这个他的scope是session
csrcom 2007-02-23
  • 打赏
  • 举报
回复
其实你根本没搞清楚什么是request

还有scope的一些范围概念

还有jsp到底是啥也需要搞清楚
Caesary 2007-02-23
  • 打赏
  • 举报
回复
有高手能指点一下吗?
困惑好长时间了,帮帮忙吧……
huweiwdai 2007-02-13
  • 打赏
  • 举报
回复
可以那样拿值,放值没试过
可能就是那个原因
Caesary 2007-02-13
  • 打赏
  • 举报
回复
没有人知道吗?
高手帮帮忙吧……
Caesary 2007-02-12
  • 打赏
  • 举报
回复
有高手能指点一下么?

自己顶起来……
Caesary 2007-02-11
  • 打赏
  • 举报
回复
JSP的代码:
<jsp:useBean id="loginInfo" scope="session" class="beans.NewBean">
<jsp:setProperty name="loginInfo" property="*"/>
</jsp:useBean>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="/BeanTest/LoginServlet" method="post">
<input type="text" name="userNo"/>
<input type="password" name="password"/>
<input type="submit" value="submit"/>

</form>
</body>
</html>

bean的代码:
package beans;

import java.beans.*;
import java.io.Serializable;

public class NewBean implements Serializable {

private int userNo;
private String password;

public void setUserNo( int userNo ){
this.userNo = userNo;
}

public int getUserNo(){
return userNo;
}

public void setPassword( String password ){
this.password = password;
}

public String getPassword(){
return password;
}

}

Servlet的代码:
package myservlet;

import beans.NewBean;
import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class LoginServlet extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
NewBean loginInfo = (NewBean)(request.getSession().getAttribute("loginInfo"));
PrintWriter out = response.getWriter();
out.println( loginInfo.getPassword() );

}

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

public String getServletInfo() {
return "Short description";
}
}
interpb 2007-02-11
  • 打赏
  • 举报
回复
看看你的代码吧

Caesary 2007-02-11
  • 打赏
  • 举报
回复
我在jsp中已经将bean的各项属性赋值了,然后存到session中,结果在servlet中取得后,各项属性都为null或0了……
interpb 2007-02-10
  • 打赏
  • 举报
回复
不能接受到

发到servlet的时候会 重新产生一个request 对象

还有

session 中的数据不会丢失

你可以试着 打印出
这个bean的hashcode 看有没有改变




Caesary 2007-02-10
  • 打赏
  • 举报
回复
对啊,xiangbo520(充栋汗牛) 说的是,我的servlet是紧跟在那个JSP页面后的,照这种理解,应该是可以接收到的啊~
xiangbo520 2007-02-10
  • 打赏
  • 举报
回复
楼上的,
如果我在JSP中直接request给那个servlet,这应该算是单个请求吧,不知道这时候时候能接收到??
加载更多回复(2)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧