1.在src中不同package中定义两个类LoginAction
jk包中:
public class LoginAction extends ActionSupport{ private final String success = "success"; private final String error = "error"; 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 String execute() { if(getUsername().equals("jk") && getPassword().endsWith("123")) { ActionContext.getContext().getSession().put("user", getUsername()); return success; } else { return error; } } }
org.apache.struts.actionresult包:
public class LoginAction { private String username; private String password; private String tip; 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 String getTip() { return tip; } public void setTip(String tip) { this.tip = tip; } public String execute() throws Exception { if(getUsername().equalsIgnoreCase("my")) { throw new MyException("自定义异常"); } if(getUsername().equalsIgnoreCase("lang")) { throw new java.lang.Exception("用户名不能为lang"); } if(getUsername().equals("jk")) { setTip("登录成功"); return "success"; } else{ return "error"; } } }
MyExeption
public class MyException extends Exception { public MyException() {} public MyException(String msg) { super(msg); } }
第一个类是普通登录类,第二个用来测试struts2的异常处理!
2.struts.xml中配置方式:
<package name="jk" extends="struts-default"> <action name="login" class="jk.LoginAction"> <result type="redirect">/success.jsp</result> </action> </package> <package name="org.apache.struts.actionresult" extends="struts-default" namespace="/exception"> <global-results> <result name="lang">/lang.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="lang" exception="java.lang.Exception"> </exception-mapping> </global-exception-mappings> <action name="exception/login" class="org.apache.struts.actionresult.LoginAction"> <exception-mapping result="my" exception="org.apache.struts.actionresult.MyException" /> <result name="my">/my.jsp</result> </action> </package>
3.jsp中代码:
<s:form action="login"> <s:textfield name="username" key="user"/> <s:textfield name="password" key="pass"/> <s:submit key="login"/> </s:form> <s:form action="login" namespace="/exception"> <s:textfield name="username" key="user"/> <s:textfield name="password" key="pass"/> <s:submit key="login"/> </s:form>
即可用使用命名空间来区别两个action中的login。
但是在测试中发现一个问题:
No configuration found for the specified action: 'exception/login' in namespace....
也就是说在命名空间中找不到exception/login这个action
只需要把JSP中写成这样就可以了:<s:form action="login" namespace="/exception">!