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