DispatchAction

作用: 1. 让程序结构清晰 2. 减少action的个数(把一类请求交给专门的action处理) 3. 利于程序的维护和扩展

项目结构:

 

引入jar包:

antlr-2.7.2.jar, bsf-2.3.0.jar, commons-beanutils-1.8.0.jar,commons-chain-1.2.jar,
commons-digester-1.8.jar, commons-fileupload-1.1.1.jar, commons-io-1.1.jar
commons-logging-1.0.4.jar, commons-validator-1.3.1.jar, jstl-1.0.2.jar
mysql-connector-java-5.0.3-bin.jar, oro-2.0.8.jar, standard-1.0.6.jar
struts-core-1.3.10.jar, struts-el-1.3.10.jar, struts-extras-1.3.10.jar
struts-faces-1.3.10.jar, struts-mailreader-dao-1.3.10.jar, struts-scripting-1.3.10.jar
struts-taglib-1.3.10.jar, struts-tiles-1.3.10.jar

 

index.jsp:

<jsp:forward page="/WEB-INF/login.jsp" />

login.jsp:

<body>
    <h3>用户登录</h3>
    <form action="<%=basePath%>loginAndLogout.do?flag=login" method="post">
        u: <input type="text" name="username"/><br/>
        p: <input type="password" name="password"/><br/>
        <input type="submit" value="Login"/>
    </form>
  </body>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">  

    <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>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

struts-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
    <form-beans>
        <form-bean name="userForm" type="com.itcast.struts1.form.UserForm" />
    </form-beans>
    <action-mappings>
        <!-- parameter: 接收JSP页面传递过来的flag值, 对应着action中的方法名 -->
        <action path="/loginAndLogout" type="com.itcast.struts1.action.LoginAndLogoutAction"
                name="userForm" parameter="flag">
            <forward name="loginOk" path="/WEB-INF/loginOk.jsp" />
            <forward name="loginEr" path="/WEB-INF/login.jsp" />
        </action>
    </action-mappings>
</struts-config>

UserForm.java:

private String username;
private String password;

+ getter/setter方法

LoginAndLogoutAction.java:

public class LoginAndLogoutAction extends DispatchAction {

    // 登录方法
    public ActionForward login(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        
        UserForm userForm = (UserForm) form;
        String password = userForm.getPassword();
        
        if ("123".equals(password)) {
            return mapping.findForward("loginOk");
        } else {
            return mapping.findForward("loginEr");
        }
    }
    
    // 注销方法
    public ActionForward logout(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        
        request.getSession().invalidate();    // 删除所有session属性
        return mapping.findForward("loginEr");
    }
}

loginOk.jsp:

<a href="<%=basePath%>loginAndLogout.do?flag=logout">注销</a>
    <hr/>

测试:

------------------------------------------------------

全局跳转与局部跳转

<!-- 全局跳转 -->
    <global-forwards>
        <forward name="err" path="/WEB-INF/err.jsp" />
    </global-forwards>

局部跳转指的是在本action中的跳转, 优先找本action中的<forward>, 如果没有再找全局跳转,

如果全局跳转也找不到, 那么将报错404

 

posted @ 2017-03-08 20:57  半生戎马,共话桑麻、  阅读(376)  评论(0)    收藏  举报
levels of contents