老师布置了个份作业:要求用Struts2实现定义一个拦截器,如果用户发表评论,就检查是否用户已经登陆,如果已经登陆,正常发表,如果没有登陆,则跳转到登陆页面。这个功能很简单,就当做复习拦截器吧。
jsp页面:
然后是action:
CommendAction代码如下:
package com.lin.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class CommentAction extends ActionSupport {
private String word ;
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public String execute(){
ActionContext cx = ActionContext.getContext();
cx.put("word",word);
System.out.println("Comment is running");
return "commend_SUCCESS";
}
}
LoginAction代码如下:
package com.lin.action;
import java.util.Map;
import com.lin.model.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private User user ;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
ActionContext ctx = null;
ctx = ActionContext.getContext();
Map<String,Object> session = ctx.getSession();
if( "admin".equals(user.getUsername()) && "pass".equals(user.getPassword())){
session.put("User",user);
return "login_SUCCESS";
}else{
session.put("User", null);
return "login_FALSE";
}
}
}
CommentInterception代码如下:
package com.lin.interception;
import java.util.Map;
import com.lin.action.CommentAction;
import com.lin.model.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class CommentInterception extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation invocation) throws Exception {
CommentAction commentAction = (CommentAction) invocation.getAction();
ActionContext ctx = null;
ctx = ActionContext.getContext();
Map<String,Object> session = ctx.getSession();
User user = (User) session.get("User");
if(user == null){
return "commend_FALSE";
}else{
return invocation.invoke();
}
}
}
Struts.xm代码如下:
<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name ="TestOne" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="myinterceptor" class="com.lin.interception.CommentInterception">
</interceptor>
</interceptors>
<action name="comment" class="com.lin.action.CommentAction">
<result name="commend_SUCCESS">/jsp/result/commend_SUCCESS.jsp</result>
<result name="commend_FALSE">/jsp/login.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myinterceptor"></interceptor-ref>
</action>
<action name="login" class="com.lin.action.LoginAction">
<result name="login_SUCCESS">/jsp/index.jsp</result>
<result name="login_FALSE">/jsp/result/login_FALSE.jsp</result>
</action>
</package>
</struts>
User类代码如下:
package com.lin.model;
public class User {
private String username = null;
private String password = null;
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;
}
}