`
CshBBrain
  • 浏览: 650025 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:144900
Group-logo
HTML5移动开发
浏览量:137834
社区版块
存档分类
最新评论

详谈Struts2的核心概念下(转至程序员之家http://www.sunxin.org)

阅读更多
5.4  使用本地的资源文件
•         本节中将介绍另外两个接口TextProvider和LocalProvider,它们都是为了使用本地的资源文件而设计的。
•         在Java中用户语言和地区的信息被封装在java.util.Local类中,而action则通过一个定义与com.opensymphony.xwork.LocaleProvider接口的方法判断使用哪个Locale获取用于显示的信息文本,这个接口中只定义了一个方法:
•         Public Locale getLocale()
•         在ActionSupport中,这个方法的默认实现为:通过调用AcitonContext.getContext ().getLocale()方法,利用ActionContext获得locale的值(关于ActionContext的使用将在后面的章节详细描述)。Struts2通过查询HttpServletRequest对象并调用它的getLocale () 方法将Local与action调用联系起来。
5.5  用ActionContext与Web容器发生联系
•         在Action的接口定义中,excute()方法并没有HttpServletRequest和HttpServletResponse参数也就是说Struts2的Action不用去依赖于任何Web容器(不像Struts 1必须在Web容器中才能运行),不用与那些JavaServlet复杂的请求(Request)、响应(Response)关联在一起。但在Web应用程序开发中,往往需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http的请求、响应操作。Struts2 提供了一个工具,用ActionContext对象来与Web容器发生联系。
•         ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文,上下文可以把它看作是一个Map,它存放是Action在执行时需要用到的对象,比如:上下文放有请求的参数(Parameter)、会话(Session)、Servlet上下文(ServletContext)、本地化(Locale)信息等。在每次执行Action之前都会创建新的ActionContext,ActionContext是线程安全的,也就是说在同一个线程里ActionContext里的属性是唯一的,这样的Action就可以在多线程中使用。
5.6  高级输入
•         应用程序经常使用JavaBean表示一个域中的对象,包括User、Address、Block在内地的类就是这种JavaBean很好的例子。而在Web程序中很大一部工作都是将信息填充到这些对象中去和从Bean中获取数据信息在网页中表现。本节将以一个完整的实例来说明Sturts 2在这些方面提供了那些便利。
5.7  使用Model-Driven
•         Struts2中,提供了两种Action驱动模式:Property-Driven(属性驱动),Model-Driven(模型驱动的)。
•         模型驱动的Action很像Struts1中的FormBean,在传递过程中有一个单独的值对象来作为参数的载体,但在Struts2中这个值对象不必再继承任何接口,只要普通JavaBean就可以充当模型部分。很多情况下Bean的定义已经存在了,而且是不能修改的(如从外部引入的类或者是已经被大量代码引用的类),如果必须实现某个接口才能作为FromBean,不得不再新增一个类,Struts2的这个改进非常及时。
5.8  使用Property-Driven
•         Property-Driven 就是Action将直接用自己的字段来充当FormBean的功能,在Struts2入门一章中,HelloReader这个例子就是采用的这种方法,在Action中直接包含了message属性和它set、get方法。它一般用在页面表单比较简单的情况使用,而且可以直接把属性作为Action的字段,这样就不用在另写FormBean,减少了重复代码。
•         上一节的例子如果使用Property-Driven方法,那就是将User与action类合并定义,把User中的属性值直接转移到action中去,在配置文件中也不必再增加modelDriven这个过滤器。
6  Result类型介绍
•         Result是在Action执行完,一个结果返回后决定发生什么事的类。开发者可以自由的根据他们的应用和环境的需要创建自己的Result类型。例如在Struts2中Servlet和Velocity结果类型已经被创建用来显示web应用程序的画面。本节将介绍Struts2 内置的几种Result类型和如何自定义开发Result。
6.1  内置Result类型
•         所有的Result类型都实现了com.opensymphony.xwork.Result接口。这个接口是所有action执行结果的通用接口,不管这个结果是用来显示一个网页还是产生一个E-mail,发送一个JMS消息还是别的。
•         在struts-default.xml中定义了系统提供的缺省Result类型,把它们映射为action配置中可以引用的名字,在action配置就就不用再使用长类名直接使用这些别名就可以了。
6.2  默认Result
•         Dispatcher Result是最常用的一种result,它也是Struts2默认的result,又称为通用resut。action执行完后,请求会导向对应的View,相当于<jsp:forword>标签实现的跳转功能。将同一个HTTP请求中的内容分发至某一个页面(dispatcher类型的result的使用)只要配置文件包含了struts-default.xml,而且package继承了struts-default,那么使用dispatcher result并不需要其他设置。示例:
•         <result name="success" type="dispatcher">
•           <param name="location">foo.jsp</param>
•         </result>
6.3  页面跳转 Result
•         Redirect Result与Dispatcher Result作用类似也是实现页面跳转。对上次的响应将重定向到指定的位置,可以理解为在客户端跳转用户又重新请求了一个新的URL。redirect是重新产生一个新的request,因此原来request保存的东西将不再有效,比如不能通过再requet.getAtrribute()取得对象,也不能取得action的实例、errors、field errors等。
•         Redirect Result与Dispatcher Result的区别于源于JSP篇中<jsp:forward>标签与response.redeiret()的区别。
6.4  创建action链
•         Chain Result是一种result 类型,它基于自己的拦截器stack(堆栈)和result调用一个action,这样允许一个action附带着原来的状态将请求转到目标action
•         Struts2提供把多个Action按照预先定义好的顺序或者流程链接起来的能力。这个特性通过给指定的Action设置一个Chain Result,然后通过一个ChainingInterceptor拦截目标Action来实现。
6.5  整合各种View技术
•         Velocity、Freemarker、JasperReports、xslt这4种result都是为了整合不同的视图技术而设计的。
•         1.Velocity Result:Velocity是一个基于java的模板引擎(template engine)。
•         2.Freemarker Result:Freemarker也是一个模板引擎,允许JavaServlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。
•         3.JasperReports result:JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其他IDE报表工具一样来制作报表。
•         4.XSLT Result:XSLT Result用XSLT来转换action对象到XML。
6.6  自定义result
•         Struts2也允许用户自定义自己的result类型,只要实现com.opensymphony.xwork2.Result接口就可以了。如代码5-29所示,模拟了一种result作用是根据处理结果将给指用户发送一份E-mail。这个result需要4个参数to、from、subject和body
7  拦截器(Interceptors)介绍
•         拦截器(Interceptor)是Struts2的一个强有力的工具,有许多功能都是构建于它之上,如国际化、转换器,校验等。Interceptor是Struts2的一大特色,在执行action之前和之后可以使请求通过一个或多个Interceptor。多个连接器组合在一起实现某一个功能称为interceptor链(Interceptor Chain,在Struts2中称为拦截器栈Interceptor Stack)。interceptor链就是将interceptor按一定的顺序联结成一条链。在访问被拦截的方法或字段时,interceptor链中的interceptor就会按其之前定义的顺序被调用。
7.1  Interceptor的原理
•         Struts2的interceptor实现相对简单。当请求到达Struts2的ServletDispatcher时,Struts2会查找配置文件,并根据其配置实例化相对的interceptor对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器,



7.2  内置拦截器介绍
•         Struts2包含了许多内置的interceptor,它们提供了很多核心功能和可选的高级特性。interceptor在struts.default.xml文件中被定义,而一些默认的interceptor栈及interceptor的命名也被定义其中。框架中提供了很多实用的Interceptor,可以随时使用它们的名字来调用这些interceptor,
7.3  使用内置interceptor
•         本节将介绍几种常用interceptor的用法:
•         1.使用timer为action即时
•         2.使用logger 为aciton提供日志
•         3.使用校验
•         4.准备action
•         5.实现ModelDriven
•         6.token和token-session



7.4  内置拦截器栈介绍
•         除了内置的interceptor之外,struts.xml还包含了内置的interceptor组合,可以通过具体的命名的interceptor栈来使用它们。
7.5  自定义拦截器
•         自定义一个拦截器需要3个步骤:
•         (1)自定义一个实现Interceptor接口的类。
•         (2)在strutx.xml中注册上一步中定义的拦截器。
•         (3)在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。
8  小结
•         本文讲述的是Struts2的核心构成元素及其使用方法,使读者对Sturts 2的体系结构有了一个清晰的认识。Struts2是一个开放的系统,它的很多实现对用户来说都是透明的,它们在struts-default.xml 中配置,开发人员配置自己的元素在struts.xml中,这个文件是可以拆分并按用户需要组织的。Struts2的核心部分由action、interceptor、result3个主要部分构成,Interceptor是它最大特色。
  • 大小: 13.2 KB
  • 大小: 14.6 KB
分享到:
评论

相关推荐

    vc++深入了解源代码 (1

    TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org")); EndPaint(hwnd,&ps); break; case WM_CLOSE: if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO)) { ...

    SAP ERP ECC6 SQLSERVER 安装手册全攻略 各种问题指南

    安装JDK,然后设置环境变量 ,如果有谁不会可以参加一下链接,详细内容不讲了(http://www.sunxin.org/sunxin/003.asp) 设置的变量内容可以参照以下: JAVA_HOME C:\j2sdk1.4.2 PATH %JAVA_HOME%\bin;...

    编写窗口过程函数

    TextOut(hDC, 0, 0, "http://www.sunxin.org", strlen("http://www.sunxin.org")); EndPaint(hwnd, &ps); break; case WM_CLOSE: // 关闭窗口 if (IDYES == MessageBox(hwnd, "Do you want to close?", ...

    sunxin-Struts2试读

    本试读资料可能包含了Struts2的基础概念、核心组件以及实际应用的初步介绍。 在`ch01.pdf`中,可能会详细讲解Struts2的基础知识,包括它的历史背景、为什么选择Struts2,以及Struts2框架相较于其他MVC框架的优势。...

    几种在网页中调用其它页面的方法

    --window.location="../head.asp"--&gt; &lt;/script&gt; ``` 这种方法可以在当前页面中加载其它页面的内容,但是需要注意的是,这种方法只能在同一个域名下使用。 方法二:使用Server Side Include(SSI) 使用SSI可以在...

    java中如何实现同一账号不能同时登录

    这是网上哥们给的意见,可以查看以下链接:http://sunxin.org/forum/thread/22787.html 在这个方法中,我们可以使用一个监听器来监听用户的登录状态,当用户登录时,监听器将检查用户是否已经登录,如果已经登录,...

    struts2 开发详解(1)

    package org.sunxin.struts2.ch01.model1; import java.io.Serializable; public class UserBean implements Serializable { private String name; private String password; // Getter and Setter methods ...

    struts2下载功能

    &lt;action name="download" class="org.sunxin.struts2.action.FileDownloadAction"&gt; &lt;param name="inputPath"&gt;/WEB-INF/UploadFiles/1205451254.zip&lt;/param&gt; &lt;param name="contentType"&gt;application/zip&lt;/param&gt; ...

    VC++6.0PPT

    此外,课件提供的链接(http://www.sunxin.org)可能包含更多资源和答疑,为学习过程提供额外的支持。 总的来说,这份VC++6.0 PPT课件是一个全面而实用的学习资料,涵盖了从基础知识到高级应用的诸多方面,无论是对...

    struts2-ch19-ssh2:SunXin Struts2 chapter 19

    struts2-ch19-ssh2SunXin Struts2 chapter 19.孙鑫《Struts.2深入详解》第19章V0.3使用dbcp连接池此版本可在SAE中成功运行。V0.2将applicationContext.xml文件移动到resources文件下V0.1初始化版本,在本地运行。...

    vc sunxin part2

    4. "c++学习笔记.pdf":这可能是对C++语言本身的全面总结,涵盖语法、类、对象、模板等核心概念,对于巩固C++基础知识非常有帮助。 5. "C++学习方法.txt":这可能是一份关于如何有效地学习和掌握C++的指南,包含了...

    sunxin.rar_sunxin

    看了孙鑫的C++视频教学笔记,分20集,希望对大家学习C++能有好的帮助。

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书不仅可以作为java web开发的学习用书,还可以作为从事java web开发的程序员的参考用书和必备手册。此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会...

    xml自学总结

    DOCTYPE greeting SYSTEM "http://www.sunxin.org/xml/dtds/hello.dtd"&gt; ``` 以上知识点涵盖了XML的基础语法、元素结构、属性定义、DTD的使用等方面,是学习和掌握XML技术的关键内容。通过深入理解这些知识点,可以...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书不仅可以作为java web开发的学习用书,还可以作为从事java web开发的程序员的参考用书和必备手册。此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书不仅可以作为java web开发的学习用书,还可以作为从事java web开发的程序员的参考用书和必备手册。此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书不仅可以作为java web开发的学习用书,还可以作为从事java web开发的程序员的参考用书和必备手册。此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会...

    SOCKET编程的小说明

    sprintf(sendbuf, "welcome %sto http://www.sunxin.org", inet_ntoa(addrClient.sin_addr)); // 发送欢迎消息 send(sockConn, sendbuf, strlen(sendbuf) + 1, 0); recv(sockConn, recvbuf, 100, 0); // 接收...

Global site tag (gtag.js) - Google Analytics