Struts2初步

来源:互联网 发布:json格式保存到数据库 编辑:程序博客网 时间:2024/05/16 07:22

国庆放假回来,接着开始我们的J2EE学习。从今天开始,我们将持续两天的Struts2学习,前面我们学习了Struts1,那么既然有了Struts1,为何还要推出Struts2。主要因为Struts2有以下优点:①Struts2API和Servlet API不存在紧密的耦合 ②Struts2提供了拦截器 ③Struts2提供了类型转换器④Struts2支持多种表现层技术 ⑤Struts2可以对指定方法进行输入校验

1.     搭建Struts2开发环境步骤:

1)  找到开发Struts2应用需要使用到的jar文件

2)  编写Struts2的配置文件

3)  在web.xml中加入Struts2 MVC框架启动配置

2.     在Struts.xml中配置包

在struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action。在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。配置包时必须指定name属性,如果其他包要继承该包,必须通过该属性进行引用。包的namespace属性用于定义该包的命名空间。该属性可以不配置,对本例而言,如果不指定该属性,默认的命名空间为“”(空字符串)。通常每个包都应该继承struts-default包,struts-default包是由struts内置的,它定义了struts2内部的众多拦截器和Result类型。而Struts2很多核心的功能都是通过这些内置的拦截器实现

3.     访问路径:访问struts2中的action的URL路径由两部份组成:包的命名空间+action的名称

4.     Action配置中的各项默认值:

1)  如果没有为action指定class,默认是ActionSupport

2)  如果没有为action指定method,默认执行action中的execute() 方法

3)  如果没有指定result的name属性,默认值为success

5.     指定需要Struts 2处理的请求后缀:<constant name="struts.action.extension" value="do,go"/>

6.     Struts2提供了多种Result类型:dispatcher(默认值)、 redirect 、 redirectAction 、 plaintext

1)  如果重定向的action在别的命名空间下,需要指定Result的参数actionName和namespace

2)  在result中还可以使用${属性名}表达式,表达式里的属性名对应action中的属性,如:<result type="redirect">view.jsp?id=${id}</result>

7.     为应用指定多个配置文件:使用include标签

8.     定义Action可以使用!+方法名调用指定方法,如果不想使用动态方法调用,我们可以通过常量struts.enable.DynamicMethodInvocation关闭动态方法调用;也可以使用通配符定义action(指定action的name属性值为XXX_*,method属性值为{1})

9.     全局结果:当多个action中都使用到了相同result,这时我们应该把result定义为全局结果。通过<global-results>标签设置全局结果。

10.  Struts2可以通过基本类型或复合类型接收请求参数

11.  自定义类型转换器:需要继承DefaultTypeConverter类。注册时在Action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是Action的类名,后面的-conversion.properties是固定写法。在properties文件中的内容为:属性名称=类型转换器的全类名

12.  全局类型转换器:在WEB-INF/classes下放置xwork-conversion.properties文件 。在properties文件中的内容为:待转换的类型=类型转换器的全类名

13. 访问或添加request/session/application属性:有两种方法,方法一是使用ActionContext来得到相应作用域并添加和访问属性;方法二是使用ServletActionContext来得到原始的Servlet作用域并实现对属性的添加和访问

14.  文件上传:

1)  在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar

2)  把form表的enctype设置为:"multipart/form-data"

3)  在Action类中添加以下属性:

public String upload() throws Exception{

    String realpath = ServletActionContext.getServletContext().getRealPath("/images");

    File file = new File(realpath);

    if(!file.exists()) file.mkdirs();

    FileUtils.copyFile(uploadImage, new File(file, uploadImageFileName));

    return "success";

  }

}

原创粉丝点击