struts.xml
<?xml?version="1.0"?encoding="UTF-8"??>
<!DOCTYPE?struts?PUBLIC
????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.3//EN"
????"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
????<!--定義常量?-->
????<!--?禁用動(dòng)態(tài)調(diào)用方法?-->
????<constant?name="struts.enable.DynamicMethodInvocation"?value="true"></constant>
????<constant?name="struts.devMode"?value="true"></constant>
????<package?name="default"??namespace="/"??extends="struts-default">
????????????<!--?注冊(cè)攔截器?-->
????????????<interceptors>
????????????????????<interceptor?name="auth"?class="com.imooc.intercepter.AuthIntercepter"></interceptor>
????????????????????<!--?定義攔截器棧?-->
????????????????????<interceptor-stack?name="myStack">
?????????????????????????????????????<interceptor-ref?name="defaultStack"></interceptor-ref>
?????????????????????????????????????<interceptor-ref?name="auth"></interceptor-ref>
????????????????????</interceptor-stack>
????????????</interceptors>
??????????<!--?通過此Action訪問后臺(tái)管理頁(yè)面?,需要判斷用戶是否已登錄,如果未登錄則跳轉(zhuǎn)到登錄頁(yè)面-->
????????<action?name="auth">
????????????<result>/WEB-INF/page/manager.jsp</result>
????????????<result?name="login">/lo.jsp</result>
????????????<!--?引用自定義的攔截器棧?-->
????????????<interceptor-ref?name="myStack"></interceptor-ref>
????????</action>
???????????
?????????<action?name="login"?class="com.imooc.action.LoginAction"?method="login">
????????????????????<result?name="success">/WEB-INF/page/manager.jsp</result>
????????????????????<result?name="error">/lo.jsp</result>
?????????</action>
????</package>
</struts>
LoginAction.class
package?com.imooc.action;
import?java.util.Map;
import?org.apache.struts2.interceptor.SessionAware;
import?com.opensymphony.xwork2.ActionSupport;
public?class?LoginAction?extends?ActionSupport??implements???SessionAware{
??????
??????private???String??uname?;
??????private???String??upwd;
??????private??Map<String,?Object>?session;
????
??????//獲取session?
????public?void?setSession(Map<String,Object>?session)?{
?????????????????this.session?=?session;
????}
????public?String?getName()?{
????????return?uname;
????}
????public?void?setName(String?name)?{
????????this.uname?=?name;
????}
????public?String?getPassword()?{
????????return?upwd;
????}
????public?void?setPassword(String?password)?{
????????this.upwd?=?password;
????}
????
????//?處理login的問題
????public??String??login(){
????????if("admin".equals(uname)?&&?"123456".equals(upwd)){
????????????session.put("loginInfo",?uname);
????????????return??SUCCESS;
????????}else{
????????????session.put("loginError","用戶名或密碼錯(cuò)誤!");
????????????return???ERROR;
????????}
????}???
}
AuthInterceptor.class
public?class?AuthIntercepter?extends?AbstractInterceptor?{
????@Override
????public?String?intercept(ActionInvocation?invocation)?throws?Exception?{
????????????ActionContext??context?=?ActionContext.getContext();
????????????Map<String,Object>?session?=?context.getSession();
????????????if(session.get("loginInfo")!=null){
????????????????String???result?=?invocation.invoke();
????????????????return?result;
????????????}else{
????????????????return??"login";
????????????}
?????????
????}
}
2022-03-30
2017-08-17
同學(xué),你需要將LoginAction中用于接收用戶名和密碼的屬性名稱和login.jsp頁(yè)面表單中所提交的用戶名與密碼的input輸入框中的name屬性名稱一致才能夠成功利用Struts2的屬性驅(qū)動(dòng)來完成屬性的封裝噢.
注意上面調(diào)到的屬性名并不是你在LoginAction中聲明的字段名稱,而是getter/setter方法名稱去掉get/set后的名稱,首字母小寫后需要保證與你在login.jsp頁(yè)面的表單中的參數(shù)名稱一致.
例如:
login.jsp
可以看到在表單中兩個(gè)input標(biāo)簽中的name屬性分別為 username 和 password
接下來再看一下LoginAction:
建議你去檢查一下login.jsp頁(yè)面中的請(qǐng)求參數(shù)的name屬性名稱和LoginAction中的接收參數(shù)的屬性名稱是否一致.