Struts2框架学习2Day_Struts核心配置和Action的实现
明明庸庸碌碌,但却不甘碌碌无为,最终会变成对这个世界的愤懑,去保护那怯弱的自尊心,本不该这样 ——2020.03.12
未来等我时间充足的时候我会开一篇解析Struts2框架源码的文章,长期不定期更新的那种,我个人认为学习框架是为了未来工作的时候使用它,提升效率,而最终目的是吸收它的养分。
今天有三大主题:Struts.xml的配置、Action的实现、实现与配置的进阶版
Struts.xml的配置
具体每个位置是什么意思我昨天已经说啦
<package name="anotherPackage" extends="struts-default" namespace="/xxx"> <action name="hello" class="com.igeek_01_config.HelloAction"> <result>/01_hello/result.jsp</result> </action> </package>
1、namespace这个部分要注意!
第一点:
如果url是 http://project/xxx/yyy.action,namespace就是/xxx
如果url是 http://project/xxx/aaa/yyy.action,namespace就是/xxx/aaa
如果url是 http://project/xxx/aaa/bbb/yyy.action,namespace就是/xxx/aaa/bbb
第二点:
如果url是http://localhost:8080/struts2_chap04/xxx/aa/bb/cc/dd/ee/hello.action
首先去搜索namespace为/xxx/aa/bb/cc/dd/ee 的package,
如果找不到,去搜索/xxx/aa/bb/cc/dd的package,
如果找不到,去搜索/xxx/aa/bb/cc的package,
如果找不到,去搜索/xxx/aa/bb的package,
如果找不到,去搜索/xxx/aa的package,
如果找不到,去搜索/xxx的package,
第三点:
namespace= “” 和namespace ="/“的区别
namespace=”/"的优先级比namespace= “” 的优先级高
2、忘记写class属性会发生什么呢?
程序会去执行 ActionSupport类的execute方法,返回SUCCESS(源自Action接口的常量)
3、如果我们写的程序向自定义错误页面怎么办的?
default-action-ref标签位置很重要
<!-- 告诉struts2框架,如果action找不到,跳转到指定的Action --> <!-- 必须要配置在Action节点前,个人推荐放在最前面--> <default-action-ref name="errorPage"></default-action-ref> <!-- 配置一个出错要执行的Action --> <action name="errorPage"> <result name="success">/01_hello/errorPage.jsp</result> </action>
4、分离多个配置文件,并引用,让结构清晰
注意是在struts标签里,不是package里
<!-- 引入分离文件 --> <include file="struts-part1.xml"></include>
5、不想用.action当URL的后缀,想自定义
struts.action.extension是core里配置文件的常量名字,默认值是action
方案一(推荐):在struts标签里
<!-- 配置后缀名常量,推荐在struts.xml中配置常量 --> <constant name="struts.action.extension" value="abc"></constant>
方案二:在web.xml里加,web.xml优先级大于struts.xml
<init-param> <param-name>struts.action.extension</param-name> <param-value>xyz</param-value> </init-param>
变成
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>struts.action.extension</param-name> <param-value>xyz</param-value> </init-param></filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Action的实现的三种方案
方案一:实现Action接口
方案二(推荐):继承ActionSupport类,因为该类实现了Action接口,所以功能上更加强大
方案三:普通的POJO类,实现execute()方法,可以抛出异常
public String execute() throws Exception { System.out.println("hello action"); return "success";//在前两种方案可以返回SUCCESS(源自Action接口的常量) }
实现与配置的进阶版
1、我们不想调用execute(),我想一个类实现好多功能
action类:
public class UserAction extends ActionSupport{ public String login() throws Exception { System.out.println("执行了login方法"); return SUCCESS; } public String regist() throws Exception { System.out.println("执行了regist方法"); return SUCCESS; } }
配置文件:method属性指明了要执行的方法名
<action name="userLogin" class="com.igeek_01_mehtod.UserAction" method="login"> <result name="success">/loginResult.jsp</result> </action> <action name="userRegist" class="com.igeek_01_mehtod.UserAction" method="regist"> <result name="success">/registResult.jsp</result> </action>
2、我想一个action标签匹配好多链接
方案一:通配符方式配置执行方法
访问这两个链接:
http://localhost:8080/struts2_chap07/user_regist.action
http://localhost:8080/struts2_chap07/user_login.action
<action name="user_*" class="com.igeek_01_mehtod.UserAction" method="{1}"> <result name="success">/{1}Result.jsp</result> </action>
方案二:2个通配符方式,不常用,URL既告诉类有告诉方法
访问这链接:
http://localhost:8080/struts2_chap07/UserAction_login.action
<action name="*_*" class="com.igeek_01_mehtod.{1}" method="{2}"> <result name="success">/{2}Result.jsp</result> </action>
方案三:动态方法调用,不安全,默认禁用,不推荐,!后面是执行方法
访问这链接:
http://localhost:8080/struts2_chap07/userDy!Result.action
首先在struts标签里
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
然后
<action name="userDy" class="com.igeek_01_mehtod.UserAction"> <result name="success">/loginResult.jsp</result> </action>
今天就到这里,我尽可能按照循序渐进的顺序
完美
- 点赞
- 收藏
- 分享
- 文章举报
- Struts2框架学习系列(二) Action --struts.xml配置文件详解
- Struts2学习笔记之与struts.xml配置和Action有关的属性
- Struts2.0学习笔记---设置国际化全局配置文件和包范围配置文件和Action范围配置
- struts2框架中Action必须实现execute方法?和Struts参数传递
- Jimoshi_Struts2 框架学习(二)--action生命周期、struts.xml中全局的配置、获取request和session和response值、IOC思想
- struts学习之form表单, 配置文件action对应关系。
- Struts2学习第四天:struts模块配置、默认Action、Action总结
- 【学习】Struts 2 : 实现 Action
- struts学习笔记:三种方法配置action
- Struts 2 学习笔记 - 4.配置文件深入(2):action,result,exception
- SSH与SSM学习之Struts203——主配置文件配置_常量配置_动态方法配置_action书写方式
- struts2基础学习收录重点之OGNL动态配置result , 使用注解配置action,实现java国际化
- Struts2学习笔记之struts.xml配置常量和Action处理流程
- Struts2学习笔记之struts.xml配置常量和Action处理流程
- (上节)Spring+JDBC+Struts;实现图片上传;配置的属性默认dbc用单例模式,action一定要scope=“prototype”
- Struts2-学习笔记系列(2)-常量配置和实现action
- struts2中如何实现在struts.xml配置文件的action标签中加入自定义属性?
- Struts2框架中struts.xml文件的package标签的命名空间属性、默认action配置、result配置、Struts异常处理
- 【Struts2学习笔记】struts2.5使用通配符配置action跳转
- struts1 与struts2 Action的配置实现