struts

简介:

struts执行过程和拦截器

Struts2执行过程

wKioL1l1vbrC6ou3AADdsfNY2NM816.png-wh_50

 

Struts2拦截器概述

1 struts2是框架,封装了很多的功能,struts2里面封装的功能都是在拦截器里面

 

2 struts2里面封装了很多的功能,有很多拦截器,不是每次这些拦截器都执行,每次执行默认的拦截器

 

3 struts2里面默认拦截器位置

 wKiom1l1vjXDp5teAAAGX4yA2iU313.png-wh_50

 

 

4 拦截器在什么时候执行?

(1)在action对象创建之后,action的方法执行之前

 

拦截器底层原理

1 拦截器底层使用两个原理

第一个 aop思想

(0)后面在spring里面把aop做更深层次分析

(1)文字描述:

Aop是面向切面(方面)编程,有基本功能,扩展功能,不通过修改源代码方式扩展功能

(2)画图分析:

wKiom1l1vbvCV0E2AABNmRUBves340.png-wh_50 

 

第二个 责任链模式

(1)在java中有很多的设计模式,责任链模式是其中的一种

(2)责任链模式和过滤链很相似的

责任链模式:

 要执行多个操作,有添加、修改、删除三个操作。

首先执行添加操作,添加操作执行之后 做类似于放行操作,执行修改操作,修改操作执行之后做类似于放行操作,执行删除操作

过滤链:一个请求可有多个过滤器进行过滤,每个过滤器只有做放行才能到下一个过滤器

wKioL1l1vbvDqUrsAAAPMvM4o_k852.png-wh_50 

 

2 aop思想和责任链模式如何应用到拦截器里面?

(1)文字描述:

- 拦截器在action对象创建之后,action的方法执行之前执行

 

- 在action方法执行之前执行默认拦截器,执行过程使用aop思想,在action没有直接调用拦截器的方法,使用配置文件方式进行操作

 

- 在执行拦截器时候,执行很多的拦截器,这个过程使用责任链模式

-- 假如执行三个拦截器,执行拦截器1,执行拦截器1之后做放行操作,执行拦截器2,执行拦截器2之后做放行,执行拦截器3,执行拦截器3之后放行,执行action的方法

 

(2)画图分析

wKiom1l1vbySh5SxAABpmjK3n7g846.png-wh_50 

 

 

02.struts2配置文件

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

<constant name="struts.ui.theme" value="simple"/>

<constant name="struts.devMode" value="true" />

<constant name="struts.i18n.encoding" value="UTF-8" />

 

<package name="default" namespace="/" extends="struts-default">

        <!-- 全局结果页面 -->

<global-results>

<result name="sysException">/WEB-INF/pages/error.jsp</result>

<result name="error">/WEB-INF/pages/error.jsp</result>

</global-results>

<!-- 全局异常处理 -->

<global-exception-mappings>

<exception-mapping result="sysException" exception="com.my.qb.exception.SysException"/>

<exception-mapping result="error" exception="java.lang.Exception"/>

</global-exception-mappings>

 

<action name="login" method="login" class="loginAction">

<result name="login">/WEB-INF/pages/sysadmin/login/login.jsp</result>

<result name="success">/WEB-INF/pages/home/fmain.jsp</result>

</action>

<action name="logout" method="logout" class="loginAction">

<result name="logout">/WEB-INF/pages/sysadmin/login/logout.jsp</result>

</action>


<action name="homeAction_*" method="{1}" class="homeAction">

<result name="fmain">/WEB-INF/pages/home/fmain.jsp</result>

<result name="title">/WEB-INF/pages/home/title.jsp</result>

<result name="toleft">/WEB-INF/pages/${moduleName}/left.jsp</result>

<result name="tomain">/WEB-INF/pages/${moduleName}/main.jsp</result>

</action>


Type属性

01.默认值,做转发,dispathcher

02.做定向操作,redirect

 

