您的位置:首页 > 编程语言 > Java开发

Struts2框架学习2Day_Struts核心配置和Action的实现

2020-03-30 19:10 1156 查看

明明庸庸碌碌,但却不甘碌碌无为,最终会变成对这个世界的愤懑,去保护那怯弱的自尊心,本不该这样 ——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>

今天就到这里,我尽可能按照循序渐进的顺序
完美

  • 点赞
  • 收藏
  • 分享
  • 文章举报
非职业流浪家 发布了11 篇原创文章 · 获赞 1 · 访问量 233 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