一个Login.jsp登陆的简单程序逻辑,我找不出,哪位大虾给偶指出来分数全给一个人,不够再加
这个问题折腾了我好几天了,大虾出手救救我啊!!!别看代码多,懂struts的大虾一下就该看出来的,不用看详细的代码,只要看几行关键的程序转移逻辑代码就可以了的。。。。摆脱啊!!!(后面很多只是附上的文件代码,不用看的,看看我的前4步)
我打开一个网上下载的程序,从浏览器中打开首页,然后根据首页上的"Log in"标签可以转到相应的登陆页面Login.jsp,但我看里面代码时,怎么看它代码的转移的路径不会到达Login.jsp啊,我把相关的各个转移的文件列出来,大虾给偶看看到底是我哪里看错了啊???
1、首页上有一个"Log in",它指向的地址是http://localhost:8080/.../.../WorklistAction.jsp,我打开WorklistAction.jsp文件如下:
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<%@ taglib uri="/WEB-INF/fmt.tld" prefix="fmt" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>
<c:redirect url="/protected/worklist.action"/>
<c:redirect url="/protected/worklist.action"/>
-------------------------------
2、于是我在struts-config.xml中找到如下语句:
<action path="/protected/worklist"
type="hero.struts.actions.WorklistAction"
scope="request"
validate="false">
<forward name="worklist" path="worklistDef"/>
</action>
----------------------------
3、接下来,我打开WorklistAction.java如下:
package hero.struts.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import java.util.*;
import hero.struts.activity.*;
import hero.interfaces.*;
import hero.util.*;
public class WorklistAction extends AbstStrutsActionBase
{
public boolean authenticate(String username, String password)
{
return(true);
}
public ActionForward perform(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
ActionForward actionForward = mapping.findForward(WORKLIST);
// Create the container for any errors that occur
ActionErrors errors = new ActionErrors();
HttpSession session = request.getSession();
try
{
Vector workList = new Vector();
hero.interfaces.UserSessionLocalHome userh = (UserSessionLocalHome)hero.interfaces.UserSessionUtil.getLocalHome();
hero.interfaces.UserSessionLocal usersession = userh.create();
hero.interfaces.ProjectSessionLocalHome projecth = (ProjectSessionLocalHome)hero.interfaces.ProjectSessionUtil.getLocalHome();
request.getSession(true).setAttribute("username", usersession.getUser());
request.getSession(true).setAttribute("password", usersession.getUserPassword());
Collection projects = usersession.getProjectList();
Iterator i = projects.iterator();
while (i.hasNext())
{
Hashtable todoListReady = new Hashtable();
Hashtable todoListAnti = new Hashtable();
Hashtable activityListAnti = new Hashtable();
Hashtable activityListExec = new Hashtable();
String currentProject = ((hero.interfaces.BnProjectLightValue)i.next()).getName();
Vector todoListNames = new Vector(usersession.getToDoList(currentProject));
Vector activityListNames = new Vector(usersession.getActivityList(currentProject));
if (todoListNames.size() != 0 || activityListNames.size() != 0)
{
try{
Worklist wl = new Worklist();
wl.setProjectName(currentProject);
hero.interfaces.ProjectSessionLocal projectsession = projecth.create();
projectsession.initProject(currentProject);
int j=0;
while (j<todoListNames.size())
{
StrutsNodeValue stnt = new StrutsNodeValue();
stnt.setProjectName(currentProject);
stnt.setName(((hero.interfaces.BnNodeValue)projectsession.getNodeValue((String)todoListNames.elementAt(j))).getName());
if (((hero.interfaces.BnNodeValue)projectsession.getNodeValue((String)todoListNames.elementAt(j))).getState() == hero.interfaces.Constants.Nd.READY)
todoListReady.put((String)todoListNames.elementAt(j),stnt);
else
todoListAnti.put((String)todoListNames.elementAt(j),stnt);
j++;
}
j=0;
while (j<activityListNames.size())
{
StrutsNodeValue stna = new StrutsNodeValue();
stna.setProjectName(currentProject);
stna.setName(((hero.interfaces.BnNodeValue)projectsession.getNodeValue((String)activityListNames.elementAt(j))).getName());
if (((hero.interfaces.BnNodeValue)projectsession.getNodeValue((String)activityListNames.elementAt(j))).getState() == hero.interfaces.Constants.Nd.ANTICIPATING)
activityListAnti.put((String)activityListNames.elementAt(j),stna);
else
activityListExec.put((String)activityListNames.elementAt(j),stna);
j++;
}
wl.setTodoListReady(todoListReady);
wl.setTodoListAnti(todoListAnti);
wl.setActivityListAnti(activityListAnti);
wl.setActivityListExec(activityListExec);
workList.add(wl);
}catch(Exception ex){};
}
}
request.getSession(true).setAttribute("worklist", workList);
request.getSession(true).setAttribute("worklistSize", Long.toString(workList.size()));
request.getSession(true).setAttribute("wsname",null);
actionForward = mapping.findForward(WORKLIST);
}catch(Exception e){errors.add("activity_error", new ActionError("error.deadline.mismatch"));}
if (!errors.empty()) {
saveErrors(request, errors);
}
// Forward control to the appropriate URI as determined by the action.
return (actionForward);
}
}
-------------------------
4、接下来,我又回到第2步的struts-config.xml里,根据<forward name="worklist" path="worklistDef"/>,在tileDefinitions.xml配置文件里找到如下语句:
<definition name="worklistDef" path="/protected/WorklistLayout.jsp">
<put name="body" value="/protected/Worklist.jsp"/>
<put name="header" value="/protected/Header.jsp"/>
</definition>
--------------------------------
--------------------------------
接下来根据这个tildDefinitions.xml配置文件的这段话应该好像根本不会到达想去的Login.jsp文件(目录下是有这个文件的,且是登陆界面),但在浏览器上运行是可以到达Login.jsp文件的,按照程序的逻辑我看不出怎么会到达Login.jsp页面的?!不明白,这里明明是跳到Worklist.jsp文件去执行嘛?!!!而Worklist.jsp文件执行的是商品的罗列,跟Login.jsp文件毫无瓜葛啊,不明白!!!
(我附上Worklist.jsp文件和Login.jsp文件)