重定向到actionredirectAction

转发到actionchain-----一般不用,因为有缓存问题

 

<result name="alist" type="redirectAction">contractAction_list</result>


</package>

 

    <include file="struts2/struts-sysadmin.xml"></include>

    <include file="struts2/struts-cargo.xml"></include>


</struts>

03.struts2封装获取表单数据

属性封装:将数据封装在属性中,不能直接封装在实体类对象中。

模型驱动封装:只能将数据封装在同一个实体类对象中。

表达式封装:可以将数据封装到不同的实体类对象中。

 

04.servletaction区别

Servlet:默认在第一次访问时创建,创建一次,单实例对象。

Action:访问时候创建,每次访问action时候,都会创建action对象,创建多次,多实例对象。

 

05.值栈

值栈是struts2提供本身一种存储机制,类似域对象,是值栈,可以存值和取值。

值栈存储位置

每次访问action的时候,都会创建action对象;在每个action对象里面都会有一个值栈对象。

在值栈中的数据是后进先出。

值栈的内部结构:

01.第一部分是root,结构是list集合;一般操作都是root里面的数据。

02.第二部分是context,结构是map集合。

 

向值栈存放数据:

当对象放入栈顶的时候,用push;当集合要放入栈顶的时候,用put

/**

 * 将对象放入值栈栈顶

 * @param obj

 */

public void push(Object obj){

ActionContext.getContext().getValueStack().push(obj);

}

 

/**

 * 将集合放入值栈中,使用key-value

 * @param key

 * @param value

 */

public void put(String key,Object value){

ActionContext.getContext().put(keyvalue);

}

 



本文转自 叫我北北 51CTO博客,原文链接:http://blog.51cto.com/qinbin/1950532

相关文章
|
7月前
|
安全 Java API
Struts2
访问web资源 1》使用servlet API解耦的方式,获取的方法较少   1.使用ActionContext,一个一个获取,效率不高   2.实现XxxAware接口(ApplicationAware,SessionAware.....)推荐,
25 0
|
设计模式 开发框架 安全
Struts,你为何死不悔改!
上篇文章《诡异的字符串问题。。。》的问题已经解决了,我一直相信「团队力量的重要性」,虽然我不能保证加入群的每一个人都是乐于分享的同学,但我始终群里的各位同学总会慢慢被我们这种乐于分享的群氛围所影响。就以上篇文章为例,群里的 Univechige 同学专门给 IntelliJ IDEA 官方发邮件寻求原因,这便是一个好的开端,我相信有各位同学的共同维护,后面群氛围会越来越好。下面给出 IDEA 官方的答复,见下图。
141 0
Struts,你为何死不悔改!
|
Web App开发 Java Apache
struts
运行流程 客户端浏览器通过HTTP请求,访问控制器,然后控制器读取配置文件,然后执行服务器端跳转,执行相应的业务逻辑,然后,在调用模型层,取得的结果展示给jsp页面,最后返回给客户端浏览器 组成部分 struts 视图 标签库 控制器 action 模型层 ActionFrom JavaBean struts maven 安装官网 : https://struts.
987 0
|
Web App开发 XML Java
JakartaEE Struts2使用
1. Struts2下载 解压后的目录结构如下: 图1.png 从一个高水平角度看,Struts2 是一个MVC拉动的(或MVC2)框架,Struts2 的模型-视图-控制器模式是通过以下五个核心部分进行实现的: 操作(Actions...
969 0
|
Java 数据库连接
[Struts]HibernatePlugIn for Struts(转贴)
这个Plugin的作用是在Struts应用程序启动时进行hibernate的初始化操作,原文HibernatePlugIn for Struts,步骤很简单: 1、在struts-config.xml里增加: <plug-in className="org.
1145 0
|
SQL JavaScript 前端开发
|
Java 数据安全/隐私保护 开发者
|
Web App开发 JavaScript Java