一.命名空间
namespace决定了action的访问路径,默认为"",可以接收所有路径的action
namespace可以写为/,或者/xxx,或者为/xxx/yyy,对应的action访问路径为/index.action,/xxx/index,或者/xxx/yyy/index.action
namespace最好也用模块来进行命名
二.路径问题
Struts2中的路径问题是根据action的路径而不是jsp路径确定,因为action是经过转发请求给某个jsp页面,浏览器中显示的路径并没有发生变化,相对路径是相对于当前显示的页面,所以尽量使用绝对路径而不是相对路径。
获取绝对路径的方法如下:
<%
String path = request.getContextPath();//取得根路径(即项目名)
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";//取得协议名、IP(或域名)、端口名
在head标签中加上:
<base href="<%=basePath %>"/>//加上此句之后就可以直接使用相对路径了,相对于应用程序的跟路径即可
如果没有加上这一句,可以在相对路径之前加上basePath即可
三.配置文件struts.xml中通配符的使用
看下面的action配置
<package name="actions" extends="struts-default" namespace="/actions">
<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>
使用通配符配置,我们能将配置量降到最低
比如我们在地址栏中输入....../Studentadd访问到的便是对应action中的add方法(method={1}),处理之后请求转发到Studentadd_success.jsp页面(/Student{1}_sucess.jsp)
我们注意到通配符可以有多个,我们可以用{}加上下标来访问,下标是从1开始的,在另外一个action中就是这样
显然我们不能输入随便一个字符串来访问某个页面,前提是这个页面是存在的,这就要求我们要实现已经写好了这些页面。我们要遵循 “约定优于配置”的原则
三.如何在action中取得请求中的参数
我们先看一个action
public class UserAction extends ActionSupport {
private String name;
private int age;
public String add() {
System.out.println("name=" + name);
System.out.println("age=" + age);
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
我们并没有像Struts那样通过一个HttpServletRequest对象取得请求中的参数,而是在action中通过setXXX方法来设置它的属性的值。这个调用是Struts2的核心控制器完成的,在action创建之后,如果存在请求字符串,控制器会调用action的setXXX方法来传入相应的值,如访问.../xxx/xxx?name=xiaoming&age=8,控制器分别调用setName和setAge方法