`
mywebcode
  • 浏览: 997996 次
文章分类
社区版块
存档分类
最新评论

Struts2学习知识点总结

 
阅读更多

1.全局的逻辑控制器为一个过滤器,负责过滤所有的请求。该过滤器引用的API类为
org.apache.struts2.disapatcher.FilterDispatcher

2.MVC:页面请求(jsp)——>逻辑控制器(Filter)——>业务控制器(Action)——>业务逻辑组件——>业务处理/DAO

3.struts2的配置文件放在classpath下。

4.struts2的类型转换:
a.继承DefaultTypeConverter,
覆盖父类的public Object convertValue(Map context, Object value, Class toType)方法
b.继承StrutsTypeConverter,
覆盖父类的public Object convertFromString(Map context, String[] values, Class toClass)
该方法负责转换从页面传递过来的数据。
覆盖父类的public String convertToString(Map context, Object o)
该方法负责将Action中处理好的数据转换成相应格式的字符串。

5.struts2的数据验证:
a.使用编码方式进行验证。业务控制器Action继承ActionSupport类,重写public void validate()方法。
在该方法中进行数据验证。若Action中处理业务的方法为test,则可以编写public void validateTest()
方法,来对test方法的数据进行验证。(系统在进行validateTest方法后,会接着执行validate方法,然后
才执行相应的业务代码。)
若严重出错,则可以调用addFieldError或者调用addActionError方法,增加相应的错误提示信息。
b.使用配置xml文件进行验证。验证文件的名字为:×××Action-validation.xml。验证的方式包含字段验证和非字段验证。
其中字段验证表示对某个字段进行某些类型的验证。非字段验证表示用某个类型的验证来验证,某个字段。两种方式
底层实现一样,只是表现方式不同,字段验证方式比较直观。
验证的类型有一下几种:required,requiredstring,int,date,double,expression,fieldexpression
email,url,visitor,conversion,stringLength,regex(正则表达式)。
对验证类型可以指定shourt-circuit参数为true,来执行短路验证。
如果Action中执行业务的方法为test,则可以通过编写×××Action-test-validation.xml方法来对test方法的数据进行
验证。且执行完test方法的私有验证文件后,还会执行默认的验证文件×××Action-test-validation.xml的验证。
c.struts2进行客户端的验证。首先需要使用struts2的标签库,且标签库的theme属性不能为simple,然后设置标签的
validate属性为true。
注意:struts2的客户端验证依赖于服务器的验证配置文件。

6.struts2的拦截器。struts2的拦截器是struts2的核心,其底层实现使用了Java的反射机制与动态代理。在struts2的配置文件中
为一个Action引入了一个拦截器,则配置的默认拦截器不会被调用,需要手工配置到该Action中。
实现struts2拦截器的方法:
a.实现Interceptor接口,并实现init,destrory以及intercept方法。
b.继承AbstractInterceptor类,覆盖intercept方法。
c.继承MethodFilterInterceptor类,覆盖intercept方法。该类可以对特定的方法进行拦截。
拦截器栈可以包含拦截器和拦截器栈。

7.文件的上传和下载:
a.使用apache组织开发的commons-fileupload和commons-io包,并且按需要配置fileUpload拦截器和相应的上传参数,
比如上传文件的类型,上传文件的大小。多文件的上传可以使用js代码来在页面修改上传文件的列表,在Action中
则用三个列表分别来保存文件对象(file),文件名(fileName),以及文件类型(fileContentType)。
b.文件下载使用流进行读取:return ServletActionContext.getServletContext.getResourceAsStream("文件名")
并将Action的结果返回类设定为stream,即流。按需要配置相应的参数。

8.struts2的国际化。struts2国际化的底层实现用到了Java基础类库中的Locale(地区)和ResourceBundle(消息资源)两个类。
struts2的国际化主要用在一下几个地方:
a.jsp页面:使用struts2的标签时,指定标签的key属性(对应消息资源文件中的key)。
使用<s:text name="key">
<s:param></s:param>
</s:text>
标签取得消息资源信息。
还可以用<s:i18n name="basename"></s:i18n>标签来指定特定的消息资源文件。
b.Action中:调用getText(key)或者getText(key,args)方法取得消息资源文件中的消息资源。
c.xml验证文件中:指定message元素的key属性(对应消息资源文件中的key)。(怎么传参数?)
d.类型转换过程中:通过查看xwork包的源代码可以找到:ge.properties文件中可以找到如下的键值对:
xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".
在消息资源文件中重新指定该键值对即可。
另外在struts.properties中设定键值对struts.i18n.encoding=GBK,可以解决中文乱码问题。

9.struts2的异常处理。在Action中,我们的业务逻辑处理方法都对抛出异常进行了声明。具体的异常对应具体的处理结果。
在action配置中:
<action name="upload" class="uploadAction">
<result name="exception"></result>
<exception-mapping result="exception" exception="具体的异常类型"></exception-mapping>
</action>
还可以配置全局的异常处理:
<global-exception-mappings>
<exception-mapping result="" exception=""></exception-mapping>
</global-exception-mappings>



struts2的其他东西:
1.对于struts.xml中的package:
a.设置<package abstract="true">,则表明该包中没有action的配置,只定义一个基础公共的组件。
b.package的namespace可以将不同的请求路径分隔开,在多人合作项目中用到比较多。当接收到一个请求,
若在当前的namespace中没有相应的请求地址,则会到默认的namespace中去寻找匹配的地址。

2.模型驱动机制(ModelDriven),将一个Action中的各个参数封装成为一个JavaBean(类似struts1.x中的
ActionForm)。需要实现ModelDriven<T>接口,并实现getModel方法。当一个Action实现ModenDriven接口后,
该Action会被ModenDrivenInterceptor拦截,进行相应的参数设置。

3.防止表单的重复提交:在jsp的表单中设置<s:token name="***"></s:token>标签。并且在相应的Action
中设置token拦截器和名为invalid.token的返回结果。相应出错信息的key为struts.message.invalid.token。
配置该key,来实现国际化。

4.struts2中Action与Servlet容器的耦合。主要有三种方式:
a.实现ServletRequestAware或ServletResponseAware接口。并提供对request或者response熟悉的设置方法。
b.使用ActionContext(但不能获得response对象)。改方法方便单元测试。
c.使用ServletActionContext。ServletActionContext是ActionContext的子类。
首选使用ActionContext,其次ServletActionContext。

5.整合多个struts配置文件,在struts2的配置文件中使用include元素包含其他的配置文件。用于多模块开发。

6.可以在web.xml中对struts2的核心过滤器FilterDispatcher设置初始化参数(不推荐使用)。

7.动态方法调用(DynamicMethodInvocation).
a.action配置中指定:<action name="×××" method="">
b.在客户端即页面指定:<s:form action="method!actionName">
c.使用通配符:<action name="*Login" class="com.action.LoginAction" method="{1}">,
若Action的url为helloLogin,则调用LoginAction的hello来处理业务。此种方法简化了配置,但是
使得程序不明了,不提倡使用该方法。

8.struts2的结果类型。在struts2-core包中,有几种struts2已经配置好的结果类型。
其中默认的类型为dispatcher,此外还有:redirectAction,chain,freemaker,httpheader,redirect,
redirectAction,stream,velocity,xslt,plainText。

9.struts2与spring的整合。导入struts2-spring-plugin包,在web.xml中设置spring的监听器,
spring监听器对应的API类为:org.springframework.web.context.ContextLoaderListener。
struts2-spring-plugin包为我们将struts2的对象工厂设置为spring的IoC容器,其代码为:
<struts>
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

<!-- Make the Spring object factory the automatic default -->
<constant name="struts.objectFactory" value="spring" />

<package name="spring-default">
<interceptors>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
</interceptors>
</package>
</struts>
很明显,将struts.objectFactory定位为org.apache.struts2.spring.StrutsSpringObjectFactory
其余的工作就交给spring的IoC容器去做了。
另外:当我们需要增加spring的配置文件时,需要在web.xml中设定contextConfigLocation参数。代码如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>其他的spring配置文件名,用逗号隔开</param-value>
</context-param>


需要注意的一些地方
1.存储fieldError的是一个LinkedHashMap<String,ArrayList>;而actionError则存储在一个ArrayList中。
ActionSupport中的getFieldError方法返回的是一个新的集合。该集合是原fieldError集合的一个副本。
在struts2的源代码中返回的是:new LinkedHashMap(internalGetFieldError),即一个新的集合对象。
所以执行代码:this.getFieldErrors.put("username","ErrorMsg");不会影响原fieldError集合的数据。

2.若一个Action注册了PreResultListner,则会在该Action返回的时候调用相应结果验证的逻辑代码。

3.struts2-core包中的default.properties和struts-default.xml文件保存了一些struts2默认的配置。
可以在自己的struts配置文件中对相应的配置进行覆盖或重新设值。比如修改请求的后缀名:在struts.properties
中加入:
struts.action.extension = do
则将struts2请求的后缀名修改成了struts1中的do后缀名的形式。

4.在配置文件中配置struts.multipart.saveDir来设定上传文件时的临时文件的存储位置。需要定期清理该路径下的文件。

分享到:
评论

相关推荐

    struts2 学习重点笔记

    这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用

    struts2学习总结

    本人学习struts2时写的总结,罗列了struts2的特点和知识点,针对一些技术点加上了自己的观点

    Struts2学习小结

    有了Struts2学习小结,可以很方便的学习struts2,里面包含了许多知识点

    Struts2+Spring+Hibernate知识点总结

    该资源总结了java中常见的三大开源框架的知识点,便于初学者学习。

    Struts2入门教程

    Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物。 Struts2的使用人群逐渐增多,它...如果知识点有误,感谢告知。

    Struts2技术手册-Struts2精华教程-电子书

    本书内容非常全面,涵盖了众多书籍所有知识要点,并结合作者自己经验总结而编写,内容相当丰富,是查找技术的好帮手及学习Struts2的不二选择 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的...

    Struts2笔记.doc

    这是我在学校学习时整理的笔记,借此笔记来复习不记得的知识点,适合新手看,高手就不要下了

    6年javaEE开发的Word资料合集

    pio + itext 生成报表 几大框架问题 Struts2常用标签总结等 Word文件"&gt;包括165个javaEE学习的Word文件 jstl标准函数 mysql命令详解 javascript 常用JavaScript代码 java位运算大全 java struts2 0经典知识点 ORACLE ...

    JAVA SSH 项目(学习过程中做的)

    本项目是我在培训机构学习过程中一边学习一边动手做的,是一个电子办公的OA系统,功能还不是很完善,但是有涉及到java几乎各个方面的知识点,其中不同的模块有分别 1只用到struts完成的 2 用servlet完成的 3用struts...

    J2EE相关技术知识学习笔记

    J2EE相关技术知识点经典总结,外加学习笔记,重点突出,清楚明白。

    整理后java开发全套达内学习笔记(含练习)

    应该不止这点) command n. 命令,指令 [kә'mɑ:nd](指挥, 控制) (command-line 命令行) Comments [java] 文本注释 ['kɒments] compile [java] v.编译 [kәm'pail]' Compilation n.编辑[,kɒmpi'leiʃәn] const...

    基于JAVA的留言板管理系统的毕业设计.doc

    归纳出自己的不足点,以及自己该如何 改正和学习。 这个论文和系统在其上也花了我半个月的时间。我自己也知道并没有做全,做好,不 过经过这个设计,将平时了理论进行了实践,更加熟练了理论与实践知识,我也希望这 ...

    Web安全深度剖析(张柄帅)

    8.3.1 Struts2代码执行漏洞 166 8.3.2 ThinkPHP命令执行漏洞 169 8.3 防范命令执行漏洞 169 第9章 文件包含漏洞 171 9.1 包含漏洞原理解析 171 9.1.1 PHP包含 171 9.1.2 JSP包含 180 9.2 安全编写包含 184 9.3 小结 ...

Global site tag (gtag.js) - Google Analytics