自定義攔截器
自定義攔截器方式一
攔截器的生命週期(不可能每一次訪問都創建一遍攔截器)
隨着程序的開始而創建
隨着程序的結束而銷燬
public class MyIntercept1 implements Interceptor{
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
return null;
}
@Override
public void destroy() {
}
}
自定義攔截器方式二
繼承AbstractInterceptor類
public class MyIntercept2 extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation invocation) throws Exception {
return null;
}
}
自定義攔截器方式三
public class MyIntercept3 extends MethodFilterInterceptor{
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
System.out.println("前處理");
String result = invocation.invoke();
System.out.println("後處理");
return result;
}
}
測試
import com.opensymphony.xwork2.ActionSupport;
public class Demo01Action extends ActionSupport{
public String add() {
System.out.println("add");
return "success";
}
public String update() {
System.out.println("update");
return "success";
}
public String find() {
System.out.println("find");
return "success";
}
public String delete() {
System.out.println("delete");
return "success";
}
}
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<?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>
<package name="inter" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="MyIntercept3" class="com.lanou3g.intercept.MyIntercept3"></interceptor>
<interceptor-stack name="MyStack">
<interceptor-ref name="MyIntercept3">
<param name="includeMethods">add,update</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="MyStack"></default-interceptor-ref>
<action name="Demo01Action_*" class="com.lanou3g.intercept.Demo01Action" method="{1}">
<result name="success">/1.jsp</result>
</action>
</package>
</struts>
小項目之部分代碼
struts.xml
<struts>
<package name="web" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="MyIntercept" class="com.lanou3g.web.MyInterceptor"></interceptor>
<interceptor-stack name="MyStack">
<interceptor-ref name="MyIntercept">
<param name="excludeMethods">login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="MyStack"></default-interceptor-ref>
<global-results>
<result name="toLogin" type="redirect" >/login.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.RuntimeException"></exception-mapping>
</global-exception-mappings>
</package>
</struts>
UserAction
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User u = new User();
private UserService service = new UserServiceImpl();
public String login() {
System.out.println(u);
User findU = service.login(u);
ActionContext.getContext().getSession().put("user", findU);
return "toIndex";
}
@Override
public User getModel() {
return u;
}
}
MyInterceptor
public class MyInterceptor extends MethodFilterInterceptor{
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
Object object = ActionContext.getContext().getSession().get("user");
if(object == null){
return "toLogin";
}else{
return invocation.invoke();
}
}
}
UserServiceImpl
public class UserServiceImpl implements UserService {
private UserDao dao = new UserDaoImpl();
@Override
public User login(User u) {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
User findU = dao.findUser(u);
transaction.commit();
if (findU == null) {
throw new RuntimeException("該用戶不存在");
}
if (!findU.getUser_password().equals(u.getUser_password())) {
throw new RuntimeException("密碼不正確");
}
return findU;
}
}
UserDaoImpl
public class UserDaoImpl implements UserDao {
@Override
public User findUser(User u) {
Session session = HibernateUtils.getCurrentSession();
String hql = "from User where user_code=?";
Query query = session.createQuery(hql);
query.setParameter(0, u.getUser_code());
User findU = (User) query.uniqueResult();
return findU;
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>sh-struts</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
login.jsp
<HEAD>
<script type="text/javascript">
window.onload=function(){
if(window.parent != window){
window.parent.location.href = "${pageContext.request.contextPath}/login.jsp";
}
};
</script>
<META http-equiv=Content-Type content="text/html; charset=utf-8">