Struts2学习笔记

Struts2框架学习过程:

   1.struts2工程搭建:

       a.打开myeclipse,新建一个web工程项目,在项目上右键点击Build Path选择Add External Archives……在弹出的对话框中选择struts2工程所需要的jar包(提示:6个jar  );

       b.添加完struts2项目所需要的jar包后,加入开发过程中所必需的struts配置文件(struts.xml)到classpath下;

       c.添加web.xml文件到开发项目中;

2.struts2中的Action创建方式(3种):

       a.手动写一个Action类,只要在这个Action类中有一个方法的名称是execute且返回值是String类型就可以,可以直接在方法中返回

       b.写一个Action类继承自ActionSupport,返回语句可以直接写"return SUCCESS"(SUCCESS是一个struts2定义好的字符串常量,直接拿来用);

       c.实现Action接口,返回语句直接写"return SUCCESS"(SUCCESS是定义在Action里的常量);

  struts.xml配置文件中的写法:

  这里的namespace含义为我们在访问Action的时候要加上一层包名,url如下-http://127.0.0.1:8888/struts2_01/user/user,result标签可以不写name属性默认跳转到success标示的页面;还有一点需要大家注意的地方,我们在以前的开发过程中每一次修改配置文件时都要重启tomcat,在struts2中提供了一个常量如图只需要将value的值设置为true即可;

  提示:我们在第一次开发struts2项目的时候在struts.xml中写内容时没有提示信息,此时,我们可以参考如下步骤:

window->preferences->选中Xml catalog->点击Add->->Location关联到struts2.0.dtd的路径(解压struts2的核心jar包,里面有个struts2.0.dtd文件)->ok;

  建议: 在开发的过程中我们尽量选择ActionSupport方式,因为它不仅实现了Action接口而且提供了大量我们可以直接拿来用的方法;

3.struts2的方法调用:

  注意在UserAction中也可以不出现execute方法,比如说写一个Add方法,如果想要被调用有以下几种方法:

       a.在UserAction里在struts.xml配置文件中action标签增加一个属性method="add",用来指明访问UserAction时,去调用Action的add方法;

       b.当UserAction里不止一个方法时,这时采用动态方法调用(DMI),在struts.xml文件中不需要添加method属性,只需要在调用的时候采取http://127.0.0.1:8888/struts2_01/user/user!del;

       c.DMI调用存在一个限制,当不同的方法需要到达不同的显示页面时,需要用到通配符

访问url:http://127.0.0.1:8888/struts2_01/user/useradd

灵活跳转到不同页面:

访问url:http://127.0.0.1:8888/struts2_01/user/User_add

4.struts2自动接收url参数:

      a.用Action的属性接收参数

访问url:http://127.0.0.1:8888/struts2_01/user/User_add?username=admin&password=123456

后台打印:

        b.使用DomainModel接收参数

其中User类来源于vo:

访问url:http://127.0.0.1:8888/struts2_01/user/User_add?user.username=admin&user.password=123456

    c.使用ModelDriven接收参数

访问url:http://127.0.0.1:8888/struts2_01/user/User_add?username=alice&password=123321

后台打印:

5.struts2访问web元素:

 

       a.定义成Map集合类型

页面显示用struts2的标签库:<%@ taglib uri="/struts-tags" prefix="s"%>

注意:在struts2的action中定义的属性会被自动保存在valueStack中,这里的元素可以直接通过<s:property value="" />获取,引号内写上属性名

       而在StackContext里的内容不能直接访问,struts2提供给我们一种方法“”,<s:property value="#request.r1"/>   访问

有一个值得注意的地方:我们放进去的是Map类型的request、session、application,而我们在页面取值的时候直接用request对象、session对象、application对象也能取出来,这是怎么回事呢?(struts2自动帮我们在Map和HttpServletRequest等建立了关联,直接把Map类型的元素复制到HttpServletRequest、HttpSession、ServletContext对象中)

      b.实现RequestAware/SessionAware/ApplicationAware接口(依赖注入)

    c.使用真实的request对象、session对象、application对象

      d.实现ServletRequestAware接口

6.Action中result的各种转发类型:

     相对于struts1中的forward,struts2有更多可选的转发类型,常见的有dispatcher(默认)、redirect、redirectAction、chain……

     当需要跳转到另一个action时,如果两个action在同一个包下,

当运用redirectAction时,valueStack里只有一个Action,就是第二次发请求所访问的action

当运用chain跳转到另一个action时,valueStack里会出现两个Action

当我们跳转的Action跟当前的action不在同一个包下时需要加上一对<param />标签

7.struts中常用的常量:

<指定默认编码集,相当于HttpServletRequest的setCharacterEncoding()>

<constant name="struts.i18n.encoding" value="UTF-8"/>

<开发模式,修改配置文件后,不需要重启tomcat>

<constant name="devMode" value="true">

<允许动态方法调用,默认值false>

<constant name="struts.enable.DynamicMethodInvocation" value="true">

注:这些常量的默认配置可以在struts的核心包下面的default.properties配置文件中查看

8.struts2中的模块化包含<include>

  <struts>

       <include file="struts_user.xml"/>

</struts>

9.struts2的国际化:

    a.全局资源下的国际化

     ->准备好国际化资源文件(MessageResources_zh_CN.properties和MessageResources_en_US);

     ->struts.xml里配置常量 <constant name="struts.custom.i18n.resources" value="MessageResources" />其中value里填写资源文件的basename名称

     ->页面用标签<s:text name=""/>获取国际化的内容,其中name属性里填写资源文件的key值

    b.包级别下的国际化(处于该包及子包下的action都可访问)

     ->国际化资源文件名称改为package_zh_CN.properties和package_en_US.properties

     ->不需要在struts.xml里配置常量<constant name="struts.custom.i18n.resources" value="MessageResources" />

   c.类级别下的国际化(只能在该类中访问)

     ->国际化资源文件名称改为UserAction_zh_CN.properties和UserAction_en_US.properties

10.动态国际化:

     首先准备好配置文件

<constant name="struts.custom.i18n.resources" value="MessageResources" />

    点击以下超链接,实现动态切换

UserAction1中的方法this.getText()用来填充占位符,在UserAction1中有一个msg属性,用来存放填充完毕后的资源文件里的key所对应的值,msg由struts2自动帮我们保存在valueStack中,页面中用标签<s:property value=""/>来获取

运行后点击“debug”按钮,就可以查看valueStack里保存的msg对应的资源化文件信息

11.动态结果集:

在Action中设置path属性,path的值会被自动保存到valueStack中,在struts.xml里通过${path}来取值,根据path的取值不同,跳转到不同的结果页面;

 

 

 

 

 

 

posted @ 2013-10-15 17:42  xudong91  阅读(315)  评论(0编辑  收藏  举报