问题的产生:Action中可以有多个方法,jsp页面提交时到底匹配哪一个方法
解决的方法:3种
一 动态方法
1 方式:直接在jap的action属性中指出
2 格式:action的名字!方法名
3 例如:
login.jsp
<s:form action="UserAction!login.action">
用户名:<s:textfield name="username"></s:textfield>
密码:<s:password name="pwd"></s:password>
<s:submit></s:submit>
</s:form>
Register.jsp
<s:form action="UserAction!register">
<s:submit></s:submit>
</s:form>
</body>
二 method方法
1 方式:直接修改struts.xml文件,action标签添加method属性,同时修改name属性,使它指向Action中不同的方法
2 注意:struts.xml文件action的名字不能一样
3 每一个方法都在struts.xml对应一个action标签
4 例如:
Login.jsp
<s:form action="login.action">
用户名:<s:textfield name="username"></s:textfield>
密码:<s:password name="pwd"></s:password>
<s:submit></s:submit>
</s:form>
Register.jsp
<s:form action="register.action">
<s:submit></s:submit>
</s:form>
Struts.xml
<struts>
<include file="struts-default.xml" />
<package name="com" extends="struts-default">
<action name="login" class="com.action.UserAction" method="login">
<result name="loginSucc">/register.jsp</result>
<result name="login">/login.jsp</result>
</action>
<action name="register" class="com.action.UserAction" method="register">
<result name="registerSucc">/success.jsp</result>
</action>
</package>
</struts>
5 缺陷:导致struts.xml文件非常之大
三 通配符*
1 方式:采用*代替方法名 修改struts.xml
2 一般情况下:一个Action类在struts.xml文件中对应一个action标签
3 例如:
Login.jsp
<s:form action="loginUserAction.action"> //方法名Action类名
用户名:<s:textfield name="username"></s:textfield>
密码:<s:password name="pwd"></s:password>
<s:submit></s:submit>
</s:form>
Register.jsp
<s:form action="registerUserAction">
<s:submit></s:submit>
</s:form>
Struts.xml
<struts>
<include file="struts-default.xml" />
<package name="com" extends="struts-default">
<action name="*UserAction" class="com.action.UserAction" method="{1}">
<result name="loginSucc">/register.jsp</result>
<result name="login">/login.jsp</result>
<result name="registerSucc">/success.jsp</result>
</action>
</package>
</struts>
四 ActionContext
1 用处:ActionContext用来产生Servlet中的各种参数
2 用法:
ActionContext ac=ActionContext.getContext();
ac.getParameters(): 返回一个request参数
ac.getSerssion(); 返回一个session参数
ac.getApplication() 返回一个application参数
3 例如:
UserAction.java
package com.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private String username;
private String pwd;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {