struts_login实例利用struts实现登录功能,在myeclipse中新建项目,项目名struts_login
第一步:向WEB-INF/lib,文件夹下加入struts1.x包
第二步:配置web.xml
可以在struts1.x中找到实例项目的配置,然后复制即可。
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startuup>2</load-on-startuup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
第三步:在/WEB-INF/,目录下新建struts-config.xml的xml文件,创建的时候使用struts-config.xml模板新建,暂时不填写struts-config.xml的配置信息
第四步:分析利用struts实现登录的流程,并实现代码
1,用户在登录页面填写了登录信息,然后提交登录请求
<body>
<h1>登录信息</h1>
<form action="login" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="text" name="password"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
2,请求到达前段控制器ActionServlet,然后ActionServlet把请求的url与解析的配置信息对比,得到相对应的Action。(在此需要说明的是,struts-config.xml的配置信息在ActionServlet初始化的时候就已经解析了。)
所以在struts-config.xml中加入action应该接收的url地址,其中action的path必须以"/"开头,故设置path="/login",同时要通过path得到相应处理的Action处理类,在此新建login处理类LoginAction,该类继承Action,并放置在com.lxh.struts包下,所以在src下添加包,并在包下添加类,并设置action的type值,type="com.lxh.struts.LoginAction"
<struts-config>
<form-beans>
<form-bean name="" type=""/>
</form-beans>
<action-mappings>
<action path="/login"
type="com.lxh.struts.LoginAction"
name=""
parameter="methode"
scope="request"
validate="true"
>
<forward name="success" path="" />
<forward name="failure" path="" />
</action>
</action-mappings>
</struts-config>
3,在Action的处理类LoginAction中添加处理方法
选中LoginAction字符串,右键source-->override/implement method -->execute方法中包含httpServletRequest参数的方法
4,在LoginAction中调用模型对象来处理封装在ActionForm对象中的数据。
首先获取封装在ActionForm对象中的数据,而ActionForm是自动封装了表单中的数据,所以添加一个继承了ActionForm的类,该类中只有表单字段,并且含有获取与设置字段的方法
package com.lxh.struts;
import org.apache.struts.action.ActionForm;
public class LoginActionForm extends ActionForm {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
System.out.println("----ActionForm开始收集数据时就执行该方法----");
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
System.out.println("----在服务器上进行表单验证----");
return super.validate(mapping, request);
}
}
而ActionForm自动获取表单数据的功能是通过struts-config.xml的配置实现的,所以在struts-config.xml中要加入ActionForm的配置信息,form-beans,然后form-beans的name要在action的name中注册。
<struts-config>
<form-beans>
<form-bean name="LoginActionForm" type="com.lxh.struts.LoginActionForm"/>
</form-beans>
<action-mappings>
<action path="/login"
type="com.lxh.struts.LoginAction"
name="LoginActionForm"
parameter="methode"
scope="request"
validate="true"
>
<forward name="success" path="" />
<forward name="failure" path="" />
</action>
</action-mappings>
</struts-config>
然后在LoginAction中获取表单数据
LoginActionForm laf=(LoginActionForm)form;
String username=laf.getUsername();
String password=laf.getPassword();
之后调用模型处理表单数据,再次模型应该为处理username和password数据的方法,那么新建一个模型类,该模型类在包com.lxh.model下
package com.lxh.model;
public class CheckLogin {
public boolean check(String username,String password)
{
if(username.equals("jin")&&password.equals("123"))
{
return true;
}else
{
return false;
}
}
}
调用模型处理数据,并返回处理结果
CheckLogin cl=new CheckLogin();
boolean flag=cl.check(username, password);
根据处理结果返回跳转的页面,跳转的页面是通过ActionMapping对象的findForward()方法得到
if(flag)
{
return mapping.findForward("success");
}else
{
return mapping.findForward("failure");
}
因为ActionMapping对象封装了struts-config.xml文件中的信息,所以在struts-config.xml中存在页面跳转信息forward。假设成功则进入LoginSucess.jsp页面,失败则进入Loginerr.jsp页面,那么添加LoginSucess.jsp页面和添加Loginerr.jsp页面。
<struts-config>
<form-beans>
<form-bean name="LoginActionForm" type="com.lxh.struts.LoginActionForm"/>
</form-beans>
<action-mappings>
<action path="/login"
type="com.lxh.struts.LoginAction"
name="LoginActionForm"
parameter="methode"
scope="request"
validate="true"
>
<forward name="success" path="/LoginSucess.jsp" />
<forward name="failure" path="/Loginerr.jsp" />
</action>
</action-mappings>
</struts-config>