struts2利用webwork2核心和struts1的名气

  优点:1.无侵入式设计

2.拦截器,aop编程

3.支持表现层技术

4.可对指定方法校验

5.国际化资源文件管理

  缺点:太灵活,知识零碎



搭建Struts2的开发环境

1、找到所需的jar包:发行包的lib目录中(不同版本需要的最小jar包是不同的,参见不同版本的文档。2.1.7)

struts2-core.jar  核心jar包

xwork-2.jar  xwork核心jar包

ognl.jar  ognl表达式

freemarker.jar  FreeMarker模板

commons-logging.jar  日志

commons-fileupload.jar  文件上传

commons-io.jar  文件上传依赖的包

2、在应用的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>

3、配置核心控制器,就是一个过滤器

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


4、如果TOmcat启动成功,没有报错,证明环境搭建成功!



开发第一个Struts2案例

1、编写struts.xml配置文件

 <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
     "http://struts.apache.org/dtds/struts-2.1.7.dtd">
  <struts><!--这是Struts2配置文件的根元素-->
     <package name="p1" namespace="/test" extends="struts-default">
        <!--
            pageckage:方便管理动作元素
                name:必须有。包的名称,配置文件中必须保证唯一。
                namespace:该包的名称空间,一般是以"/"开头
                extends:集成的父包的名称。struts-default名称的包是struts2框架已经命名好的                        一个包。(在struts2-core.jar中有一个struts-default.xml中)
                abstract:是否是抽象包。没有任何action元素的包就是抽象包(java类)
        -->
   <action name="helloworld" class="cn.struts2.action.HelloWorldAction" method="sayHello">
          <!--
            action:代表一个请求动作
                name:同包中必须唯一。动作的名称
                class:负责处理的JavaBean的类全名
                method:JavaBean中的对应处理方法。
                      (动作方法:特点是,public String 方法名(){})
                -->
    <result name="success">/1.jsp</result>
          <!--
             result:结果类型
                 name:动作方法返回的字符串
                 主体内容:View的具体地址。
           -->
     </action>
   </package>
 </struts>


2、根据配置文件,创建需要的javabean和对应的动作方法,在动作方法中完成你的逻辑调用。

package cn.struts2.action;
public class HelloWorldAction implements Serializable {
    private String message;
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String sayHello(){
        message = "helloworld by struts2";
        return "success";
    }
}


3、编写View,index.jsp显示结果

${message}

 

4、访问helloworld动作的方式:http://localhost:8080/struts2day01/test/helloworld   应用名称/包的名称空间/动作的名称

   默认情况下:访问动作名helloworld,可以直接helloworld,或者helloworld.action

     http://localhost:8080/struts2day01/test/a/b/c/helloworld

/struts2day01:应用名称

                        /test/a/b/c:名称空间

helloworld:动作名称

  搜索顺序:名称空间

/test/a/b/c  没有helloworld

/test/a/b 没有helloworld

/test/a      没有helloworld

/test        有了,调用执行


 12-动作类的生命周期 

1.struts2对用户的每次请求都会创建一个action, action是线程安全的,

2. 实例化对象必须调用javabean 公共的无参构造方法,如果没有这个构造方法,无法实例化


 13-struts2根据模块设置配置文件,将模块配置文件插入到 struts.xml中就可以了。 模块配置文件必须与struts.xml有相同的根元素<struts> ,相同的DOCTYPE声明


 14-动态方法调用

1. actionName!methodName 不建议使用

2.关闭上述动态调用, 参考 struts2-core-->org.apache.struts2-->static-->default.properties搜索dynamic


 15-使用通配的动态调用 占位符

<action name="orders_*" class="cn.itcast.action.OrdersAction" method="{1}">

<result type="dispatcher" name="success"> /orders/{1).jsp</result>

</action>

  

  16-获取表单请求参数

1.struts2自动将接收的请求参数,赋值给对应action类的同名属性。通过内省调用与请求参数同名属性的setter方法来获取

2.基本类型及其包装类 自动转换为String类型 

3.封装数据由struts2完成了

4.请求参数乱码,post提交,在struts.xml中设置常量<constant name="stuts.i18n.encoding" value="Utf-8"/>相当于request.setCharacterEncoding("utf-8")

set提交,设置乱码过滤器