Struts2学习笔记(一)——命名空间、路径、通配符


一.命名空间

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方法

猜你喜欢

转载自yyzjava.iteye.com/blog/1273265