struts2 总结

来源:互联网 发布:知天命之年的古诗词 编辑:程序博客网 时间:2024/05/22 12:49

Struts2体现了MVC模式:各种action是C,后台数据结构是M,jsp页面是V

一个cction对应一个或多个result,

<action name="login"        class="com.ustc.css.action.LoginAction"><result name="error">error.jsp</result>              <result name="success">success.jsp</result>     

result通常有两个属性:
 name:指定所配置的逻辑视图名(可以不写,默认为“success”)
 type:指定结果类型(可以不写, 默认为“dispatcher”)

Struts.xml中,使用开发者模式 便于调试:

<constant name="struts.devMode" value="true" />

namespace决定了action的访问路径,默认为“”,可以接收所有路径的action
namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action 或/xxx/yyy/index.action
namespace最好也用模块进行命名

Struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然 可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到websspp的路径)或者使用myeclipse经常用的,指定basePath

Action在执行的时候并不一定要执行execute()方法
一般action类继承ActionSupport类
可以在配置文件中配置Action时用method=xxx来指定执行哪个方法,也可以在url地址中动态指定(动态方法调用DMI)(推荐)。
前者会产生太多的action,所以不推荐使用

package com.bjsxt.struts2.front.action;import com.opensymphony.xwork2.ActionSupport;public class IndexAction3 extends ActionSupport {    @Override  //重写父类的execute方法    public String execute() {        return "success";    }}

使用通配符,将配置降到最低

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts SYSTEM" http://struts.apache.org/dtds/struts-2.0.dtd" PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"><struts>    <constant name="struts.devMode" value="true" />    <package name="actions" namespace="/actions" extends="struts-default">          <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">            <result>/Student{1}_success.jsp</result>        </action>        <!—多个通配符用法—>        <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">        <result>/{1}_{2}_success.jsp</result><!-- {0}_success.jsp -->        </action>    </package></struts>

不过一定要遵守“约定优于配置”原则,看下面struts.xml:

*为通配符,对于action:Student,所有的Studentxxxx(后面跟任何东西)都匹配这个action。对于method=”{1}”,{1}对应前面的内容,然后调用Student里的相应方法。
对应result定位至/Student{1}_success.jsp,这个{1}也是*中内容

紧接着代码示例多个通配符*用法:
action name=”_“匹配两个字符串a,b,{1}表示第一个(字符串a),{2}表示第二个(字符串b内容)。例如访问http://localhost:8080/项目名/actions/Teacher_add
则匹配com.bjsxt.struts2.action.TeacherAction类,调用add方法,并定位至
Teacher_add_success.jsp

好处:使配置文件具有通用性,降低了工作量,可以少写action
注意:匹配action时首先查找精确匹配,匹配不上才检测通配符。若都是通配符,则优先匹配写在前面的

使用action属性接收参数:
方法一:在url里面写参数。url末尾加上?参数1=xxx&参数2=xxx&参数3=xxx,以此类推。
参数可以和class里面的成员变量一一对应(内部机制:Struts自动调用get,set方法,前提是要写好)

方法二:使用domainModel。 即用对象来接收参数:url末尾加上
?user.name=xxx&user.age=xxx
其中user是User类的一个对象,方法二相当于方法一基础上又加了一层

方法三:ModelDriven

package com.bjsxt.struts2.user.action;import com.bjsxt.struts2.user.model.User;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class UserAction extends ActionSupport implements ModelDriven<User>{    private User user = new User();    public String add() {        System.out.println("name=" + user.getName());        System.out.println("age=" + user.getAge());        return SUCCESS;    }    @Override    public User getModel() {        return user;    }}

中文问题:在struts.xml中加入:

<constant name="struts.i18n.encoding" value="GBK"/>

ACTION 总结
1. 实现一个action的最常用方式:从ActionSupport继承
2. DMI动态方法调用
3. 通配符配置_ {1}{2}
4. 接收参数的方法(一般用属性或者DomainModel来接收)
5. 简单参数验证addFieldError
a) 一般不使用呀struts2 的UI标签
6. 访问web元素
a) Map类型
i. IoC(控制反转)
ii. 依赖struts2
b) 原始类型
i. IoC(控制反转)
ii. 依赖struts2
7. 包含文件配置
8. 默认action处理

原创粉丝点击