struts2总结详解 (二)

2014-11-24 11:27:35 · 作者: · 浏览: 26
果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action ,在默认namaspace的package里面还寻找不到该action,页面提示找不到action

5.寻找namespace为/的package,如果存在这个package,则在这个package中寻找名字为test的action,当在package中寻找不到action或者不存在这个package时,都会去默认namaspace的package里面寻找action,如果还是找不到,页面提示找不到action。

3>如何编写一个action
Struts2中的action和 之前的servlet的功能是一致的,我们来回忆一下以前的servlet做些什么事情?

1,接受客户端的请求,如何有参数的话要接受参数。接收到的参数有时候会封装成业务对象,有时候不封装直接给业务方法用。

2,调用业务方法处理业务请求.

4,将业务请求返回的数据设置到合适的域对象[可选].

3,页面转发跳转到servlet或jsp。

好我们来正式写一个action,以前servlet有三种实现方式

1, implementServlet

2, extendsGenericServlet

3, extendsHttpServlet

现在action实现也有3种实现方式

1. 普通的java类

2. implement Action

3. extendsActionSupport

4>ActionDefault
Usually, if an action is requested, and the frameworkcan't map the request to an action name, the result will be the usual "404 - Page not found" error. But, if youwould prefer that an omnibus action handle any unmatched requests, you canspecify a default action. If no other action matches, the default action is used instead.

Omnibus多项的

/UnderConstruction.jsp

注意:配置欢迎页面

/UnderConstruction.jsp

Web.xml

index

注意:用默认action可以解决404,但是是package级别的处理4.4。

5>路径问题说明
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)或者使用myeclipse经常用的,指定basePath

2、找到该类的处理方法

1) Action执行的时候不一定要执行其中的execute方法

Method=add 默认的方法是excute()

2).DMI(动态方法调用)

!add dymanic method invoked

3).Wildcard Method 通配符方法

第一种:方法通配符

/Student_{1}_success.jsp

第二种:笑脸通配符*_*

/{1}_{2}_success.jsp

其中{}里的数字代表第几个*

比DMI的好处?

约定优于配置!便于统一规范

3、如何返回结果

Action中表示跳转的目的地使用了在struts.xml配置的字符串,格式为:,type可以有多种选择,Struts2支持各种视图技术,例如JSP、JSF、XML等,默认的是JSP。

常见的type类型配置如下:

1) Dispatcher

默认类型转发到jsp页面,一下几种实现同一效果

/Success.jsp

/Success.jsp

/Success.jsp

访问显示地址:localhost:8080/工程名/namespace/action

2) redirect

重定向到JSP页面,和response.sendRedirect(“”)的效果一样。

/Success.jsp

访问显示地址:localhost:8080/工程名/XXX.jsp

3) chain

转发到一个action

r1

r1为转至的action名 不要加/

访问显示地址:localhost:8080/工程名/namespace/action(本action名)

如果另一个action不是本包的action(到docs\guidus下找到result)

myaction

/test

4) redirection

客户端跳转至action

r2 r2为转至的action

访问显示地址:localhost:8080/工程名/XXX.jsp

Result结果类型:

注意:

一个package下的多个action如何共享一个结果?

另一个package下的action如何访问 一个页面的包继承,就可以获得父类包的配置

应用场景:

有权限管理,用户管理,角色管理三个模块。如果有公用的默认访问页面。就可以定义一个公用包定义默认访问页面。

动态结果集

${nextAction}

nextAction为action 中的字符串变量 如nextAction=“/success.jsp”

优点:动态地确定显示的jsp

FragmentAction implementation

private String nextAction;

public String getNextAction() {

return nextAction;

}

FragmentAction configuration

${nextAction}

注意

不是el表达式而是ognl表达式

用的不多,了解就可以。

在jsp中引入标签库 <%@ taglib prefix="s"uri="/struts-tags"%>

ResultWithParam

Struts中

class="com.student.userAction”>

/user_success.jsp t=${type}

JSP中

一次request只有一个值栈。所以客户端跳转时候才用到。

一次request只有一个值栈,不同的action都可访问

从actionContext中取值

向结果传参数 跳到另一页面 取出原先传入的参数 result type=“redirect”

gobal-result 全局结果集 其他包如果想用