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多项的
注意:配置欢迎页面
Web.xml
注意:用默认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 通配符方法
第一种:方法通配符
第二种:笑脸通配符*_*
其中{}里的数字代表第几个*
比DMI的好处?
约定优于配置!便于统一规范
3、如何返回结果
Action中表示跳转的目的地使用了在struts.xml配置的字符串,格式为:
常见的type类型配置如下:
1) Dispatcher
默认类型转发到jsp页面,一下几种实现同一效果
访问显示地址:localhost:8080/工程名/namespace/action
2) redirect
重定向到JSP页面,和response.sendRedirect(“”)的效果一样。
访问显示地址:localhost:8080/工程名/XXX.jsp
3) chain
转发到一个action
r1为转至的action名 不要加/
访问显示地址:localhost:8080/工程名/namespace/action(本action名)
如果另一个action不是本包的action(到docs\guidus下找到result)
myaction
/test
4) redirection
客户端跳转至action
访问显示地址:localhost:8080/工程名/XXX.jsp
Result结果类型:
注意:
一个package下的多个action如何共享一个结果?
另一个package下的action如何访问 一个页面的包继承,就可以获得父类包的配置
应用场景:
有权限管理,用户管理,角色管理三个模块。如果有公用的默认访问页面。就可以定义一个公用包定义默认访问页面。
动态结果集 nextAction为action 中的字符串变量 如nextAction=“/success.jsp” 优点:动态地确定显示的jsp FragmentAction implementation private String nextAction; public String getNextAction() { return nextAction; } FragmentAction configuration 注意 不是el表达式而是ognl表达式 用的不多,了解就可以。 在jsp中引入标签库 <%@ taglib prefix="s"uri="/struts-tags"%> ResultWithParam Struts中 class="com.student.userAction”> JSP中 一次request只有一个值栈。所以客户端跳转时候才用到。 一次request只有一个值栈,不同的action都可访问 向结果传参数 跳到另一页面 取出原先传入的参数 result type=“redirect” gobal-result 全局结果集 其他包如果想用