与struts1不同,struts2从filter入手。web.xml里配StrutsPrepareFilter与StrutsExecuteFilter。
prepareFilter在init中根据filterConfig new出来dispatcher,然后在doFilter中准备好prepare(dispatcher放到threadLocal中, 由配置中读取mapping放到prepare中等),放到threadLocal中。StrutsExecuteFilter.doFilter里有prepareOperations和executeOperations.传入刚才创建的dispatcher.
接收到request,由prepare得到mapping,execute执行executeAction最终调用到dispatcher.serviceAction(mapping).这个方法先创建extraContext放valueStack等,然后调用ActionProxy.execute(),如果mapping配到result,则直接到result.execute(). 这个ActionProxy由ActionProxyFactory由配置创建。ActionProxy中invocation.invoke()开始了ActionInvocation与Interceptors的相互调用,形成interceptor链。最终调用到action的相关方法,然后是post interceptors,返回页面。
filter-->operations.executeAction-->dispatcher-->actionProxy-->actionInvocation(interceptor)
--常见概念:
从struts-default.xml中可以看到很多东西。
configuration:完成configure的动作。
configuratioNProvider: 如Xml的,负责从xml文件读入配置并由configuration调用。
action: struts1要求action必须实现action,2不要求,但有个actionSupport提供大部分功能。
ActionContext: action访问上下文包括request, session, sc等。action可从静态方法得到其实例。页面上,可以通过XXXScope来访问相应scope的数据。--另外,action也可通过实现XXXAware来由interceptor注入相关上下文。注意,不要往获得的response里写东西,没用的。
Result: 处理后的结果类型。常见的有ServletDispatcher, ServletRedirect, Stream, PlainText等。redirect的区别:等同于response.sendRedirect是在浏览器端跳转,对restful有很大作用。redirectAction是请求到另一个action.用ActionMapper实现。
这些配置均可使用通配符。
Listener: 一个interceptor专门处理listener。
异常处理:有exception interceptor处理异常,通过exception-mapping配置。
convention: 约定大于配置。通过添加convention-plugin实现。通常将action(s),struts(2)下以Action结尾或实现了Action接口的类作为action。路径即是包名类名,结果是WEB-INF/content下相应目录的类名-结果等。如果找不到result,还可以进入action chain。开启约定映射的自动重加载,配置struts.devMode=true. 另外可用annotation来作配置。
资源文件:i18n国际化。struts.custom.i18n.resources=baseName,文件名为baseName_zh_CN.properties等。位置可在classpath下,包下等。可用占位符,用ActionSupport.getText替换。加载时先局部后全局。
标签库:主要有UI, logic, form等,还有OGNL,用#取值,内置范围对象如request等。
类型转换:有interceptor进行类型转换。有OGNL类型转换,对于集合,有泛型或局部-conversion.properties指定Element_propName=type。也可指定自定转换器或用annotation,实现TypeConverter。有conversionError处理转换错误进入input,invalid.fieldvalue.XXX可自定义提示。输入校验:除服务器端校验,还可生成客户端(js)校验,且只一个属性不同(form中validate=true)。返回input。在配置文件actionName-(aliasName)-validation.xml中validators中field中添加field-validator即可。页面用<s:fielderror/>提示。在message中用key读取资源。有不同风格(filed或validator先)。short-circuit=true可指定短路(即出现一个错误就返回)。也可在action类中添加validate()或validateMethodname()进行校验。注意校验规则。可到xwork validator的default.xml查找内建validtors。
convert与validate一起处理,产生fieldError再一起返回result。
文件上传下载:上传为fileUpload interceptor,下载为type=stream的result。
相关推荐
"java-ee-struts2-study-master.zip"这个压缩包很可能包含了一个关于Java EE使用Struts2框架的实践项目源码,以及相关的学习资源和教程。 首先,让我们深入了解一下Struts2框架。Struts2是Apache软件基金会的开源...
此外,Struts2还支持拦截器,可以实现如权限验证、日志记录等功能,提高代码的复用性和可维护性。 由于描述中提到"框架包和图片我删掉了",这可能意味着源码中可能缺失了部分依赖和资源,例如Hibernate和Struts2的...
【标题】:“全套源码-论坛系统(Struts 2+Hibernate+Spring实现)”揭示了一个基于Java技术栈开发的论坛系统,它整合了三个重要的框架:Struts 2、Hibernate和Spring。这个项目旨在提供一个完整的解决方案,帮助...
<package name="default" namespace="/" extends="struts-default"> <result name="success">/HelloWorld.jsp </struts> ``` 9. **创建视图**:在WebContent目录下创建一个名为HelloWorld.jsp的文件,显示...
工作日报系统是一个典型的Web应用程序,该程序的源码...开发者可以通过分析源码学习如何在实际项目中灵活运用SSH框架,提高开发效率和代码质量。同时,也可以根据个人需求对其进行二次开发和定制,适应不同的业务场景。
对于学习Struts2源码来说,这些文件虽然不直接影响框架的运行,但了解它们可以帮助我们理解项目是如何在IDE中组织和管理的。 `.settings`目录下的文件则包含了特定于Eclipse的工作空间设置,如编译器设置、代码风格...
- `src/main/resources`:存放配置文件,如Spring的beans.xml、Hibernate的hibernate.cfg.xml,以及Struts的struts-config.xml等。 - `WebContent/WEB-INF`:存放web.xml(Web应用的部署描述符),以及视图资源,...
在"Struts 2.0从入门到精通(2)-源码"的学习中,你可以深入研究Action类的编写、拦截器的实现、配置文件的配置,以及如何结合实际项目需求进行定制。通过源码分析,可以更清楚地理解Struts 2.0的工作原理,这对于...
深入学习Struts2源码,可以更好地理解其工作流程,有助于优化性能,解决实际开发中遇到的问题,同时也能提升对Java Web开发的整体认知。你可以从这些核心组件入手,逐步分析它们如何协同工作,形成完整的请求处理...
通过源码学习,我们可以理解配置文件如何被解析和加载,以及它们如何影响Action的执行流程。 3. **Ognl(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于数据绑定和传递。学习源码...
2. **Action和ActionMapping**:学习如何配置Action类,以及如何通过struts-config.xml文件设置请求的映射。 3. **ActionForm**:掌握如何使用ActionForm对象存储用户输入,并进行基本的数据验证。 4. **Struts...
在本示例中,"struts 2登录系统及其jar包" 提供了一个基础的登录模块,通过这个小例子,我们可以学习如何使用Struts 2来实现用户登录功能,并了解相关的输入验证。 首先,让我们深入理解Struts 2的核心概念: 1. *...
本项目实例是针对初学者或者正在学习Struts2框架的人设计的,旨在通过实际操作帮助理解Struts2的工作原理和应用方式。 在Struts2框架中,核心概念包括Action、Result、Interceptor等。Action是业务逻辑的载体,它...
通过深入学习Struts2源码,我们可以更好地理解这个框架的工作原理,从而优化应用性能,解决实际开发中的问题,甚至根据需求定制自己的功能模块。在“浪曦struts2源码第13课”中,你将有机会探索这些概念,并实践如何...
2. **拦截器(Interceptor)**:Struts2使用拦截器来实现诸如日志、事务管理、权限验证等跨Action的功能,极大地提高了代码的复用性。 3. **插件体系**:Struts2拥有丰富的插件支持,可以方便地扩展其功能,如Struts...
2. conf:配置文件目录,如struts-config.xml、hibernate.cfg.xml和spring配置文件。 3. webapp:Web应用目录,包括WEB-INF下的web.xml(Web应用配置),JSP页面,以及可能的静态资源(图片、CSS、JavaScript等)。 ...
这个"Java Struts框架示例项目"是一个非常适合新手入门的学习资源,通过实践来理解Struts2的核心概念和工作原理。 首先,让我们从基本概念开始。Struts2是基于拦截器的框架,它的核心设计模式是Front Controller,...
在"浪曦struts2源码第8课"中,我们可能会深入学习Struts2的核心机制,包括Action、Interceptor、Result和配置文件等方面的知识。 1. **Action**:在Struts2中,Action是业务逻辑的载体,它处理用户的请求并返回相应...
Struts2是一款非常著名的Java Web框架,用于构建可...通过学习和分析Struts2源码,开发者可以更好地理解其架构设计,提升问题排查能力,并为定制和优化框架提供基础。同时,这也是一种提升Java Web开发技能的有效途径。
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它极大地简化了在Java EE平台上构建动态网站的...通过深入学习和实践,开发者可以更好地掌握Struts2的使用,提高开发效率和代码质量。