<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- struts2的action必須放在一個指定的包空間下定義 -->
<package name="default" extends="struts-default">
<!-- 定義處理請求URL爲login.action的Action -->
<action name="login" class="org.qiujy.web.struts.action.LoginAction">
<!-- 定義處理結果字符串和資源之間的映射關係 -->
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- struts2的action必須放在一個指定的包空間下定義 -->
<package name="qiujy" extends="struts-default">
<!-- 定義處理請求URL爲login.action的Action -->
<action name="login" class="org.qiujy.web.struts2.action.LoginAction">
<!-- 定義處理結果字符串和資源之間的映射關係 -->
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
<package name="my" extends="struts-default" namespace="/manage">
<!-- 定義處理請求URL爲login.action的Action -->
<action name="backLogin" class="org.qiujy.web.struts2.action.LoginAction">
<!-- 定義處理結果字符串和資源之間的映射關係 -->
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package></struts>
<struts>
<include file="struts-default.xml"/>
<include file="struts-user.xml"/>
<include file="struts-book.xml"/>
<include file="struts-shoppingCart.xml"/> ...... </struts>
<struts> ...... <constant name="struts.custom.i18n.resources" value="messages"/>
</struts>
package org.qiujy.web.struts2.action; import com.opensymphony.xwork2.ActionSupport; /** *@authorqiujy *@version1.0 */ publicclass LoginAction extends ActionSupport{ private String userName; private String password; private String msg; //結果信息屬性
/** *@returnthemsg */
public String getMsg() { returnmsg; } /** *@parammsgthemsgtoset */ publicvoid setMsg(String msg) { this.msg = msg; } /** *@returntheuserName */
public String getUserName() { returnuserName; } /** *@paramuserNametheuserNametoset */ publicvoid setUserName(String userName) { this.userName = userName; } /** *@returnthepassword */
public String getPassword() { returnpassword; } /** *@parampasswordthepasswordtoset */ publicvoid setPassword(String password) { this.password = password; } /** *處理用戶請求的excute()方法 *@return結果導航字符串 *@throwsException */ public String execute() throws Exception{ if("test".equals(this.userName) && "test".equals(this.password)){ msg = "登陸成功,歡迎" + this.userName; returnthis.SUCCESS; }else{ msg = "登陸失敗,用戶名或密碼錯"; returnthis.ERROR; } } }
public String execute() throws Exception{ if("test".equals(this.userName) && "test".equals(this.password)){ msg = "登陸成功,歡迎" + this.userName; //獲取ActionContext實例,經過它來訪問Servlet API
ActionContext context = ActionContext.getContext(); //看session中是否已經存放了用戶名,若是存放了:說明已經登陸了; //不然說明是第一次登陸成功
if(null != context.getSession().get("uName")){ msg = this.userName + ":你已經登陸過了!!!"; }else{ context.getSession().put("uName", this.userName); } returnthis.SUCCESS; }else{ msg = "登陸失敗,用戶名或密碼錯"; returnthis.ERROR; } }
<form method="post" action="userOpt!login.action">
package org.qiujy.web.struts2.action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; /** *@authorqiujy *@version1.0 */ publicclass LoginAction extends ActionSupport{ private String userName; private String password; private String msg; //結果信息屬性
/** *@returnthemsg */
public String getMsg() { returnmsg; } /** *@parammsgthemsgtoset */ publicvoid setMsg(String msg) { this.msg = msg; } /** *@returntheuserName */
public String getUserName() { returnuserName; } /** *@paramuserNametheuserNametoset */ publicvoid setUserName(String userName) { this.userName = userName; } /** *@returnthepassword */
public String getPassword() { returnpassword; } /** *@parampasswordthepasswordtoset */ publicvoid setPassword(String password) { this.password = password; } /** *處理用戶請求的login()方法 *@return結果導航字符串 *@throwsException */
public String login() throws Exception{ if("test".equals(this.userName) && "test".equals(this.password)){ msg = "登陸成功,歡迎" + this.userName; //獲取ActionContext實例,經過它來訪問Servlet API
ActionContext context = ActionContext.getContext(); //看session中是否已經存放了用戶名,若是存放了:說明已經登陸了; //不然說明是第一次登陸成功
if(null != context.getSession().get("uName")){ msg = this.userName + ":你已經登陸過了!!!"; }else{ context.getSession().put("uName", this.userName); } returnthis.SUCCESS; }else{ msg = "登陸失敗,用戶名或密碼錯"; returnthis.ERROR; } } public String regist() throws Exception{ //將用戶名,密碼添加到數據庫中 //...
msg = "註冊成功。"; returnthis.SUCCESS; } }
2. struts.xml文件:沒有什麼變化,跟之前同樣配置html
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="my" extends="struts-default" namespace="/manage">
<!-- 定義處理請求URL爲login.action的Action -->
<action name="userOpt" class="org.qiujy.web.struts2.action.LoginAction">
<!-- 定義處理結果字符串和資源之間的映射關係 -->
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>用戶登陸頁面</title>
</head>
<body>
<h2>用戶入口</h2>
<hr>
<form action="manage/userOpt!login.action" method="post">
<table border="1">
<tr>
<td>用戶名:</td>
<td><input type="text" name="userName"/></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value=" 肯定 "/>
</td>
</tr>
</table>
</form>
</body>
</html>
regist.jspjava
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>用戶註冊頁面</title>
</head>
<body>
<h2>用戶註冊</h2>
<hr>
<form action="manage/userOpt!regist.action" method="post">
<table border="1">
<tr>
<td>用戶名:</td>
<td><input type="text" name="userName"/></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value=" 註冊 "/>
</td>
</tr>
</table>
</form>
</body>
</html>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="my" extends="struts-default" namespace="/manage">
<action name="userLogin" class="org.qiujy.web.struts2.action.LoginAction" method="login">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
<action name="userRegist" class="org.qiujy.web.struts2.action.LoginAction" method="regist">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
<action name="user_*" class="org.qiujy.web.struts2.action.UserAction" method="{1}">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
<global-results>
<result name="error">/Error.jsp</result>
<result name="invalid.token">/Error.jsp</result>
<result name="login" type="redirect-action">Logon!input</result>
</global-results>
名字 | 說明 |
chain | 用來處理Action鏈 |
dispatcher | 用來轉向頁面,一般處理JSP,這是默認的結果類型 |
freeMarker | 處理FreeMarker模板 |
httpHeader | 用來控制特殊的Http行爲 |
redirect | 重定向到一個URL |
redirect-action | 重定向到一個Action |
stream | 向瀏覽器發送InputSream對象,一般用來處理文件下載 |
velocity | 處理Velocity模板 |
xslt | 處理XML/XLST模板 |
plaintext | 顯示原始文件內容,例如文件源代碼 |
tiles | 結合Tile使用 |
private String nextAction; public String getNextAction() { return nextAction; }
在strutx.xml配置文件中,咱們可使用${nextAction}來引用到Action中的屬性,經過${nextAction}表示的內容來動態的返回結果,例如:web
<action name="fragment" class="FragmentAction">
<result name="next" type="redirect-action">${nextAction}</result>
</action>
package org.qiujy.domain; publicclass User { private String userName; private String password; /** *@returntheuserName */
public String getUserName() { returnuserName; } /** *@paramuserNametheuserNametoset */ publicvoid setUserName(String userName) { this.userName = userName; } /** *@returnthepassword */
public String getPassword() { returnpassword; } /** *@parampasswordthepasswordtoset */ publicvoid setPassword(String password) { this.password = password; } }
2. 業務控制器:UserAction.javasql
package org.qiujy.web.struts2.action; import org.qiujy.domain.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; publicclass UserAction extends ActionSupport{ //定義用於封裝請求參數的模型對象
private User user = new User(); private String msg; //結果信息屬性
/** *@returntheuser */
public User getUser() { returnuser; } /** *@paramusertheusertoset */ publicvoid setUser(User user) { this.user = user; } /** *@returnthemsg */
public String getMsg() { returnmsg; } /** *@parammsgthemsgtoset */ publicvoid setMsg(String msg) { this.msg = msg; } /** *處理用戶請求的login()方法 *@return結果導航字符串 *@throwsException */
public String login() throws Exception{ String userName = user.getUserName(); String password = user.getPassword(); if("test".equals(userName) && "test".equals(password)){ msg = "登陸成功,歡迎" + userName; //獲取ActionContext實例,經過它來訪問Servlet API
ActionContext context = ActionContext.getContext(); //看session中是否已經存放了用戶名,若是存放了:說明已經登陸了;不然說明是第一次登陸成功
if(null != context.getSession().get("uName")){ msg = userName + ":你已經登陸過了!!!"; }else{ context.getSession().put("uName", userName); } returnthis.SUCCESS; }else{ msg = "登陸失敗,用戶名或密碼錯"; returnthis.ERROR; } } public String regist() throws Exception{ //將用戶名,密碼添加到數據庫中 //...
msg = "註冊成功。"; returnthis.SUCCESS; } }
3. 配置文件:struts.xml數據庫
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="my" extends="struts-default" namespace="/manage">
<action name="userOpt" class="org.qiujy.web.struts2.action.UserAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>用戶登陸頁面</title>
</head>
<body>
<h2>用戶入口</h2>
<hr>
<form action="manage/userOpt!login.action" method="post">
<table border="1">
<tr>
<td>用戶名:</td>
<td><input type="text" name="user.userName"/></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="user.password"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value=" 肯定 "/>
</td>
</tr>
</table>
</form>
</body>
</html>
public String regist() throws Exception{ //將用戶名,密碼添加到數據庫中 //... //msg = "註冊成功。";
if(true){ throw new java.sql.SQLException("沒有數據庫驅動程序"); } return this.SUCCESS; }
2) 修改struts.xml文件:apache
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="my" extends="struts-default" namespace="/manage">
<!-- 定義全局處理結果 -->
<global-results>
<!-- 邏輯名爲sql的結果,映射到/exception.jsp頁面 -->
<result name="sql">/exception.jsp</result>
</global-results>
<global-exception-mappings>
<!-- 當Action拋出SQLException異常時,轉入名爲sql的結果 -->
<exception-mapping exception="java.sql.SQLException" result="sql"/>
</global-exception-mappings>
<action name="userOpt" class="org.qiujy.web.struts2.action.UserAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
3) 新增一頁面:exception.jsp瀏覽器
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>異常信息</title>
</head>
<body>
<h2> 出現異常啦 </h2>
<hr/>
<h3 style="color:red">
<!-- 得到異常對象 -->
<s:property value="exception.message"/>
</h3>
<br/>
<!-- 異常堆棧信息 -->
<s:property value="exceptionStack"/>
</html>
4) 運行regist.jsp進行調試:session