struts2笔记(入门)(3)

2019-08-30 21:49

/index.jsp

说明:如果没有未action指定class,默认就是ActionSupport类,如果没有为action指定method属性,则默认执行execute方法,如果没有指定result的name属性,默认值为success。知道了这些再结合ActionSupport的源码就不难理解实现转发的原理了。 随后再在前面第7点扩展中用到的op.jsp中增加如下代码:

/forward.action\>forward

最后再测试访问op.jsp,在op.jsp中页面中直接点链接便可以跳到index.jsp,观察地址栏发现此时跳到index页面是进行的服务器跳转,如果我们在上面的配置中的result增加type属性变成/index.jsp,实现的跳转就是客户端跳转。 补充:像这种forward形式的action实质是执行的ActionSupport 这个Action。因此配置它的result可以参看此类的api文档,比如它常用的result name有:success、login、input等。 8.使用default-Action配置统一访问

default-action-ref,当访问没有找到对应的action时,默认就会调用default-action-ref指定的action.同样在上面的package中增加如下内容:

/other/error.jsp

上面一段内容就是说当我们访问的action不能被找到时便指向名为error的action中去,接着我们在下面配置了这个error Action。但是要注意,一个package内只配置一个,如果配置多个,就无法预测结果了. 此时我们只要输入.../myStruts2/luanFangWen.action这样的形式,它就会去访问这个默认的,通常我们会为它配置一个错误页面,以提示用户访问的页面不存在。 在web开发中,我们还可以把这个默认的action访问配置成主页,这样当用户访问一些不存在的action时,总会跳到主页上去。 通过此配置,只要是访问一个不存在的action便会转向到.../other目录下的error.jsp页面。但是如果访问是其它的不存在资源则仍是报tomcat所标识的404错误,我们可以在web.xml中作如下配置:

404

/other/404error.jsp

这样配置后,访问错误页面将跳到.../other/404error.jsp页面中去。补充说明:如果我们用ie访问时,如果选中了[工具][IE选项][高级][浏览][显示友好的http错误信息],则配置的错误页面将失效,因为找不到资源时会报HTTP404错误,而ie截取到此错误进行了它自身的友好处理,所以我们设置就失效。 小结Action

在struts2中一个普通的java类只要有public String execute()这样的方法都可以配置成一个Action,另外我们可以实现Action接口来使java类成为一个Action,但通常的做法是继承ActionSupport类,这也是以后的项目中惯用的方法,也是推荐的首选方法。 与struts1.x不同的是:在struts2中每一个Action被请求访问时都会new出这个Action对象,所以Action本身不存在线程安全的问题。 9.使用通配符

建立struts2wildcard项目,此实例基本仿照前面前面第7点的实例改写而成。为了使用通配符,只需要改写配置文件即可。此实例未使用通配时的配置文件如下:

/user/addUser.jsp

11

/user/delUser.jsp

/user/queryUser.jsp

/user/updateUser.jsp

我们注释掉上面的配置,使用通配符只需如下内容即可达到相同的效果:

/user/{1}User.jsp

原理:当有.../addUser.action请求时,如果不能在当前应用中找到完全相同的addUser名字的Action时,通配符配置这时就起作用了,按通配原则,它便和上面的name=\相配成功,这里不难明了*此时代指的内容是add,再来看method恰恰是引用第一个*的内容,所以它的method此时的完整名为addUser,它刚好和com.asmUserAction中的addUser方法相对,所以它会去addUser方法,再来看下面的result配置所指代的页面,它也用到了{1},所以它的完整页面是/addUser.jsp。其实如果我们有良好的编程命名习惯,所有的Action我们都只需要进行一次配置。举例:规定所有的Action类都用XXXAction来命名,类中所有的CRUD方法都用add/del/update/query。Jsp页面也用add/del/update/query_XXX.jsp这样的形式。即配置文件可以写成如下形式:

.../{1}_{2}.jsp

Name中第一个*代表CRUD操作的名字,第二个*代表类的名字。所以访问链接地址举例如下: .../del_User.action将访问到User类的del方法,成功后跳到del_User.jsp页面。补充说明{0}是代表name中所有的*组合。

10.使用0配置:ZERO Annotation

11.Result配置详解

说明:在前面的许多案例中我们所用到的Action基本都继承自ActionSupport这个类,而在这个类中我们定义了五个字段:SUCCESS,NONE,ERROR,INPUT,LOGING。我们可以直接返回这些字段值,这些字段值实质是被定义成:String SUCCESS=”success”这样的形式,所以我们只要在Result元素中用它们的小写即可。

标准完整形式如下:

/default.jsp

如果我们都采用默认的形式,最终可以简写成:/default.jsp 探讨type类型: Type类型值

作用说明 对应类 12

chain dispatcher redirect redirectAction plainText freemarker httpheader stream velocity xslt 用来处理Action链 用来转向页面,通常处理JSP 重定向到一个URL 重定向到一个Action 显示源文件内容,如文件源码 处理FreeMarker模板 控制特殊http行为的结果类型 向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据。 处理Velocity模板 处理XML/XLST模板 com.opensymphony.xwork2.ActionChainResult org.apache.struts2.dispatcher.ServletDispatcherResult org.apache.struts2.dispatcher.ServletRedirectResult org.apache.struts2.dispatcher.ServletActionRedirectResult org.apache.struts2.dispatcher.PlainTextResult org.apache.struts2.views.freemarker.FreemarkerResult org.apache.struts2.dispatcher.HttpHeaderResult org.apache.struts2.dispatcher.StreamResult org.apache.struts2.dispatcher.VelocityResult org.apache.struts2.views.xslt.XSLTResult 以上对type类型作简要的说明,下面来看实例:当一个Action处理后要返回的Result是另一个Action时,作如何配置,关键就是配置type类型。下面建立struts2result项目说明 步骤一:建立两个Action:TestAction、Test2Action

