login.jsp 登陆页面
<html:form action="/login" > 帐号:<html:text property="userName"/> <html:errors property="userName"/><br/> 密码:<html:password property="userPassword"/> <html:errors property="userPassword"/> <html:submit value="登录"/> </html:form>
success.jsp 登陆成功
<body> <center> 帐号:${loginBean.userName }<br/> 密码:${loginBean.userPassword } </center> </body>
fail.jsp 登陆失败页面
<body> 您的帐号和密码有误! </body>
LoginAction.java
public class LoginAction extends Action{ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginForm logFor=(LoginForm)form; UserManager um=new UserManager(); boolean flag=um.userLogin(logFor.getUserName(),logFor.getUserPassword()); String page="fail"; if(flag){ page="success"; } return mapping.findForward(page); } }
UserManager.java
public class UserManager { public boolean userLogin(String userName,String userPassword){ boolean flag=false; if("admin".equals(userName)&&"admin".equals(userPassword)){ flag=true; } return flag; } }
LoginForm.java
public class LoginForm extends ActionForm{ private String userName; private String userPassword; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } }
struts-config.xml
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <data-sources /> <form-beans> <form-bean name="loginForm" type="com.login.LoginForm"></form-bean> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings> <action path="/login" attribute="loginBean" input="/login.jsp" name="loginForm" scope="request" type="com.login.LoginAction"> <forward name="success" path="/success.jsp"></forward> <forward name="fail" path="/fail.jsp"></forward> </action> </action-mappings> <message-resources parameter="com.struts.ApplicationResources"></message-resources> </struts-config>
<action>标签中的属性含义描述如下:
1. name:表示ActionForm的名称。也就是<form-bean>标签中的name属性的值。
2. path:表示Struts动作,必须以“/”开头。
3. scope:表示ActionForm类的对象实例(在本例中是LoginForm类的对
象实例)保存的范围。这个属性值只能取request和session。默认值是session。
如果scope的值为request,表示将LoginForm类的对象实例以LoginForm作为键值保存到了request的属性中。
如果scope的值为session,表示不将LoginForm类的对象实例保存到request的属性中。
但不管scope的值是request还是session。Struts都会将LoginForm类的对象实例保存到session的属性中。
4. type:表示LoginAction类的全名。
5. input:表示如果客户端提交的数据未通过简单验证后要跳转到的页面,也就是在
LoginForm类的validate方法中返回的ActionErrors对象中含有错误描述信息。
Struts会自动跳转到input属性所指的JSP页面。
<action>标签中的子标签<forward>定义了可以在动作类(在本例中就是LoginAction类)中读取的forward页的URL。
一个请求的整个流程
util.RequestUtils - Get module name for path /login.do
util.RequestUtils - Module name found: default
action.RequestProcessor - Processing a 'POST' for path '/login'
util.RequestUtils - Looking for ActionForm bean instance in scope 'request' under attribute key 'loginBean'
util.RequestUtils - Creating new ActionForm instance of type 'com.login.LoginForm'
util.RequestUtils - --> com.login.LoginForm@d9cbcb
action.RequestProcessor - Storing ActionForm bean instance in scope 'request' under attribute key 'loginBean'
action.RequestProcessor - Populating bean properties from this request
beanutils.BeanUtils - BeanUtils.populate(com.login.LoginForm@d9cbcb, {userName=[Ljava.lang.String;@d2b64e,
userPassword=[Ljava.lang.String;@1bef1ac})
beanutils.BeanUtils - setProperty(com.login.LoginForm@d9cbcb, userName, [admin])
beanutils.ConvertUtils - Convert string 'admin' to class 'java.lang.String'
beanutils.ConvertUtils - Using converter org.apache.commons.beanutils.converters.StringConverter@9e8c34
beanutils.BeanUtils - setProperty(com.login.LoginForm@d9cbcb, userPassword, [admin])
beanutils.ConvertUtils - Convert string 'admin' to class 'java.lang.String'
beanutils.ConvertUtils - Using converter org.apache.commons.beanutils.converters.StringConverter@9e8c34
action.RequestProcessor - Validating input form properties
action.RequestProcessor - No errors detected, accepting input
action.RequestProcessor - Looking for Action instance for class com.login.LoginAction
action.RequestProcessor - Returning existing Action instance
action.RequestProcessor - processForwardConfig(ForwardConfig
[name=success,path=/success.jsp,redirect=false,contextRelative=false])
[localhost].[/Struts1] - servletPath=/success.jsp, pathInfo=null, queryString=null, name=null
[localhost].[/Struts1] - Path Based Forward
servlet.JspServlet - JspEngine --> /success.jsp
servlet.JspServlet - ServletPath: /success.jsp
servlet.JspServlet - PathInfo: null
servlet.JspServlet - RealPath: E:\EXPL\tomcat5.5\webapps\Struts1\success.jsp
servlet.JspServlet - RequestURI: /Struts1/success.jsp
servlet.JspServlet - QueryString: null
servlet.JspServlet - Request Params:
servlet.JspServlet - userName = admin
servlet.JspServlet - userPassword = admin