你的managerbean有点actionservlet的功能但不全是。
action中的返回是返回的通过actionMapping查找到的ActionForward对象,不是直接转向一个url。在struts中的所有控制都是在actionservlet中做的,这部分是封装好的,不必使用者管。
action和action在struts里可以说是没有任何关系的,除非你自己把它们关联起来简单来说struts就是通过它的actionservlet(就是在web.xml里配的那个servlet)把页面提交的数据封装成formbean然后交给action处理,action处理后返回一个ActionForward对象,此对象中有url信息,actionservlet通过此ActionForward对象中的url信息转到返回页面
这些信息都是在你的struts-config.xml里配的网上搜一下,再多找几个例子做一下就明白了

解决方案 »

  1.   

    还真谢谢yaray兄,小弟我受之有愧哦
      

  2.   

    我也才学struts20天,我觉得它主要是把mvc给规范化了,M的jsp就用各种标签来实现,不透露任何的逻辑代码,V主要由action来实现,其中action与action的交互由struts-config中的forward来实现,我觉得主要要用struts-config来实现控制是struts的精华,新手愚见,希望大家指正。
      

  3.   

    M: model:ActionForm / Data Object(使用后者属于非推荐用法)
    V: view: JSP
    C: controller: Struts's ActionServlet
    SL: simple Logic: 自定义的Struts Action
    BL: Business Logic:此部分可能由于未严格分层而被置于struts的Action中
    T: transaction: 事物处理(手动处理/框架处理[如:Spring]/容器处理[如:EJB],等)
    DAO: Data Access Operation:数据访问/操作(自定义DAO/持久性框架[如:Hibernate],等)
      

  4.   

    return mapping.findforward("");
    跳转至页面和其他action都可以用这个,这是标准用法啊,书里有写的
      

  5.   

    各位高手大哥好,请你们继续指点一下:
    我看了各位的回复,好是思考了一下,然后就动手弄了一下,可出现了这样的情况:
    (一.先是这样,运行后(路径:http://localhost:8083/testProject/login/login.jsp)但是没出现什么东西(login.jsp页面如下:
    <%@ page contentType="text/html; charset=GBK" %>
    <%@ 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" %>
    <html>
    <head>
    <title>
    login
    </title>
    </head>
    <body bgcolor="#ffffff">
    <h1 align="center">
        欢迎登录
    </h1>
    <hr />
    <form action="/testProject/loginAction.do">
    <table align="center" border="0">
      <tr>
        <td align="right">
          用户名
        </td>
        <td align="left">
          <html:text property="userName"/> 
          <html:errors property="userName"/>
        </td>
      </tr>
      <tr>
        <td align="right">
          密 码
        </td>
        <td align="left">
          <input type="password" name="password" />//由于此处的password标签不明白用什么,所以就没用标签了
          <html:errors property="password"/>
        </td>
      </tr>
    </table>
    <div align="center">
    <input type="submit" name="Submit" value="提交"/>
    <input type="reset" name="Reset" value="清除"/>
    </div>
    </form>
    </body>
    </html>

    (二.服务器的提示信息是:E:\Jb2005\jdk1.4\bin\javaw -classpath "E:\Jb2005\thirdparty\jakarta-tomcat-5.0.27\bin\bootstrap.jar;E:\Jb2005\jdk1.4\lib\tools.jar"  "-Dcatalina.home=E:/Jb2005/thirdparty/jakarta-tomcat-5.0.27"  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9c8e7df2fd37415:1734,suspend=y org.apache.catalina.startup.Bootstrap -config E:\java\testProject\Tomcat\conf\server8083.xml start 
    2006-9-7 15:52:28 org.apache.coyote.http11.Http11Protocol init信息: Initializing Coyote HTTP/1.1 on http-80832006-9-7 15:52:29 org.apache.catalina.startup.Catalina load信息: Initialization processed in 8360 ms2006-9-7 15:52:29 org.apache.catalina.core.StandardService start信息: Starting service Catalina2006-9-7 15:52:29 org.apache.catalina.core.StandardEngine start信息: Starting Servlet Engine: Apache Tomcat/5.0.272006-9-7 15:52:29 org.apache.catalina.core.StandardHost start信息: XML validation disabled2006-9-7 15:52:35 org.apache.struts.util.PropertyMessageResources <init>信息: Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true2006-9-7 15:52:35 org.apache.struts.util.PropertyMessageResources <init>信息: Initializing, config='org.apache.struts.action.ActionResources', returnNull=true2006-9-7 15:52:37 org.apache.struts.util.PropertyMessageResources <init>信息: Initializing, config='ApplicationResources', returnNull=true2006-9-7 15:52:38 org.apache.catalina.core.StandardHost getDeployer信息: Create Host deployer for direct deployment ( non-jmx ) 2006-9-7 15:52:38 org.apache.coyote.http11.Http11Protocol start信息: Starting Coyote HTTP/1.1 on http-80832006-9-7 15:52:39 org.apache.catalina.startup.Catalina start信息: Server startup in 10000 ms应是没错吧(想是想把所有代码都帖出来,就是怕各位看着多了就不想看而不帮我解答哦)
      

  6.   

    多谢,下面就是我的代码:
    (1.struts-config.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
    <struts-config>
    /**
    *下面的<data-sources>在我程序里面其实没用它,我用servser8083.xml代替了(不知道有没有问题)
    *
    /*
      <data-sources>
        <data-source type="org.apache.commons.dbcp.BasicDataSource">
          <set-property property="autoCommit" value="true"/>
          <set-property property="description" value="Oracle Data Source"/>
          <set-property property="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
          <set-property property="maxCount" value="100"/>
          <set-property property="minCount" value="20"/>
          <set-property property="user" value="system"/>
          <set-property property="password" value="sql"/>
          <set-property property="url" value="jdbc:oracle:thin:@localhost:1521:system"/>
        </data-source>
      </data-sources>
      <form-beans>
        <form-bean name="loginActionForm" type="roject.login.actionForm.loginActionForm" />
      </form-beans>
      <action-mappings>
        <action name="loginActionForm" path="/loginAction" scope="request" type="roject.login.action.loginAction">
          <forward name="success" path="/login/welcomeUserName.jsp" />
          <forward name="error" path="/login/errorUserName.jsp" />
          <forward name="fail" path="/login/failUserName.jsp" />
        </action>
      </action-mappings>
    </struts-config>(2.loginActionForm.java:
    package roject.login.actionForm;import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionMapping;
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionMessage;public class loginActionForm extends ActionForm {
        private String password;
        private String userName;
        private int role;
        private int id;    public void setRole(int role)
        {
            this.role = role;
        }    public int getRole()
        {
            return role;
        }    public int getId()
        {
            return id;
        }    public void setId(int id)
        {
            this.id = id;
        }    public String getPassword() {
            return password;
        }    public void setPassword(String password) {
            this.password = password;
        }    public void setUserName(String userName) {
            this.userName = userName;
        }    public String getUserName() {
            return userName;
        }    public ActionErrors validate(ActionMapping actionMapping,
                                     HttpServletRequest httpServletRequest) {
            ActionErrors errors = new ActionErrors();
            if(userName == null || userName.length() < 1)
            {
                errors.add("userName",new ActionMessage("用户名不能为空!"));
            }
            else
            {
                if(password == null)
                {
                    errors.add("password",new ActionMessage("密码不能为空!"));
                }
            }
                /** @todo: finish this method, this is just the skeleton.*/
            return errors;
        }    public void reset(ActionMapping actionMapping,
                          HttpServletRequest servletRequest) {
            password = null;
            userName = null;
        }
    }(3.managerLoginBean.java
    package roject.login.loginbean;import java.sql.*;
    import roject.login.actionForm.loginActionForm;public class managerLoginBean {
        private Connection con = null;
        private ResultSet rs = null;
        private PreparedStatement pstmt = null;
        private Statement stmt = null;    loginActionForm laf = null;    public managerLoginBean() {
        }    public void setConnection(Connection con)
        {
            this.con = con;
        }
    /**
    *下面方法是判断用户名
    /*
        public boolean judgeUserName(String userName)
        {
            boolean judgeName = false;
            try
            {
                String sql = "SELECT * FROM Z_USER WHERE USERNAME = ?";
                pstmt = con.prepareStatement(sql);
                pstmt.setString(1,userName);
                rs = pstmt.executeQuery();
                while(rs.next())
                {
                    laf = new loginActionForm();
                    laf.setUserName(rs.getString("userName"));
                    judgeName = true;
                }
            }
            catch (SQLException se)
            {
                se.printStackTrace();
            }
            finally
            {
                try
                {
                    if (rs != null)
                    {
                        rs.close();
                    }
                }
                catch (Exception ex2)
                {
                    ex2.printStackTrace();
                }
                try
                {
                    if (pstmt != null)
                    {
                        pstmt.close();
                    }
                }
                catch (Exception ex3)
                {
                    ex3.getStackTrace();
                }
            }
            return judgeName;
        }
    /**
    *下面方法是判断密码
    /*
        public boolean judgePassword(String userName,String password)
        {
            boolean judgePwd = false;
            try
            {
                String sql = "SELECT * FROM Z_USER WHERE USERNAME = ? AND USERPASSWORD = ?";
                pstmt = con.prepareStatement(sql);
                pstmt.setString(1,userName);
                pstmt.setString(2,password);
                rs = pstmt.executeQuery();
                while(rs.next())
                {
                    laf = new loginActionForm();
                    laf.setPassword(rs.getString("password"));
                    laf.setUserName(rs.getString("userName"));
                    judgePwd = true;
                }
            }
            catch (SQLException se)
            {
                se.printStackTrace();
            }
            finally
            {
                try
                {
                    if (rs != null)
                    {
                        rs.close();
                    }
                }
                catch (Exception ex2)
                {
                    ex2.printStackTrace();
                }
                try
                {
                    if (pstmt != null)
                    {
                        pstmt.close();
                    }
                }
                catch (Exception ex3)
                {
                    ex3.getStackTrace();
                }
            }
            return judgePwd;
        }    public loginActionForm getRole(String userName,String password)
        {
            try
            {
                String sql = "SELECT * FROM Z_USER WHERE USERNAME = ? AND USERPASSWORD = ?";
                pstmt = con.prepareStatement(sql);
                pstmt.setString(1,userName);
                pstmt.setString(2,password);
                rs = pstmt.executeQuery();
                while(rs.next())
                {
                    laf = new loginActionForm();
                    laf.setUserName(rs.getString("userName"));
                    laf.setRole(rs.getInt("role"));
                }
            }
            catch (SQLException se)
            {
                se.printStackTrace();
            }
            finally
            {
                try
                {
                    if (rs != null)
                    {
                        rs.close();
                    }
                }
                catch (Exception ex2)
                {
                    ex2.printStackTrace();
                }
                try
                {
                    if (pstmt != null)
                    {
                        pstmt.close();
                    }
                    if(con != null)
                    {
                        con.close();
                    }
                }
                catch (Exception ex3)
                {
                    ex3.getStackTrace();
                }
            }
            return laf;
        }
    }
      

  7.   

    (4.loginAction.java
    package roject.login.action;import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionForm;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.ActionForward;
    import roject.login.actionForm.loginActionForm;
    import org.apache.struts.action.Action;
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.SQLException;
    import roject.login.loginbean.managerLoginBean;public class loginAction extends Action {
        private DataSource ds = null;
        private Connection con = null;    managerLoginBean mlb = new managerLoginBean();    public ActionForward execute(ActionMapping actionMapping,
                                     ActionForm actionForm,
                                     HttpServletRequest servletRequest,
                                     HttpServletResponse servletResponse)
        {
             loginActionForm loginActionForm = (loginActionForm) actionForm;
             String userName = (String)loginActionForm.getUserName();
             String password = loginActionForm.getPassword().toString();         boolean judgeName;
             boolean judgePwd;
             try
             {
                 ds = (DataSource)servlet.getServletContext().getAttribute("ds");
                 con = ds.getConnection();
                 mlb.setConnection(con);
                 judgeName = mlb.judgeUserName(userName);
                 if(judgeName == false)
                 {
                     return actionMapping.findForward("error");
                 }
                 else
                 {
                     judgePwd = mlb.judgePassword(userName,password);
                     if(judgePwd == false)
                     {
                         return actionMapping.findForward("fail");
                     }
                     else
                     {
                         loginActionForm = mlb.getRole(userName,password);
                         servletRequest.removeAttribute("userName");
                         servletRequest.setAttribute("userName",loginActionForm.getUserName());
                         if(loginActionForm.getRole() == 1)
                         {
                             return actionMapping.findForward("success");
                         }
                     }
                 }
             }
             catch(SQLException sqle)
             {
                 getServlet().log("Connection.process",sqle);
             }
             finally
             {
                 try
                 {
                     con.close();
                 }
                 catch(SQLException e)
                 {
                     getServlet().log("Connection.close",e);
                 }
             }
            return null;
        }
    }
      

  8.   

    dimg_ren(vanish)你真是个牛人,学struts学了20天?呵呵,历害
      

  9.   

    赫赫,楼主兄弟,我也是刚从上个星期才开始学struts的,也像你一样摆弄了这样的简单东西,几经波折也终于搞出来了,看你的问题,感觉你对Action,ActionForm和ActionForward这几者关系不是特别清楚,当然,不是说作用上的不清楚,其实struts很关键的一个东西就是struts-config文件,你应该多领悟一下那个里面的东西,上面说的这些东西之间的关系是通过这个文件完成的,你的问题很可能是对配置文件理解不够造成的!(因为觉得你代码写的太长不够清晰没有看,呵呵)
      

  10.   

    首先,应该清楚,STRUTS是通过XML对结构及关联进行配置的,而JBUILDER对STRUTS的整合并不好,很多XML要手工添加,如果要学习STRUTS最好使用ECLIPSE,很多东西都可以自动生成,你回头再去看生成的东西就会清楚很多
    其次,STRUTS框架中,所有跳转都使用的是 RETURN MAPPING,FINDFORWARD("xxxxxxxx")不需要跳转的可以用return null,
    从代码中可以看出,楼主对MVC的理解有点问题,怎么要在STRUTS中生成CONNECTION?这样不是违背的降低偶合的初衷?比较好的做法是,JSP--ACTION---LOGIC---DAO1.actionform : 对JSP的FORM的封装,即,将你的页面输入信息封装到类中,这样就将你原本的REQUEST.GETPRAMETER()替换为GET、SET了2.action里面怎么返回页面, RETURN MAPPING.FINDFORWARD("xxxxxxxx")不需要跳转的可以用return null3.action与action之间又是怎么来关联,同上跳转使用的是别名,即
          <forward name="success" path="/login/welcomeUserName.jsp" />
          <forward name="error" path="/login/errorUserName.jsp" />
          <forward name="fail" path="/login/failUserName.jsp" />
    中的SUCCESS、ERROR、FAIL这几个,而不是PATH的URL
      

  11.   

    过了一天多才登录进来看看,真的让我很高兴,谢谢各位的热心帮助,在各位的热心帮助下,我相信我会学好这个struts,请容许几天之后再给分吧.再次让我说声:谢谢你们.
      

  12.   

    今天我们才开始学习struts,看了各位的信息感觉有点思路了,谢谢各位~!