`
可执行
  • 浏览: 16984 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

struts2学习笔记,个人认为最常用10条,( 凌晨四点完成,T_T )

阅读更多
(1) 解决Eclipse下struts2配置文件没有提示功能
这是因为"http://struts.apache.org/dtds/struts-2.0.dtd"没有被加载,(1)机器接网myeclipse自动下载(2)在struts文档目录下找到struts-2.0.dtd(搜索),打开window->Preferences->MyEclipse EnterpriseWized->Files and Editors->XML->XML Catalog选User Specified Entries从文件系统找到struts-2.0.dtd并添加,Key Type下拉选择URL,Key填写http://struts.apache.org/dtds/struts-2.0.dtd,完成。


(2) 直接转发,无action类的简单转发
<package name="cj" namespace="/hello" extends="struts-default">
    <action name="test">
        <result>/WEB-INF/page/mytest.jsp</result>
    </action>
</package>
访问http://localhost:8080/hello/test就可以访问到mytest.jsp页面。
(扩展)原因如果没有给action配置class等,则class默认ActionSupport.class,methd默认execute,result默认SUCCESS(=success),而result默认的name为success,所以未配置的action默认转发到未配置name的result。


(3) 定向、转发、重定向、乱码
result的type属性指定转发类型:
dispatcher(默认):内部转发;
redirect:浏览器重定向(页面不能放WEB-INF下!);
redirectAction:重定向到action;
plainText:原样显示jsp代码(很少用)。
例:
·一般重定向(很少用):
<result name="xxx" type="dispatcher">/test.jsp</result>(页面不能放在WEB-INF下!)
·带参重定向(很少用):
<result name="xxx" type="dispatcher">/test.jsp?username=$(userName)</result>
userName应该在action中设有getter方法,如有中文userName应做URLEncoder.encode(userName,"UTF-8")转换并在下一页面转换过来:
name = URLDecoder.decode(new String(userName.getBytes("ISO8859-1"),"UTF-8"));
其中userName为get传参取得的字符串,URLDecoder.decode()为URL解码。
·重定向到action(常用)
<result name="xxx" type="redirectAction">标记</result>
如果包内action重定向,则"标记"处填写重定向action的name就可。
如果重定向到其它包中action,则"标记"处填写:
<param name="actionName">actionName</param>
<param name="namespace">/xxx/xxx</param>
这两句其实是给"actionName"和"namespace"传参,/xxx/xxx是某包的namespace值actionName是此包下action属性的name值,这样就重定向到/xxx/xxx/actionName.action
·带参重定向到action(常用)
参见前两点。


(4) 全局视图、全局result
·包内全局
在package内部定义:
<global-results>
    <result name="xxx1">jsp路径1</result>
    <result name="xxx2">jsp路径2</result>
    ...
<global-results>
·包间全局
<package name="xxxxx" extends="struts-default">
    <global-results>
        <result name="xxx1">jsp路径1</result>
        <result name="xxx2">jsp路径2</result>
        ...
    <global-results>
</package>
<package name="mypackage" namespace="?" extends="xxxxx">
    <action name="test" class="?" method="?">
    </action>
</package>
包mypackage继承了(extends)了无命名空间(namespace)包xxxxx,而包xxxxx中有全局result,这样包mypackage中名为test的actin中就可以定向到全局result,这样的全局化是包间的。


(5) 常用配置
·修改后缀
最好的方法是在struts.xml中配置,这样容易被使用者发现。只要在struts.xml中配置如下:
<struts>
    ...
    <constant name="struts.action.extension" value="xhtml,other" />
    ...
</struts>
上面配置了两个后缀:xhtml和other

·配置setCharacterEncoding、配置编码集,同上配置如下:
<constant name="struts.i18n.encoding" value="UTF-8" />

·配置自动加载,配置文件修改服务器重启,同上配置如下:
<constant name="struts.configuration.xml.reload" value="true" />

·配置浏览器是否缓存,开发阶段关闭有助调试,发布阶段打开(默认),同上配置如下:
<constant name="struts.serve.static.browserCache" value="UTF-8" />

·开发模式下更详细的错误信息,同上配置如下:
<constant name="struts.devMode" value="true" />

·动态方法调用支持,同上配置如下:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />

·上传文件大小限制(总大小),同上配置如下:
<constant name="struts.multipart.maxSize" value="10701096" />


(6) 动态方法调用,由访问路径所带参数觉得访问哪个方法
·通配符*法(推荐)
<action name="test_*" class="xxx.xxx" method="{1}">
    <result>/xxx/xxx/xxx.jsp</result>
</action>
{1}处会被解释为第一个*对应的字符串,下划线_不是必须的,
例如当用户访问..../test_method1.action就会调用对应的method1()方法。

加强,{数}也可以被用到其它地方,例如:
<action name="test_*" class="xxx.{1}" method="{1}">
    <result>/xxx/xxx/{1}.jsp</result>
</action>
这时三处{1}都将被解释为访问时*对应的字符串。

·通过!符号指明(不推荐,建议通过(5)中方法关闭此功能)
例如http://localhost:8080/test/helloworld!method1.action
以上链接指明要访问helloworld.action的method1()方法


(7) 多个配置文件、引用配置文件
<struts>
    ...
    <include file="struts-name1.xml" />
    <include file="struts-name2.xml" />
    ...
</struts>


(8) 最后做权限管理,使用struts2的自定义拦截器可以达到,需继承Interceptor,详略。


(9) action方法校验
需继承actionSuport类,并配置name="input"的result,当校验失败则转到input指向的页面,validate()方法中调用继承来的addFieldError()方法存储错误信息,在jsp中使用<s:fielderror/>显示错误信息。
·对action中所有方法进行校验
在action中编写validate()方法即可。

·对action中指定方法进行校验
在action中编写validateXxx()方法,则只检验xxx()方法。


(10) 未经过validate()方法直接进入input视图
说明之前的类型转换出错,应查看传入action的参数类型是否和其对应的action属性类型相符。
进入input视图有两种情况:1.类型转换失败;2.validate()检验未通过;
其实,只要fieldError不为空就会进入input视图,类型转换失败struts会向fieldError写错误信息。
3
2
分享到:
评论
2 楼 可执行 2011-10-15  
fhqllt 写道
写的很不错,虽然没有在真的开发中应用过struts2,但一直用webwork2.22 或者 webwork2.26版本进行开发,但能感觉到很实用!


框架这东西没必要追求,用自己熟悉的就好,真正上难度的项目框架帮不了多少忙,有时候反而受制于其。
1 楼 fhqllt 2011-10-15  
写的很不错,虽然没有在真的开发中应用过struts2,但一直用webwork2.22 或者 webwork2.26版本进行开发,但能感觉到很实用!

相关推荐

    struts2学习笔记总结

    struts2学习笔记总结

    Struts2学习笔记

    Struts2学习笔记,介绍了struts2的基础部分

    struts2学习笔记(完美总结)——转自OPEN经验库

    struts2学习笔记,非本人所写,但有学习的价值,总结的很好,分享一个!

    struts2 学习重点笔记

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

    struts2四天的学习笔记

    struts2四天的学习笔记。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    struts2学习笔记

    struts2学习笔记struts2学习笔记struts2学习笔记

    struts2学习笔记.doc

    本人学习struts2的笔记,希望大家可以多多学习以后共同交流

    Struts2_学习笔记

    Struts2_学习笔记Struts2_学习笔记Struts2_学习笔记

    struts2学习笔记3数据类型转换

    struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换

    struts2学习笔记(1)

    1. struts2框架的引入 1)把struts2的相关jar包导入到项目中去 2)把struts2框架的配置文件struts.xml复制粘贴到项目中的src下面(同时也可以把log4j.properties放到src下) 在这里我们主要是要的这个struts.xml文件...

    struts2 学习笔记 实战

    namespace :对应与项目名称后面的"/"(例如Struts2_0100_Introduction后面的"/") (http://localhost:8080/Struts2_0100_Introduction/) 四、 标签 是用来解决重名的问题,例如当系统的前台和后台都有一个action...

    Struts2_day03笔记

    学习Struts2第三天笔记

    Struts2_day04笔记

    学习Struts2第四天笔记

    struts2学习笔记(详细文字)

    structs2很详细的学习笔记,structs2的建造,工作原理,例子,逐步讲解,纯文字的

    struts2详细学习笔记

    这个是本人自学struts2框架时的总结笔记,里面关于struts2的基本知识很是详尽,如果想要进阶的就不要看了,这只是struts2基础的笔记,个人学习用的,绝不掺假!

Global site tag (gtag.js) - Google Analytics