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-ref  name=””/>

</interceptor-stack >

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>

0 0