步骤二:web.xml配置省略。struts.xml主要配置内容如下:

/test2Suc.jsp

test2

说明:在名为“test”的action中,我们配置result元素的type类型值为chain,意为将继续把Action传递到下一个名为test2的Action中去,在test2.action中会把页面转向到test2Suc.jsp中去。在type类型为chain时,它的param有4个值可配,除了这里用到的name=”actionName”外(必须配置,否则报错),还有name=namespace|method|skipActions。其中namespace指定要转向到action的名字空间,由于此处是转到Action位于同一个namespace下,而namesapace的默认值the current namespace,所以可以省略不写(需要说明的是如果要跳到别的名称空间的action中去,除了使用namespace指定外,还可以用:/要跳去action所在名称空间的值/要跳去的action的name值)。Method用于指定转向到一个目标action所调用的方法,默认是调用下一个action的execute方法,所以此处仍可以省略。SkipActions是一个可选的属性,一般不用。具体可以参看chain所对应类的api帮助。

在本实例中,我们还在TestAction中设定一个username字段,并在execute方法执行为它赋了值,并在test2Suc.jsp中引用了此值。其实这种做法在web开发中还是很有用处,比如可以代替隐藏域。需要注意的是之所以在action的传递中能把设定的这个值保存下去,主要是因为转向都是服务器跳转。如果我们跳转时采取了客户端跳转,比如在test2 action的result中指定type类型为redirect,要想传递参数可以在result指向的jsp页面中附加参数即可,我们可以在test2 action的result中写成:

/test2Suc.jsp?username=${username}

随后在test2Suc.jsp页面中引用时会出现三个问题:1.EL表达式引用失效,(EL表达式

13

应该使用${param.username}形式)。我们也可以使用<%=request.getParameter(\获取参数值。 2.由于在前面的TestAction中设定的值为中文,而附加到这里的uri请求的参数后面时会出现乱码问题。(可以使用URI编码再解码解决此问题)3.值栈取值失效:因为每一次request共享同一个值栈,所以服务器端的forward跳转也是能共享同一值栈得。但是着当test action执行后把请求交由test2 action时,test2 action采取的是redirect重定向到test2Suc.jsp页面,这时其实就是重发的一次request,所以在test action保存的值栈内容全部失效。这也就是为什么我们要附加参数的原因。而参数是保存在actionContext中,所以采用了#的方式来取出值。图示说明:

test.action 参 配 置 test2 result tyep: chain /test2Suc.jsp?username=${username} 同一个 context map test2.action 参配 置 result tyep: redirect 创建新的 context map test2Suc.jsp 从新的context map中取值 步骤三,编写链接页面index.jsp。发布测试:

全局result:

如果我们所有的action均有可能跳到相同的页面,则不防使用全局result。为了方便引用我们专门建立一个package来存放公共的result。在会用到个全局的跳转时,只需要把继承自这个公共的package即可。 建立公共包,代码如下:

/error.jsp

由于它下面没的action配置,所以我们可以像默认的struts-default包一样,声明abstract=true,这样声明表示此packgage下不会有action,它一般是用来让别的package继承。随后再在要用到全局result中引用这个公共的package。代码如下:

这样操作相当于把全局的result加到了此package下的所有action中去。

动态Result:了解

步骤一:建立DyanAction,主要代码如下:

14

package com.asm;

public class DynaAction extends ActionSupport {

public String execute() throws Exception { }

if (username.equals(\)) { }

return SUCCESS;

nextAction = \; nextAction = \; nextAction = ERROR;

} else if (username.equals(\)) { } else {

private String username; private String nextAction;

...省略get/set方法 }

步骤二、建立jsp页面dyna.jsp,主要是为了向DynaAction中传递username参数。 步骤三、相关配置如下:

/user.jsp

/admin.jsp

${nextAction}

分析:当dyna.jsp把参数传递到DynaAction中去时,如果传递的值为admin,我们便设定了nextAction的值admin,在配置文件中我们通过${nextAction}(用在struts配置文件中的ognl,其实nextAction的值是存在值栈中,我们通过${}这样的形式取出。在此只作了解)来获取值便为admin,随后再继续把请求传递到下一个Action中去(此时也即admin.action),为了方便我们设定了两个ForwardAction:admin.action和user.action。这样便可以跳到指定的jsp页面。 原理:dyna.action执行后会继续把请求传递给下一个Action,而下一个Action的到底是哪一个Action,是通过DynaAction中动态指定的,比如这里是根据传递的username的值指定。 12.异常处理

步骤一、建立struts2exception项目下,在该项目下建立登录页面login.jsp。主要代码如下:

步骤二、建立LoginAction,代码如下:

package com.asm;

15


struts2笔记(入门)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:11种蒙氏数学教具的使用方法 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: