Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42396
  • 博文数量: 20
  • 博客积分: 850
  • 博客等级: 准尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-05 22:14
文章分类

全部博文(20)

文章存档

2011年(1)

2009年(12)

2008年(7)

我的朋友

分类:

2009-02-19 16:37:07

(1)安装与配置
    1 下载 在其中有一个all版本
    2 解压后有四个目录 apps docs lib src
    3 在netbeans中本次没有使用程序提供的struts支持功能,而是手工完成。将lib目录中的所有文件拷贝到项目中WEB-INF的lib目录下。(但是貌似是失败的,netbeans的库管理我一直有点晕,好像还是要在项目中的库里引入struts的jar包们)
    4 解压apps中的blank空项目,将其中的web.xml里关于actionServlet的内容拷贝到项目中的web.xml里,对其配置。
    5 将apps中的struts-config.xml拷贝到项目的web.xml中。将此xml中的内容修改,删除无用的注释,只保留dtd的约束和标签。

(2) 用户登陆程序,测试struts的搭建
    1 创建登陆页面login.jsp loginSuccess.jsp loginerror.jsp
    2 对action 和 actionForm 进行配制。actionForm是用于属性收集,其方法名需要按照javabean的命名规范。这里可以给actionform中的属性定义不同的数据类型,actionform收集的时候自动会进行数据类型的转换。将action 和 actionForm分别命名,并且继承org.apache.struts.action.action(actionForm)。action_login需要重写关于http的execute方法。其中获得的actionForm就是之前的actionForm的对象,可以直接从中获得属性而不必通过request。
    3 在action中对于属性处理并且转向VIEW。转向时使用execute中参数中的mapping。mapping中记录很多信息,调用mapping的findForward方法传递进去关于转向VIEW的字符串信息,由struts进行转向。

(3) 进行struts-config.xml的配置
    1 首先针对actionForm进行配置。在标签中添加,其中name为名字,type为所对应的类名。
    2 在添加对action进行配置,其中属性path(访问路径,这里配置的时候不需要加.do,乃是截取.do之前的路径。例如:/login) type(action的类名) name(action对的actionForm的name)  scope(建议为request)
    3 action的转向信息在的标签中添加,每一个forward对应一个转向信息。属性name(转向的名称) path(对应的实际路径)。

(4) ActionForm的reset方法和validata方法
    1 reset方法用于初始化,每次调用表单时都会调用该方法。 validata方法用于对actionform的表单内容进行服务器端的验证。
    2 validata原则是对表单格式验证,不涉及访问数据库。
    3 validata方法返回一个actionerror的对象,该对象内部可以包含关于表单的错误信息。一切验证正常则返回null。
    4 validata方法默认是自动执行的。在struts-config.xml中在标签中的属性参数validata进行配置,默认true,设置为false时该方法就不进行执行。

(5) 建立LoginManager进行连接数据库验证,并且建立相应异常。
    1 建立针对username与password错误的两个异常。分别继承runtimeException(也可以Exception)。
    2 建立LoginManager类,并且建立为单例。在其中建立方法login来进行验证。(不建议直接将actionform直接传递给login方法)
    3 在login中若验证失败,则抛出已经建立好的相应的异常。
    4 在action中执行LoginManager.getInstance().login(参数),并捕获两个对应的异常。在try的正常执行中转向成功页面,在异常处理中转向错误页面。

相关代码如下:



import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class Action_Login extends org.apache.struts.action.Action{

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        ActionForm_Login afl = (ActionForm_Login)form;
        String username = afl.getUsername();
        String password = afl.getPassword();
// if("admin".equals(username)&&"admin".equals(password)){

// request.setAttribute("username", username);

// return mapping.findForward("success");

// }

// else{

// return mapping.findForward("error");

// }

        String errorInfo = "";
        try{
        Login.LoginManager.getInstance().login(username, password);
        request.getSession().setAttribute("username", username);
        return mapping.findForward("success");
        }
        catch(Login.UsernameException ue){
            errorInfo = "username错误,找不到["+username+"]"
;
            ue.printStackTrace();
        }
        catch(Login.PasswordException pe){
            errorInfo = "password错误";
            pe.printStackTrace();
        }
        request.setAttribute("errorInfo", errorInfo);
        request.setAttribute("date", new Date());
        return mapping.findForward("error");
// return null;

    }
}



import org.apache.struts.action.ActionForm;
public class ActionForm_Login extends ActionForm{
    private String password;
    private String username;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}



package Login;

public class LoginManager {
    private static LoginManager instance = new LoginManager();
    private LoginManager(){}
    public static LoginManager getInstance(){
        return instance;
    }
    public void login(String username, String password){
        if(!"admin".equals(username))throw new UsernameException();
        if(!"admin".equals(password))throw new PasswordException();
    }
    
}




package Login;

public class PasswordException extends RuntimeException{
    
}


package Login;

public class UsernameException extends java.lang.RuntimeException{

}



<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Login</title>
    </head>
    <body>
        <h1>User Login Page !!</h1>
        <form action="login.do" method="post">
            用户: <input type="text" size="10" name="username"/><br>
            密码: <input type="password" size="10" name="password"/><br>
            <input type="submit" value="Login" />
        </form>
    </body>
</html>



<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "">
<%@taglib prefix="bean" uri="" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Login Success !!</title>
    </head>
    <body>
        <h1>Login Success !!</h1>
        <h1>Welcome <%=session.getAttribute("username") %></h1><br/>
        <h1>bean-write Test <bean:write name="username"></bean:write></h1><br/>
        <form name="cal" method="post" action="cal.do">
            <input type="text" size="8" name="value1" value="<%=request.getAttribute("value1")%>">
            <select name="flag">
                <option value="+">+</option>
                <option value="-">-</option>
                <option value="*">*</option>
                <option value="/">/</option>
            </select>
            <input type="text" size="8" name="value2" value="<%=request.getAttribute("value2")%>">
            <input type="submit" value=" = "/>
            <input type="text" value="<%=request.getAttribute("result")%>">
        </form>
    </body>
</html>



<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "">
<%@taglib prefix="bean" uri="" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Login Error</title>
    </head>
    <body>
        <h1>Login Error !!</h1>
        <h1><%= request.getAttribute("errorInfo")%></h1>
        <h1><bean:write name="errorInfo"></bean:write></h1>
        <h1><bean:write name="errorInfo" filter="false"></bean:write></h1>
        <bean:write name="date" format="yyyy-MM-dd HH:mm:ss"/>
    </body>
</html>




<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-startup>2</load-on-startup>
 </servlet>

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "">




<struts-config>
    <form-beans>
        <form-bean name="loginForm" type="ActionForm_Login"></form-bean>
        <form-bean name="calForm" type="cal.CalActionForm"></form-bean>
    </form-beans>

    <action-mappings>
        <action path="/login" type="Action_Login" name="loginForm" scope="request">
            <forward name="success" path="/LoginSuccess.jsp"></forward>
            <forward name="error" path="/LoginError.jsp"></forward>
        </action>
        <action path="/cal" type="cal.CalAction" name="calForm" scope="request">
            <forward name="success" path="/LoginSuccess.jsp"></forward>
        </action>
    </action-mappings>
    <message-resources parameter="MessageResources" />
</struts-config>

阅读(502) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~