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

来源:互联网 发布:如何打造淘宝店铺爆款 编辑:程序博客网 时间:2024/06/11 23:47

一.命名空间

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方法
0 0
原创粉丝点击