分模块开发
当项目的开发中,我们每个人可能只会负责一部分的开发 ,最终会将各个功能整合到一个struts.xml下进行解析,但是存在这样的问题,如果某个模块出现问题 我们无法清晰的知道是谁写的模块出问题,因此struts.xml中的include标签轻松的解决了问题,
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入约束 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--常量值的设置模式-->
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<!-- 分模块开发 每个人写一个xml 配置自己的行为 并通过 include引入 -->
<include file="com/sofency/action/hello.xml"></include>
<include file="com/sofency/action/uaccount.xml"></include>
</struts>
这样张三分配到了hello.xml的编写任务,李四分配到了uaccount.xml的任务 任务非常的清晰
Action常用的编写方式(其中有三个)
/实现action接口和继承actionSupport的区别区别(暂时看不懂 先码着)
- 实现Action接口
- 继承actionSupport 都会自动执行里面的execute方法
public class UserAction extends ActionSupport{
public String execute(){
//写注册的逻辑 服务层 Dao层
System.out.println("执行");
return SUCCESS;//接口中的常量
}
}
Action的方法访问
功能函数如下
package com.sofency.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{
public String execute() {
System.out.println("action..");
return "ok";
}
public String delete() {
System.out.println("delete.....");
return NONE;//不用配置相应的result
}
public String add() {
System.out.println("add.....");
return NONE;//不用配置相应的result
}
public String update() {
System.out.println("update.....");
return NONE;//不用配置相应的result
}
}
张三在写xml里面的功能时常常遇到这样的问题
他每写一个功能都要在写响应的action 例如下面的
第一种方式 常规方式
<action name="deleteAction" class="com.sofency.action.HelloAction" method="delete" ></action>
<action name="addAction" class="com.sofency.action.HelloAction" method="add" ></action>
<action name="updateAction" class="com.sofency.action.HelloAction" method="update" ></action>
功能类都在co.sofency.action.HelloAction
下 他很苦恼,感觉搬砖的感觉很不爽。于是有了下面的
第二种访问方式 通配符调用方式
<action name="book_*" class="com.sofency.action.HelloAction" method="{1}"></action>
book_
可以看做该功能写的主人(标识),*
可以匹配到里面的所有方法,{1}
,匹配特定的功能和*
对等
访问的方式如下
127.0.0.1:8888/struts2_day01/book_add.action
; 访问的就是功能函数下的add方法
127.0.0.1:8888/struts2_day01/book_delete.action
; 访问的就是功能函数下的delete方法
这时张三高兴的用一行代码解决的繁琐的问题
但是他又遇到了问题
boss 不让add update delete 没有返回值 认为这样的代码,会将bug给隐藏下来(纯属坑人),要求所有的方法成功执行之后返回SUCCESS
同时返同一界面
于是他写了这样的垃圾代码
<action name="deleteAction" class="com.sofency.action.HelloAction" method="delete" >
<result name="success" >/index.jsp</resuslt>
</action>
<action name="addAction" class="com.sofency.action.HelloAction" method="add" >
<result name="success" >/index.jsp</resuslt>
</action>
<action name="updateAction" class="com.sofency.action.uaccountAction" method="update" >
<result name="success" >/index.jsp</resuslt>
</action>
重复的写了三个
<result name="success" >/index.jsp</resuslt>
这是全局页面的配置
<global-results> <result name="success">/hello.jsp</result> </global-results>
写在package包里面这样就可以同一将返回值为success的结果返回到首页了
perfect