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>
- Struts2 架构 拦截器
- Struts2架构图解析以及拦截器的理解
- 【Struts2】Struts2中拦截器
- struts2拦截器
- Struts2拦截器
- struts2.0拦截器
- struts2.0 拦截器
- struts2拦截器学习
- struts2 拦截器
- Struts2拦截器(Interceptor)
- struts2.0拦截器
- 用上struts2拦截器
- struts2拦截器简介
- Struts2:拦截器概述
- Struts2拦截器(Interceptor)
- struts2 拦截器
- 关于struts2拦截器
- Struts2的拦截器
- Map的有序实现类和无序实现类
- Cassandra的安装配置及简单操作
- oracle 添加索引
- volley请求搭配图片请求
- [数位DP][线性基]Codeforces 388D. Fox and Perfect Sets
- Struts2 架构 拦截器
- HttpClient请求网络
- Java语言发展史
- 20171025
- 罗技g502鼠标使用感受,以及与g402的对比体验
- CAD快速批量转为图片
- Spring 报 NoSuchBeanDefinitionException
- 神经网络及其matlab仿真
- git 环境搭建