Struts2.1学习札记_02

Struts2.1学习笔记_02

struts配置文件简单说明:

namespace决定了action的访问路径,默认为"",可以接受所有路径的action

namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action.

namespace最好也用模块来进行命名。

对应的package最好最为一个模块。

reslut 默认的name是success

当action没有配置class属性是,默认执行的是xwork包下的ActionSupport类。

实现自己的action三种方法:

1.建立一个类,其中必须有 public String execute()方法。
2.建立一个类并实现Action接口。
3.建立一个类并继承ActionSupport。

实际路径与namespace路径不匹配,造成404,解决方案:

在jsp中加入:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
在<head>标签中加入:
 <base href="<%=basePath%>">

意思是所有<a>标签链接加入了base的地址。

Action的配置

在Action标签中加入属性method标签可指定调用这个action时调用的方法,不写则调用execute。不推荐使用这种方式。

推荐使用动态方法调用(DMI),在访问的action名称后加上!与方法名:如user!add

使用通配符配置:通配符可以将配置最简化。
在action的name属性,可以加入通配符*,如
<action name="*_*" class="com.hs.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
</action>
当客户端访问
http://localhost:8080/项目名/Student_add 则匹配到这个action。

使用通配符,一定是约定优于配置。

Action接收参数

有三种方法:
1.在接收参数的Action里定义与参数同名的属性,并加入set/get方法。struts2是根据set/get方法设置值的,而不是直接往属性里写。
2.使用domainModel(域模型,就是实体),在接收参数的Action中定义一个实体,如private User user;并加入set/get方法。不需要new

User对象,struts会实例化这个对象。参数的写法就是 xxxx?user.name=aa&user.age=15。如果碰到如注册程序中的密码与再次输入密码,这

样的话最好使用DTO(数据传输对象)的形式,先传输到DTO中,经过一系列验证,再复制到model中,最后经数据库处理。
3.使用ModelDriven(模型驱动),让接收参数的Action实现ModelDriven接口,接口需要加入泛型,实现接口中getModel方法,在Action加入

领域模型的属性,如

public class TestAction extends ActionSupport implements ModelDriven<User> {
 private User u=new User(); 
 public User getModel() {
  return u;
 }