Java EE SSH框架之Struts2 (2)—— Struts2访问流程、架构及配置

上篇中谈到了Struts需要以下基础jar包,这里粗略补充一下各个jar包的作用:


一、Struts2的访问流程及架构

1.1Struts2访问流程
此图仅仅帮助理解Struts2访问流程



1.2Struts2架构


Struts核心——拦截器

1.表面上看,拦截器帮助我们封装了很多功能。

2.拦截器优秀的设计——可插拔式设计。

3.aop(面向切面编程)思想。


二、struts.xml配置

下面是struts.xml中的部分配置:

<struts>
    <constant name="struts.devMode" value="true" />
    <package name="Struts2_StudyDemo" namespace="/hello" extends="struts-default">
        <action name="index" class="com.zl.action.HelloAction" method="excute">
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>
2.1 package元素

     将Action配置封装,就是可以在package中配置很多action。(和Java中的package不能混为一谈)

属性:

《1》name:给包起个名字,起标识作用,随便起,不能与其他包同名。

《2》namespace:给action的访问路径中定义一个命名空间。

《3》extends:继承一个指定包(必选)。

《4》abstract:包是否为抽象的,标识性属性,标识该包不能独立运行,专门被继承。


2.2  action元素

    配置Action类。

属性:

《1》name:设定了Action访问资源名。

《2》class:Action的完整类名。

《3》method:指定调用Action中的哪个方法处理请求。


2.3  result属性

     结果配置。

属性:

《1》name:标志结果处理的名称,与action方法的返回值对应。

《2》type:指定调用哪一个Result类来处理结果,默认使用转发。

《3》标签体:填写页面的相对路径


三、Struts2常量配置

3.1 修改Struts2常量配置

Struts2默认常量配置位置:

打开default.properties,可以看到如下的一些常量配置信息:

想要修改这些配置信息,有如下三种方式:


《1》struts.xml中配置(重点):在struts标签下添加<constant>标签。如下:    

<constant name="struts.i18n.encoding" value="GBK"></constant>

《2》在src下新建一个struts.properties文件(了解):把需要修改的配置信息复制粘贴过来,修改。如下:    struts.i18n.encoding=GBK

《3》web.xml中配置(了解):在<web-app>标签下添加<context-param>标签。具体如下:

<context-param>
    <param-name>struts.i18n.encoding</param-name>
    <param-value>GBK</param-value>
</context-param>

注:上述写的《1》《2》《3》顺序也是它们的加载顺序,后面加载的会覆盖前面加载的。

      不过在真正的开发中只会在struts.xml配置即第《1》种。


3.2常量配置

《1》struts.i18n.encoding=UTF-8(国际化)——解决Post提交乱码

《2》struts.action.extension=action,,(指定访问action的后缀名)

《3》struts.devMode = false(指定Struts2 是否以开发模式运行,默认为false)

        为true时:1.热加载主配置文件(不需要重启struts.xml即可生效)

                        2.提供更多的错误提示信息,方便开发时的调试


3.3使用<include>元素引入其他struts配置文件

例,在src下的struts.xml中引入com.zl.action包中的struts.xml:

<include file="com/zl/action/struts.xml"></include>


四、Struts2配置的进阶

4.1 动态方法调用(重点)

左图BookAction中有四种方法,根据用户不同的选择,这四种方法每一个方法都需要在struts.xml里注册一个action元素(右图),过于繁琐。在这种情况下,可以使用动态方法来配置。

     


有以下两种配置方法:

《1》在struts.xml中设置常量struts.enable.DynamicMethodInvocation的值为true


该常量表示配置动态方法调用是否开启,默认是关闭的,需要开启。

<struts>
    <contant name="struts.action.extension" value="action"></constant><!--指定访问时的action的后缀名为.action-->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" ></constant>
    <package name="IntercepterStruts2Demo" namespace="/" extends="struts-default">
        <!-- 关于book操作 -->
        <action name="BookAction" class="com.zl.action.BookAction">
             <result>/success.jsp</result>
        </action>
    </package>
</struts>

在访问add方法时:

http://localhost:8080/IntercepterStruts2Demo/BookAction!add.action

在访问find方法时:

http://localhost:8080/IntercepterStruts2Demo/BookAction !find.action


以此类推,这种方式显然很麻烦,所以一般用下面这种:


《2》*通配符方式:使用{1}取出第一个*通配的内容

(*前面的下划线可以是#或者没有或者别的,但一般都会用下划线)

<struts>
    <constant name="struts.devMode" value="true" />
    <package name="IntercepterStruts2Demo" namespace="/" extends="struts-default">
        <action name="BookAction_*" class="com.zl.action.BookAction" method="{1}">
             <result>/success.jsp</result>
        </action>
    </package>
</struts>

访问find()方法:

http://localhost:8080/IntercepterStruts2Demo/BookAction_find.action



4.2 Struts2中的默认配置(了解即可)
<struts>
    <package name="IntercepterStruts2Demo" namespace="/" extends="struts-default">
        <default-action-ref name="loginAction"></default-action-ref>
        <action name="loginAction" class="com.zl.action.LoginAction" method="excute">
            <result name="login">/login.jsp</result>
        </action>
    </package>
</struts>

《1》<action>中的class属性:默认为com.opensymphony.xwork2.ActionSupport。<default-action-ref>(需要自己手动配)用来修改默认Action,其中的name属性表示找不到包下的Action时,上例中会使用loginAction作为默认的Action处理请求。

《2》<action>中的method属性:可以不写,默认为”execute“。

《3》<result>中的name属性:默认为success。

《4》<result>中的type属性:dispatcher转发。


五、Action类配置

《1》创建一个类,可以是POJO。

           POJO:表示不用继承任何父类,也不需要实现任何接口。

           使struts2框架的代码侵入性更低。


《2》实现一个接口Action。

package com.zl.action;

import com.opensymphony.xwork2.Action;

public class ActionDemo implements Action{
	@Override
	public String execute() throws Exception {
		return null;
	}
}

    里面必须要实现execute()方法,提供action方法的规范。为了方便,Action接口预置了一些字符串,可以在返回结果时使用。


《3》继承一个类ActionSupport。(推荐使用)

     帮我们实现了Validateable、ValidationAware、TextProvider、LocalProvider这些接口,当我们需要用到这些接口的实现时,不需要自己来实现了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值