struts2
来源:互联网 发布:北京启凡网络 编辑:程序博客网 时间:2024/04/29 20:16
Struts2
1、 基础配置
a) 第一个struts2程序
b) 搭建过程:
1. 首先建立一个web应用程序HelloWorld
2. 配置web.xml
配置一个struts的filter,这个filter为struts的入口
3. 配置struts.xml
4、 编写一个Action类,用来处理请求
如果用集成工具来写一个HelloWolrd相对简单,但是如果手动搭建,会有一些小问题出现,比如当出错时,浏览器不会返回错误,
这时候可以去tomcat的logs\localhost文件中查看有无错误。本人因为少写了一个包名而查了很久的bug。
c) web.xml 配置web.xml主要是加上一个struts的过滤器,语句如下:
1、 <filter>
2、 <filter-name>struts2</filter-name>
3、 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
4、 <init-param>
5、 <param-name>actionPackages</param-name>
6、 <param-value>com.mycompany.myapp.actions</param-value>
7、 </init-param>
8、 </filter>
9、 <filter-mapping>
10、 <filter-name>struts2</filter-name>
11、 <url-pattern>/*</url-pattern>
12、 </filter-mapping>
13、 <welcome-file-list>
14、 <welcome-file>index.html</welcome-file>
15、 <welcome-file>index.htm</welcome-file>
16、 <welcome-file>index.jsp</welcome-file>
17、 </welcome-file-list>
这是struts的入口,可以携带参数,旧版本的应该用上一代的过滤器:<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
d) struts.xml:这里是struts的核心配置文件,如package、action、result等如上,
i. package:package是用来组织action、result、interceptors、interceptor-stacks的一个集合,包之间可以相互继承,通常默认是继承与struts-default这个包。
1. name:必须的,并且是独一无二的
2. extends:通常默认是继承于struts-default这个包
3. namespace:这个是在URL路径访问时所指定的虚拟路径,形如”/xxxx/xxxx”
ii. action:用来映射Action的
1. name:此Action的实体类所映射的虚拟路径,跟在package的namespace后面,可用通配符
2. class:Aciton的类路径
3. method:指定使用Aciton的具体方法(默认调用excute方法)
iii. result:用来映射Action类中的方法执行的结果
1. 在Action接口中定义了如下常量:
String SUCCESS ="success";
String NONE ="none";
String ERROR ="error";
StringINPUT = "input";
String LOGIN = "login";
2. name:对应Action方法返回的字符串
3. type:
a) dispatcher:服务器端跳转(默认)
b) chain:映射到另一个Action,持有原请求资源
c) redirect:重定向,客户端跳转
d) redirectAction:客户端跳转另一个Action用参数指定路径
e) eg:
i. <action name=”xxx” class=”xxx”>
<result name=”x” type=”dispatcher”>xxxx.jsp</result>
<result name=”xx” type=”chain”>xxx</result>
<result name=”xxx” type=”redirect”>/xxxx.jsp</result>
<result type="redirectAction">
<paramname="actionName">dashboard</param>
<param name="namespace">/secure</param>
</result>
iv. 通配符(Wildcard Mappings):在使用配置时,可使用通配符以减少配置的数量
1. ‘ *’:匹配不包括’/’的字符
2. ‘**’:匹配包括’/’在内的字符
3. \character:’\*’匹配 ‘*’ ‘\\’匹配’\’
4. eg
<action name=”*_*” class=”xxxx”method=”{1}_{2}”>:方法与action相匹配
2、 Action:struts中处理逻辑的类
a) 实现方法:
i. 一个简单类,不用继承和实现任何类
ii. 继承ActionSurpport类。ActionSurpport中实现了诸如excute()
iii. 实现Action接口,方法 excute()
b) 配置
i. 同上
c) 动态方法
在URL中最后加上”!method”之后,然后在struts.xml(<constant name="struts.enable.DynamicMethodInvocation"value="true" />)中开启动态方法访问权限,便可以直接调用方法。
d) 在Action中常用方法:
i. 获得Request:
1. 通过ServletActionContext.getRequest();(获得的是一个HttpSerlvetRequets对象)
2. 通过ActionContext.getContext().getContextMap()获得一个Map,在通过获得key为”request”的一个Map来得到request。(获得的是一个Map,包含了 HttpSerlvetRequets的键值对)
ii. 同理可以获得session、application、response等等
3、 Interceptor:在ServletDispatcher生成ActionProix之后,要经过一系列的类似于Filter的东西拦截,就称为Interceptor
a) 配置Interceptor,在struts.xml中,用标签<interceptors>,类似如下:
<interceptors>
<interceptor name=”” class=””>
</interceptors>
在运用的地方用<interceptor-ref>标签来引用
如果interceptor较多,则可以用一个<interceptors-stack>标签来组合起来
<interceptor-stack name=””>
</interceptor-stack ><interceptor-ref name=””/>
b) 内置拦截器
c) 自定义拦截器,继承与一个AbstractInterceptor这个抽象的Interceptor类,重写intercept方法即可,值得注意的是ActionInvocation这个接口的实现类的方法
d) 拦截器链:由一系列的Interceptor组成的链,在一个Interceptor里,有一个返回值如果直接返回ActionInvocation.invoke(),则执行下个拦截器或者action, 否则整个请求会在此结束;如果返回ActionInvocation.invokeActionOnly()则是直接跳到Action里执行。
4、 值栈:存储着Action所运行需要的资源,也就是ActionContext,上下文文件,这个上下文里存储seesion、application、request、valueStack等的信息。
5、 对ActionContext以及ServletActionContext的解读:
a) ServletActionContext继承于ActionContext,在ActionContext里拥有一个ThreadLocal对象,调用静态方法ActionContext.getContext()便可以获得当前线程的ActionContext。
b) 如3中d所讲,在ActionContext中拥有一个Map对象,里面存放了如图
于是有了3中d的各种获得request的方法
7、 OGNL:是一种强大的EL表达语言。标准的OGNL有一个根对象,在Struts2中就是值栈。
a) 访问根对象时,不用”#”符号,直接跟名字。访问非根对象时需要用到”#”。
b) 再有就是和EL表达式的结合
c) 集合操作:
i. 直接生成list:
[#]{e1,e2,e3….}生成list、set
ii. 生成map:
[#]{key1:value1,key2:value2…..}
iii. 截断操作:
1. “?”:获得所有
2. “^”:获得第一个
3. “$”:获得最后一个
8、 标签:struts中共主要分为通用标签、UI标签、Ajax标签
a) 通用标签:
i. 控制标签:
1. if else if else:
<s:if test="%{false}">
<div>Will Not Be Executed</div>
</s:if>
<s:elseif test="%{true}">
<div>Will Be Executed</div>
</s:elseif>
<s:else>
<div>Will Not Be Executed</div>
</s:else>
2. append:将集合的迭代器相加合成一个迭代器,其顺序为如例子:
{1,2,3}{a,b,c}: {1,a,2,b,3,c}
3. iterator:
a) value:值栈里对应的集合
b) status:此iterator的状态,遍历数量
c) var:这个iterator的名字
4. sort:
a) comparator:比较器
b) source:需要排序的集合
ii. 数据标签:
1. action
a) name:必须的,此属性为xml配置中action的名字
b) namespace:同xml里你的namespace
c) var:这个action的代号
d) eg:
xml:
<actionname=”testAction” class=”com.liuyanzuo.ActionTest”>
<resultname=”success”>/index.jsp</result>
</action>
jsp:
<s:actionname=”action” executeResult=”true”/>
2. bean:
a) 使用bean的标签,语法如下:
<s:beanname=”xxxx.xxxx.Bean” var=”id”/>
3. url:
a) value:用来指定url的属性值,引用action时需要添加.action
b) action:用来指定url的action,不用加.action
c) method:用来指定action中的方法
d) var:当有此属性时不放入栈顶
e) eg:
1. <body>
2. <s:urlvalue="hello.jsp"/></br>
3. <s:urlvar="url"value="test.action"/>
4. <s:propertyvalue="#url"/></br>
5. <s:urlaction="test"method="add"/></br>
6. </body>
- Struts2
- struts2
- struts2
- Struts2
- struts2
- struts2
- Struts2
- struts2
- struts2
- struts2
- Struts2
- Struts2
- Struts2
- struts2
- struts2
- STRUTS2
- Struts2
- Struts2
- js的Date应用
- cuda-convnet2与caffe对比
- 离散正(余)弦信号的时域与FFT变换后所得频域之间的关系(幅值和相角)
- Fragmented MP4文件格式
- iOS搜索框UISearchBar
- struts2
- 由于没有远程桌面授权服务器可以提供许可证,远程会话被中断。
- ISO8583报文工具类(组装和解析报文)
- python 动态获取对象的属性和方法,并执行它们
- [JAVA web]PermGen space错误,Target runtime Tomcat 7.0 is not defined,EntityManager方法简介
- linux下获取设置ip地址等函数
- 如何灵活使用 ActionBar, Google 音乐ActionBar 隐藏和显示效果
- web.xml配置详解
- AlertDialog弹窗在屏幕底部