Struts2 架构 拦截器

来源:互联网 发布:apache poi api 编辑:程序博客网 时间:2024/05/16 13:02

Struts2 架构



1.2拦截器介绍

01.为什么需要拦截器

早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足、可扩展性降低Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于系统的解耦

 

Mvc和三层的区别?

解析:MVC是表示层的三个组件。核心用途: 将请求和展示分离。

     三层侧重的是架构层面的一个流程组件封装。

 

 

 

04.什么是拦截器 

拦截对Action请求的一个类。

实现Interceptor接口。继承AbstractInterceptor

 

Struts 2大多数核心功能是通过拦截器实现的,每个拦截器完成某项功能

 

拦截器方法在Action执行之前或者之后执行

 

拦截器栈

从结构上看,拦截器栈相当于多个拦截器的组合

在功能上看,拦截器栈也是拦截器

拦截器与过滤器原理很相似




三阶段执行周期:

1、做一些Action执行前的预处理

2、将控制交给后续拦截器或返回结果字符串

3、做一些Action执行后的处理



拦截器案例:



jar包 不做多余的讲解

首先我们的web.xml  只需配置一个前端控制器

<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>

 

 

我们的 页面

首先是login.jsp


拦截器 用法:

我们默认没有登录的情况下是走的login.jsp页面

如果我们已经登录过

我们会把name存到session

在我们下一次点页面时 直接跳过登录  到成功的页面

但是如果我们没有登录过

想要直接访问成功 页面

这时候我们的 拦截器抢劫的功能就开始启动了

我们会拦截到 没有没有session存值的 和没有直接访问登录页面 的

我们直接给他跳转到 login页面 让他进行登录


<%@ taglib prefix="s" uri="/struts-tags" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>登录</title></head><body><h2>登录</h2><s:form method="POST" action="login">    请输入用户名: <s:textfield  name="user.username"></s:textfield> <br/>    <s:textfield name="user.password"></s:textfield><br/>    <s:submit value="登陆"></s:submit></s:form></body></html>

我们访问的是login

在点击提交的时候


Success页面<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Success</title></head><body> <h2>Success</h2></body></html>


 实体类  存储登录名和密码的

package cn.happy.struts07.entity;/** * Created by Happy on 2017-10-24. */public class UserInfo {    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;    }}

拦截器+Action
package cn.happy.struts07.interceptor;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;import java.util.Map;/** * Created by linlin on 2017/10/25. */public class MyInterceptor implements Interceptor {    public void destroy() {    }    public void init() {        System.out.println("拦截器已经初始化成功了。。。。");    }    public String intercept(ActionInvocation invocation) throws Exception {        System.out.println("对象"+invocation);   Object action=invocation.getAction();        System.out.println("action===="+action);   String value;        Map<String,Object> session= ActionContext.getContext().getSession();        Object name=session.get("uname");        String actionName=invocation.getProxy().getActionName();        invocation.getProxy().getNamespace();        System.out.println("===actionName="+actionName);        if(actionName.equals("login")){            System.out.println("======action login==");            value=invocation.invoke();        }else if(name!=null){            value=invocation.invoke();            String method=invocation.getProxy().getMethod();            System.out.println("方法:"+method);        }else{            value="login";        }        System.out.println("逻辑视图名"+value);        return value;    }}Actionpackage cn.happy.struts07.action;import cn.happy.struts07.entity.UserInfo;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionContext;import java.util.Map;/** * Created by linlin on 2017/10/25. */public class LoginAction implements Action{    private UserInfo user;    public String execute() throws Exception {        Map<String,Object> session= ActionContext.getContext().getSession();       if(user!=null){           if(user.getUsername().equals("1")&&user.getPassword().equals("1")){               session.put("uname",user.getUsername());                       return SUCCESS;           }else{               return LOGIN;           }       }else{           if(session!=null&&session.get("uname")!=null){               return "success";           }else{               System.out.println("action中的自定义代码");               return "login";           }       }    }    public UserInfo getUser() {        return user;    }    public void setUser(UserInfo user) {        this.user = user;    }}

最重要的就是我们的 struts.xml

strtus-day07.xml

 

我们先看struts.xml

这里面我们 有配置拦截器和拦截器栈

我们必须引用 系统自带的拦截器defaultStack

还要引用你写的 拦截器

Global这个节点是在总的xml中设置一个返回的 页面

这样我们的子的就不需要一个一个设置了

我这个默认就是访问的就是login.jsp页面

<?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>    <package name="default" namespace="/" extends="struts-default">        <!--配置拦截器  拦截器栈--><interceptors>    <interceptor name="myInter" class="cn.happy.struts07.interceptor.MyInterceptor">    </interceptor>    <interceptor-stack name="myStack">        <interceptor-ref name="defaultStack"></interceptor-ref>   <interceptor-ref name="myInter"></interceptor-ref>    </interceptor-stack></interceptors><default-interceptor-ref name="myStack"></default-interceptor-ref><!--<default-interceptor-ref name="first"></default-interceptor-ref>--><global-results>    <result name="login">/WEB-INF/myinter/login.jsp</result></global-results><!--<action name="first"></action>--><!--        <action name="he" class="cn.happy.struts01.HelloWorld">            <result name="helloworld">/helloworld.jsp</result>        </action>        <action name="UserAction" class="cn.happy.struts02.UserAction">            <result name="success">/success.jsp</result>            <result name="input">/login.jsp</result>        </action>        <action name="LoginAction" class="cn.happy.struts03.LoginAction">            <result name="success">/success2.jsp</result>        </action>-->    </package>    <include file="struts-04.xml"></include>    <include file="struts-05.xml"></include>    <include file="struts-06.xml"></include>    <include file="struts-07.xml"></include></struts>


strtus.day07.xml

?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="day-07" namespace="/" extends="default">        <action name="login" class="cn.happy.struts07.action.LoginAction">            <result name="success">/WEB-INF/myinter/success.jsp</result>            <result name="login">/WEB-INF/myinter/login.jsp</result>        </action>        <action name="book" class="cn.happy.struts07.action.BookAction">            <result name="success">/WEB-INF/myinter/booksuccess.jsp</result>        </action>    </package></struts>


原创粉丝点击