分享

struts2.x深入探索

 英昌知识汇聚馆 2011-11-21

重点研究:struts2-core-2.x.x.jar\org.apache.struts2\defautl.properties文件。

重写default.properties文件中的内容。

src目录下创建名为struts.properties文件。主要是设置一些常量。

struts-default.xml文件也一样很重要

1、重写默认struts.i18n.encoding=UTF-8这一行为:

struts.i18n.encoding=gbk。也可以改变提交中文是乱码的问题。与在struts.xml文件中写上<constant></constant>标签 的效果是一样的。

2、改写提交的时候action的后缀名

 默认:struts.action.extension=action

可以改成自己想要的后缀名:struts.action.extension=do

3、自动被struts2加载的默认配置文件名:

默认:struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml

当然也可以自己改变它。

 

研究struts.xml文件.需要先重点研究struts2-core-2.x.x.jar\struts-default.xml文件。

1struts.xml中的<package  namespace=/hello></package>标签对中的namespace属性命名空间概念。它主要是用来将不同的路径分隔开。还需要在jsp页面的form表单的action属性值加上 /hello/xxx.action .

2struts.xml文件宜采用模块化的方式来创建多个struts*.xml文件,然后在struts.xml文件中通过<include  file=struts*.xml></include>方式来加载其它的struts.xml文件。在大型的项目中,这种情况是很常用的。

 

总结:struts2中的MVC模型中,C指的是控制器层,即web.xml中的FilterDispatcher,也称核心控制器;M指的是模型层(业务逻辑层),即是action的类进行调用业务罗辑的dao;V指的是表现层,即Jsp页面展现组用户的视图。

 

 

 

 

下面研究一下模型驱动情况:以前表单的属性字段都是直接写在action类中的(也叫属性驱动)。现在改变一下模型,将属性字段全部写在一个类(javaBean)中(模型驱动),然后在整个mvc的流程中,始终由该类的对象来进行传递。步骤如下:

1、  先创建一个Bean,用来封装表单的字段。User.java

public class User{

   private String username;

   private String password;

   private int age;

   private Date birthday;

   private Date graduation;

   //生成set(),get()方法,在此略

}

2、  创建一个action,继承ActionSupport并且实现ModelDriver<User>.泛型。

public class RegisterAction extends ActionSupport implements ModelDriver<User> {

//创建一个javaBean对象

   private User user = new User();

//需要实现ModelDriver接口中的方法

   public User getModel(){

//返回user对象

       return user;

}

//重写ActionSupport中的方法

public String execute() throws Exception{

 

    return SUCCESS;

}

}

3、  struts.xml中配置action.这与之前的配置方法一样

 

但是更多的程序员,还是更喜欢使用属性驱动的方式来进行开发。

 

 

struts2中防止表单重复提交(即提交后,点刷新时,应该返回到最初页面):用struts2标签

1、需要在<form></form>标签对中加入:

    <s:form>

        <s:token></s:token>

</s:form>

2、需要在struts.xml中的相应的action中配置相应的拦截器。并且需要把默认的拦截器也写上。

<action   name=”…” class=”…”>

    <result name=success>/success.jsp</result>

<result name=input>/register.jsp</result>

//当出现重复提交时,反回到的页面

    <result name=invalid.token>/register.jsp</result>

//配置对表单重复提交的拦截器

    <interceptor-ref  name=token></interceptor-ref>

//既然手动配置了一个重复提交的拦截器,就需要配置一个默认的拦截器

    <interceptor-ref  name=defaultStack></interceptor-ref>

</action>

 

如果需要在页面上提示用记重复提交表单的相关信息,需要在含有表单的jsp页面里加上

<s:actionerror/> 即可。这是struts2内部定义好的信息,如果想显示息定义的提示信息,需要在资源文件中添加相应的内容。

struts.messages.invalid.token=\u8bf7\u4e0d\u8981\u91cd\u590d\u63d0\u4ea4\u8868\u5355

上面一串unicode是“请不要重复提交表单”通过native2ascii转换过去的。

 

struts2servlet进行耦合

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多