黑马程序员技术交流社区

标题: [石家庄校区]Struts2摘要笔记 [打印本页]

作者: 小强皮厚    时间: 2018-1-12 11:27
标题: [石家庄校区]Struts2摘要笔记
1、struts2环境准备
导入jar包
struts-2.3.24-all.zip------>apps--------->

web.xml配置filter
<filter>
<filter-name>struts2Filter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts.xml
<package name="default" namespace="/" extends="struts-default">
<action name="Login" class="com.itheima.action.LoginAction" method="Login">
<result name="success">/success.jsp</result>
<result name="failer">/failer.jsp</result>
</action>
</package>
2、struts2的执行流程
(1)客户端浏览器发送一个请求,HttpServletRequest.
(2)程序会调用StrutsPrepareAndExecuteFilter,然后会询问ActionMapper这个请求是否需要调用某个Action.
(3)如果ActionMapper决定要调用某个Action,StrutsPrepareAndExecuteFilter会把请求的处理交给ActionProxy.
(4)ActionProxy通过配置管理器(Configuration Manager)从配置文件(struts.xml)中读取框架的配置信息,从而找到需要调用的Action类.
(5)ActionProxy会创建一个ActionInvocation的实例.
(6)ActionInvocation使用命名模式来调用Action,在调用Action之前,会依次调用所有配置的拦截器(Intercepter1,Intercepter2....)
(7)一旦Action执行完,返回结果字符串,ActionInvocation就会负责查找结果字符串对应的Result,然后执行这个Result.通常情况下Result会调用一些模板来呈现页面
(8)产生的Result信息返回给ActionInvocation,此过程中拦截器会再次被执行,顺序与之前的相反.
(9)产生一个HttpServletResponse的响应行为,通过StrutsPrepareAndExecuteFilter反馈给客户端.
3、struts2封装数据的三种方式
属性驱动
--普通属性
--javabean属性
jsp上的name值必须是 a.username a.password
模型驱动
public class LoginAction implements Action,ModelDriven<User> {
        private User user = new User();
        @Override
        public User getModel(){
                return user;
        }
}
1、实现modelDriven<泛型>
2、创建实例对象 private User user = new User();
3、getModel方法
大多数时候,变量名 是根据get和set方法猜测到了
属性驱动时 赋值只要是通过set方法进行赋值 赋值是 赋一个实例对象(User user= 对象值 )
模型驱动时 赋值是给 实例对象赋值 (User user = new User(); user.属性=值 )
4、struts2加载配置文件的顺序
1.default.properties
位置:strtus2-core.jar包 org.apache.struts2包下
作用:主要是声明了struts2框架的常量
2.struts-default.xml
位置:struts2-corl.jar
作用:声明了interceptor result bean
3.struts-plugin.xml
位置:在struts2的插件包中
作用:主要用于插件的配置声明
4.struts.xml
位置:在我们自己的工程中
作用:用于我们自己工程使用strtus2框架的配置
5.自定义的struts.properties
位置:都是在自己工程的src下
作用:定制常量
6.自定义配置提供
7.web.xml
主要是加载strtus2框架在web.xml文件中的相关配置.
8.bean相关配置
5、struts2进行路径设置的三种方式
1. 直接写 路径 = package的namespace属性+action的name属性
2. *号通配符方式 {1} 1代表的是第一个星号
3. 动态调用方式 设置开启动态调用 访问时候 路径!方法 (不建议使用)
6、result常用的type值
dispatcher 请求转发 页面
chain 请求转发 action之间的
redirect 重定向 页面
redirectAction 重定向 action之间的
7、创建action类的三种方式
[size=10.5000pt]1. Pojo
Plani Ordinary Java object  简单的Java对象
没有实现任何接口,没有继承任何类
无耦合,所有功能都要自己实现
2.实现action接口
提供了几个常量
3.继承ActionSupport
√ actionSupport为我们提供了很多的功能
8、struts2怎么设置常量和全局结果
<constant name="去default.properties中寻找" value="">
写在package中<global-results>
设置了全局结果后,那么所有的actin都可以不用再设置这个值的result,可以直接使用
9、struts.xml中各个标签的作用
package
包标签用于定义一个包存放不同的action
action
action标签用于定义action
result
结果标签 用于定义结果名称、路径和跳转方式等信息
include
用于引入其他的配置文件
param
参数标签 用于给其他的标签内属性赋值
global-results
全局结果设置
global-exception-mappings
全局异常设置
exception-mapping
异常设置
interceptor
拦截器标签
interceptor-stack
拦截器栈标签 用于定义多个拦截器同时使用
interceptor-ref
引用其他的拦截器
default-interceptor-ref
设置使用哪个拦截器
constant
用于常量设置
10、action标签的class属性和method属性的默认值 result标签的name属性的默认值
action配置:
² name属性:主要与packagenamespace联合使用来确定一个action的访问路径
² class属性:用于只是当前的action
² method属性:指示当前的action类中的哪个方法执行
result配置
² name属性:action类的method方法的返回值进行匹配,来确定跳转路径
² type属性:用于制定跳转方式
11、获取Servlet API
加载Servlet api是通过什么加载的 拦截器 ServletConfig
ServletActionContext.getRequest();
ServletActionContext.getResponse();
使用注入的方式
implements ServletRequestAware
private HttpServletRequest request;
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
[size=16.5000pt]12、ognl表达式
OGNLObject-Graph Navigation Language(对象图导航语言)的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
Strtsu2框架内置了OGNL
OGNL本身也是一个项目,它是可以单独使用。
OGNL作用:
支持对象的操作,调用对象的方法
支持静态成员访问
支持赋值操作与表达串联
访问OGNL上下文,访问ActionContext
操作集合对象。
* OGNL三要素 表达式 上下文(Context) root
对对象进行操作
'hello'.length()
操作静态方法或属性
@java.lang.Math@方法 @java.lang.Math@属性
* # 是获取 context中的内容 不写#默认从root获取
创建list集合 map集合
"{1,2,3,4}" "{'username':'fox','password':30}"
struts2 一个特点 重复的东西 都会覆盖 串联就是同时设置多个值 只会返回最后一个
* struts2 里面怎么使用ognl
1、导入标签库
2、s:property 输入指定值 值的获取方式使用的是ognl表达式
13、valueStack 值栈
一个request对应一个Action实例,一个action实例对应一个ActionContext实例,一个Action对应一个valueStack
1、request
请求 就是request
2、ActionContext ActionContext就是为Action服务的,因为每次的Action都是不同,
为了防止一个ActionContext服务多个Action出现问题 所以设置 每个Action都有一个单独的ActionContext
Action相关的引用 周边
3、Action 为了解决多线程访问同时访问同一个出现线程死锁问题 所以 设计方案是 ,每次访问都创建一个新的Action
Action类本身的操作
4、valueStack 为了防止放的数据重复使用时间不确定性,设计上 每个Action都有一个单独的valueStack
存放数据
valueStack是一个接口
OGNLValueStack是由一下组成的
root context 对象栈
context是 由一下组成的
_root _values
_values存放的是键值对的信息
ActionContext
能够引用context
*怎么获取ValueStack?
第一种获取方式:ServletActionContext.getRequest().getAttribute(SerlvetActionContext.STRUTS_VALUESTACK_KEY )
第二种获取方式:ActionContext.getContext().getValueStack()
新建一个Action,方法中获取ValueStack,存储数据,页面访问
请求进来的时候携带的数据 会在遇到ModelDriven拦截器的时候 封装到model中并保存到valueStack中(保存的是一个地址),执行action中的execute方法,修改user变量的地址变成新的user对象的地址
model.的作用是调用getModel方法
14、怎么往valueStack中存数据
自动
action
modelDriven中的泛型对象
手动
push
set
[size=16.5000pt]15、常量配置
default.properties文件中定义了struts2框架的常用常量
如何使用:
[size=10.5000pt]1. 可以在src下创建一个struts.properties配置文件
[size=10.5000pt]2. 可以在web.xml中配置
[size=10.5000pt]3. 直接在struts.xml中定义常量(推荐)
16、ognl表达式中特殊字符
# 非root
% 强制解析ognl表达式
$ 在配置文件中获取valueStack的值的
17、 interceptor
1、基于AOP思想 面向切面编程
2、扩展功能
3、底层递归的方式实现拦截器链
18ActionContext是什么
ActionContext它是action上下文,strtus2框架它使用actionContext来保存Action在执行过程中所需要的一些对象,例如 session, application
ActionContext的获取  是通过它的静态方法getContext()得到。
Struts2会根据每一次的http请求来创建对应的ActionContext,它是与当前线程绑定的。
每一次请求,就是一个线程,对应着一个request,每一次请求,会创建一个Action,每一个action对应一个ActionContext.每一次请求也对应着一个valueStack.
request---ActionContext----Action-----ValueStaci它们都对应着一次请求(一个线程).
valueStackActionContext本质上是可以获取
[size=16.5000pt]19、struts2的注解开发
要想使用注解开发就需要导入Struts2-conventional-plugin-2.3.24.jar
@Namespace来代替<package  namespace=””>
@ParentPackage来代替<package extends=””>
@Action来描述关于<action>配置
value属性<action name=””>
使用@Actionresults来描述关于结果类型的配置<result>
<result name=”” type=””>
@Action(results={@Result(name=””,type=””,location=””)})
@Actions
作用:可以通过多个映射来访问同一个action
@Results
类似于全局的结果视图
@InterceptorRef
它是用于处理拦截器的


作者: Yin灬Yan    时间: 2018-1-12 18:42
我来占层楼啊   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2