Struts2学习笔记(1)之Action

来源:互联网 发布:观山4字能值多少钱知乎 编辑:程序博客网 时间:2024/06/07 03:41

Action

URL的拆分


1.        除工程名外,其余部分分为2部分。一是用来对应package,二是用来对应package内的action。

2.        Namespace决定了action的访问路径,默认为””,可以接收所有路径的action

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

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

3.        action:struct2中每次请求都会创建一个action。

4.        进入到action中

1)        若后面有Class,首先创建这个action的类,然后默认调用这个action类中的execute方法,根据返回String类型的值执行result,显示视图。

2)        若没有默认是ActionSupport类中的execute,其中的方法只返回success。

具体视图的返回可以由用户自己定义的Action来决定

具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容

实现一个Action的常用方式

 

1.        具体Action的实现可以是一个普通的java类,里面有public String execute方法即可

2.        者实现Action接口

3.        不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法

 

Path路径问题:

struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。即在” http://localhost:8080/Struct_day1/path/”添加index.jsp 

1.        解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径) 

2.        或者使用myeclipse经常用的,指定basePath

<%

String path = request.getContextPath();

String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

在head中设置:<basehref="<%=basePath %>>"/>

在Action中指定方法执行

1.        Action执行的时候并不一定要执行execute方法可以在配置文件中配置Action的时候用method=来指定执行哪个方法

2.        也可以在url地址中动态指定(动态方法调用DMI)(推荐)

         <ahref="<%=context %>/user/userAdd">添加用户</a>

         <br/>

         <ahref="<%=context %>/user/user!add">添加用户</a>

         <br/>

前者会产生太多的action,所以不推荐使用

3.        使用通配符*:可将配置降到最低

1)        在action中根据分割的通配符会获得{1}、{2}… …参数。

2)        在method=”???”中可以使用通配符所得到的参数{1}、{2}… …

3)        在result中显示的资源也可以通过通配符拼接得到。

 

接收参数的三种方式

1.        用属性来接收:Struct在创建Action的实例时,直接将参数赋给了这个action的实例。(action类中有定义了接收参数的成员变量)。

2.        DemainModel:通过一个对象来接收。Struct会帮我们自定创建对象。

1)        创建一个user  bean

2)        在action中定义一个成员变量user,写get和set方法。

3)        <ahref="user/user!add?user.name=a&user.age=8">添加用户</a>

4)        在Action中可直接通过user获得值。

3.        通过ModelDriven<User>接收

1)        action实现ModelDriven<user>接口

2)        创建一user对象,并调用构造器创建实例。

3)        重写getMode()方法。


错误校验信息

使用addFieldError方法和s:filedErrot标签简单处理数据校验。

1.        Action中通过addFieldError(“name”,value)的方法,加如错误信息。即放入值栈中

2.        在jsp中通过s:fieldError、s:property两种方式通过name获得错误信息

 

Struts访问WEB元素

获取request、session、application、HttpServletRequest、HttpSession、

ServletContext的引用:

1.        方式一通过ActionContext获取:(前三种)

1)        Request的获取:ActionContext.getContext().get(“request”);

2)        Session的获取:ActionContext.getContext().getSession();

3)        Application的获取:ActionContext.getContext().getApplication();

4)        分别获得Map类型的对象,通过put(name,value)方法添加数据。

5)        Struts2,会自动将map遍历添加到相应的域对象中。在前台可直接通过域对象获取。

2.        控制反转方式/依赖注入:(前三种)这种最常用,最重要


1)        Action实现RequestAware、SessionAware、ApplicationAware。

2)        实现相应的get方法,获得的是Map类型的相应属性。

Struts2调用action的时候发现这个Action实现了RequestAware、SessionAware、ApplicationAware这些接口中的一个或多个。那么,struts2就需要调用他们的抽象方法,将对象向注入进去。

3.        方式三通过ServletActionContext获取(后三种)


4.        方式四,依赖注入(后三种)


默认action处理

<default-action-ref name=”index”></default-action-ref>:作用是如果在package中中不到指定的action,这默认使用name所指定的那个action。

意义:使网站更加友好。

1 0