你的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里配的网上搜一下,再多找几个例子做一下就明白了
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里配的网上搜一下,再多找几个例子做一下就明白了
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],等)
跳转至页面和其他action都可以用这个,这是标准用法啊,书里有写的
我看了各位的回复,好是思考了一下,然后就动手弄了一下,可出现了这样的情况:
(一.先是这样,运行后(路径: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应是没错吧(想是想把所有代码都帖出来,就是怕各位看着多了就不想看而不帮我解答哦)
(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;
}
}
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;
}
}
其次,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