当前页面: 开发资料首页 → J2EE 专题 → 在struts中的跳转后JSP页面request中的值如何读取? 
在struts中的跳转后JSP页面request中的值如何读取? 
摘要: 在struts中的跳转后JSP页面request中的值如何读取?  
登录页面Login把用户提交
<%@ page contentType="text/html; charset=GBK" language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
  <head>
  
  用户登录页面
  
  
  </head>
  <body bgcolor="#ffffff">
  
    用户登录页面
    
      
        姓名:
        
        密码:
        
        
        
      
  </body>
在FormBean中(LoginForm.java)设好相同的属性(省略方法):
    private String userName;
    private String password;
在Action中(LoginAction.java)的execute方法内容:
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws Exception{
        LoginForm loginForm = (LoginForm) form;
        String userName=loginForm.getUserName();
        String password=loginForm.getPassword();
        LoginDAO dao=new LoginDAO();
        User user=new User(userName,password);
        //判断是否有该用户
        if(dao.login(userName,password)){
            request.setAttribute("userbean",user);  //在这设置了提交的对象,为什么在跳转后的页面读取不出来??
            return(mapping.findForward("Success"));
        }else{
            return(mapping.findForward("Failure"));
        }
    }
其他的Bean有:
LoginDAO.java:
package loginstruts;
import java.sql.*;
public class LoginDAO {
    Connection conn=null;
    public LoginDAO() {
    }
    //连接数据库
    public Connection getConnectionDB(){
        String strDB="sun.jdbc.odbc.JdbcOdbcDriver";
        String strUrl="jdbc:odbc:login";
        try {
            Class.forName(strDB);
            conn=DriverManager.getConnection(strUrl);
            System.out.println("connetin seccess......");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return conn;
    }
    //关闭数据库
    public void closeConnectionDB(){
        try {
            conn.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
    //判断是否有传入的用户
    public boolean login(String u,String p){
        User user=new User(u,p);
        String strSql="select * from user";
        getConnectionDB();
        try {
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(strSql);
            while(rs.next()){
                user.setPassword(rs.getString("Password"));
                user.setUserName(rs.getString("UserName"));
                if(u.equals(user.getUserName()) || (p.equals(user.getPassword()))){
                    rs.close();
                    st.close();
                    closeConnectionDB();
                    return true;
                }
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return false;
    }
}
User.java:
package loginstruts;
public class User {
    private String userName;
    private String password;
    public User(){
    }
    public User(String name,String psw) {
        this.userName=name;
        this.password=psw;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getUserName() {
        return userName;
    }
    public String getPassword() {
        return password;
    }
}
struts-config.xml中的配置(部分):
  <form-beans>
    <form-bean name="LoginForm" type="loginstruts.LoginForm"/>
  </form-beans>
  
                   type      = "loginstruts.LoginAction"
               name      = "LoginForm"
               scope     = "request"
               input     = "/Login.jsp">
      
      
    
  
最后我在跳转后的Welcome.jsp页面中就是读不出request中的数据出来,为什么呢?
<%@ page contentType="text/html; charset=GBK" language="java" %>
<%@ page import="loginstruts.*" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
  <head>
    用户登录成功  
  
  </head>
  
  <body bgcolor="#ffffff">
  
  
    登录成功
    
    
      Hello,
      !
    
    
  </body>
也试过在Welcome.jsp中用如下代码读出来的request.getAttribute("userbean")中的值为null....为什么呢?是不是哪里错了?求教...
  <%
  User tb=(User)request.getAttribute("userbean");
  String name=tb.getUserName();
  out.println(name);
  %>
改了一下Action(LoginAction.java)的execute方法内容,在方法中可以正确读出来:
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws Exception{
        LoginForm loginForm = (LoginForm) form;
        String userName=loginForm.getUserName();
        String password=loginForm.getPassword();
        LoginDAO dao=new LoginDAO();
        User user=new User(userName,password);
        if(dao.login(userName,password)){
            request.setAttribute("userbean",user);  //在这设置了提交的对象,为什么在跳转后的页面读取不出来??
            User user1=(User)request.getAttribute("userbean");
            System.out.println(user1.getUserName());  //在这里可以正确读出来用户名.
            return(mapping.findForward("Success"));
        }else{
            return(mapping.findForward("Failure"));
        }
    }
跳转后就不行了,不是这样提交和读取的吗??求教..........
rs.close();
st.close();
closeConnectionDB();
---------------------------
把这几个去掉试试!
                   type      = "loginstruts.LoginAction"
               name      = "LoginForm"
               scope     = "request"
               input     = "/Login.jsp">
      
      
    
  
这段改成:
                   type      = "loginstruts.LoginAction"
               name      = "LoginForm"
               scope     = "request"
               input     = "/Login.jsp">
            
    
  
      Hello,
      !
    
    
你的是个对象,直接这样输出是不行的,需要这样写
    
      Hello,
      
      !
    
    
   当然前提你的User user=new User(userName,password);必须是返回了一个user对象,而且不为空,否则就是显示不出来。
重定向改为false,后会出现方法找不到的错误:
javax.servlet.ServletException: No getter method for property name of bean userbean
好像是重定向的问题,我再试试看...
不是什么重定向,是你的模型对象里面没有get方法。。。
Request 只能保存字符串  保存在 Session 里吧
!
测试了,首先的确必须把struts-config.xml中跳转中的redirect改为"false",才能够在跳转页获取值。我是在Welcome.jsp中用java语句获取得的。
所以,我下面这段写法也是写错了(上面的错误就是出现在这里),另外我用tcmis的写法也不行。按尽量在jsp少用java语句的原则,应该如何修改。
    
      Hello,
      !
    
    
Request 只能保存字符串  保存在 Session 里吧
错了,request是可以存对象的。
你可以去查查:reqwuest.setAttribute(String,Object);
我狂晕,原来是自己头晕搞错了,property="name"这里,自己在User中用户名属性是用userName,不是name,怪不得读不出来。。。改为:
    
      Hello,
      !