Struts2入门

一、搭建Struts2的开发环境
1、把struts解压缩后->struts-blank.jar解压缩->中的web-inf->lib中的jar包全部拷贝到你的应用中
2、在web.xml中增加以下过滤器的配置,拷贝如上的路径……..web-inf->web.xml

  <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
          </filter>
          <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
          </filter-mapping>

3、在你的开发环境的src目录下,建立struts.xml配置文件路径\struts-2.3.14.2\apps\struts2-blank\WEB-INF\classes\struts.xml

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

        </struts>

这样,Struts2环境就可以搭建好。
下面总结struts.xml文件的使用配置

一、核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 核心配置文件 
    有了该配置文件,但必须有个东西,根据配置文件,指挥着程序走,就是控制器.根据配置文件,指挥控制器进行控制.
    所有的请求都要经过过滤器,但是并不是所有的请求都需要过滤器处理!因此请求时会在请求后缀名上加上.action
-->
<framework>
    <!-- 
    action:
        name:必须有,且唯一。唯一标示action。
        class:必须有,要执行哪个JavaBean的类名<!--通过后面的学习发现可以没有,因为默认继承ActionSupport-->
        method:可以没有。没有的话就是默认值execute。JavaBean中对应的操作方法。例如一个Customer的JavaBean类中一个添加用户的方法,对应操作方法的特点是:public String addCustomer(){}
        "addCustomer"作为Customer类的方法,把自己的信息保存起来
        当要执行action name="addCustomer"动作时,对应的Customer类中的method="addCustomer"方法
        当执行method="addCustomer"方法时要有结果,最起码"成功"或者"失败"
     -->
    <action name="addCustomer" class="com.wnl.Customer" method="addCustomer">
        <!-- 
        result:代表着一种结果。type决定结果的行为,例如重定向,下载等等。
            type:可以没有,默认是dispatcher。转向目标的类型。dispatcher代表着请求转发
            name:必须有。对应的是JavaBean中addCustomer的返回值,根据返回值的不同进行转发或者重定向的操作
            主体内容:必须有。目标资源的URI
        -->
        <result type="redirect" name="success">/success.jsp</result>
        <result type="dispatcher" name="error">/error.jsp</result>
    </action>
    <!-- 当执行的操作是"action name="updateCustomer""时,找 Customer类的"updateCustomer"方法
        如果返回值为"success"时,就执行请求转发到"success.jsp"页面
    -->
    <action name="updateCustomer" class="com.wnl.Customer" method="updateCustomer">
        <result type="dispatcher" name="success">/success.jsp</result>
    </action>
</framework>

二、配置文件中的package

<package>:类似Java编程中的package

        name:取一个名字。分模块
        namespace:访问动作的路径。一般以"/"开头,在访问该包中的动作时加上此路径。默认值是:""
            当前:namespace="/hello/xxx"
            访问动作的uri: http://localhost:8080/day24_01struts2_quickStart/hello/xxx/aa/sayHello.action 能访问到
                namespace=/hello/xxx/aa中找sayHello.action 没有
                namespace=/hello/xxx中找sayHello.action 有

            namespace的访问路径的问题总结:
                http://localhost:8080/Struts/hello/xxx/aa/sayHello.action
                1、先找哪个包的namesapce="/hello/xxx/aa"
                    a、有这个namesapce:就在此包中找sayHello的动作,没有该动作就从默认包中找,有该动作就执行了
                    b、没有这个namespace:就继续找谁的namesapce="/hello/xxx"

                2、特殊的namesapce
                    namespace="/":不是默认的
                    namesapce="":这是默认的,只要找不到的都在此处找

三、Struts2框架提供的默认的配置文件

        struts-default.xml:在struts2-core.jar包中-->meta-inf-->struts-default.xml,在其中搜索"struts-default",可以看到定义内容
    <package name="default" namespace="/hello"  extends="struts-default">
        <action name="sayHello" class="com.itheima.actions.HelloAction" method="sayHello">
            <!-- 执行sayHello方法,希望显示结果的地方是一个页面,此页面就是一个result,其中的name对应方法的返回值 ,当返回值为
            success时转向1.jsp页面,type指明是转发还是重定向,其实结果集result就是一个类,其中"dispatcher必须有定义
            就第一在struts-default包中,所以不写此包,启动服务器时就会报错!"
            其实是通过"dispatcher"名字,引用了一个类,此类的名字可以在struts-default.xml文件中找到,并进一步查看此类的定义-->
        <result name="success" type="dispatcher">/1.jsp</result>
            </action>
    </package>

四、Struts2提供的常量在struts2-core-2...jar的org.apache.struts2–>default.properties文件中


    要覆盖这些常量:在struts.xml中通过
    <constant name="struts.enable.DynamicMethodInvocation" value="false" /><!-- 动态方法调用 true就允许动态调用, false不允许-->
    <constant name="struts.devMode" value="true" /><!-- 开发者模式  true, tomcat会打出更详细日志-->
    <constant name="struts.action.extension" value="action,,do" /><!-- 将调用时的扩展名改为.do .action 或者不写扩展名-->
    <constant name="struts.configuration.xml.reload" value="true"></constant><!-- 自动加载 -->
    解决MyEclipse不能提示xml配置文件的方法。s
    将\struts-2.3.14.2\src\core\src\main\resources\struts-2.3.dtd拷贝到webRoot\dtds(自定义的文件夹中)
    自动显示提示信息的设置:window/Preferences/xml/xmlcatalog/中/add中设置
    http://struts.apache.org/dtds/struts-2.3.dtd

五、struts.xml中标签的默认值

<action>
        name:动作名称。同一个package中的action的name必须唯一。必须属性
        class:指定动作类的全名。默认是:com.opensymphony.xwork2.ActionSupport在<struts-default.xml>中可以找到
        method:指定动作类中的动作方法。默认是execute。此方法直接返回SUCCESS,而SUCCESS是Action.class中定义的常量"success"
                注意:动作方法必须是public的,返回值是String,没有参数的方法。
    <result>
        name:结果名称。对应动作类的返回值。默认是success
        type:结果类型。默认是dispatcher。
        <include file="example.xml"/>:将其它的.xml文件包含进来
    动作方法通配符的使用:
        <action name="*_*" class="com.wnl.actions.{1}" method="{2}">
            <result>/{2}.jsp</result>
        </action>       
    调用方法:Struts/hello/CustomerAction_addCustomer其中:CustomerAction代表{1},addCustomer代表{2}

六、在动作类中获取JavaWeb开发常用的对象
方式一:
ServletActionContext的静态方法
方式二:
使动作类实现相应的接口:
ServletRequestAware
ServletResponseAware
ServletContextAware
实现了以上接口的动作类,在执行方法前,会有一个拦截器负责把相应的对象给你
这个拦截器名称是:servletConfig,对应的实现类是:org.apache.struts2.interceptor.ServletConfigInterceptor

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值