(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写错误信息。
分享到:
相关推荐
13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...
### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...
根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...
本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...
Struts2是一个强大的Java web应用程序开发框架,它遵循Model-View-Controller (MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用。本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与...
### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...
张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...
### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...
struts2学习笔记struts2学习笔记struts2学习笔记
### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换
Struts2是一个强大的MVC(Model-View-Controller)框架,它在Java Web开发中扮演着重要的角色。本文将深入探讨Struts2的核心概念,包括Namespace、标签、Action以及它们在实际开发中的应用。 一、Namespace ...
学习Struts2第三天笔记
- 扩展`SupportAction`(最常用):继承`org.struts2.interceptor.DefaultActionInvocation`,提供更多的默认行为和便利功能。 4. **路径和Action映射**:在Struts2中,URL路径是基于Action的,而不是直接指向JSP...
学习Struts2第四天笔记