struts2之4-模块化开发的支持
如图:
我如果需要开发一个新的模块,在组织代码的时候,为了便于后期维护,我就需要独立的文件夹,独立的配置文件来维护代码。struts2在这些方面给了住够灵活的支持。
主要体现在namespace,include 两个元素上。国际化的时候,属性文件由基本名称来进行模块化支持。
1 namespace
命名空间,体现在struts配置文件中,也体现在jsp页面<s:form>中
会影响浏览器中访问路径的变化。
在浏览器里面输入的东西,http://ip地址:端口号/项目部署名称/namespace/action名称。
2 include
模块化struts.xml配置文件
具体的示例代码内容为:
LoginAction 类:
// 增加了一个方法
public class LoginAction extends ActionSupport{
//跳到另一个模块的jsp页面
public String moduleJsp() throws Exception{
System.out.println("执行了 moduleJsp() 方法");
return "success";
}
}
struts.xml的文件内容
<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定struts2 配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
<!-- struts 是struts2 配置文件的根 -->
<struts>
<!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
<include file="struts-default.xml"></include>
<!-- package 提供了将多个 Action 组织为一个业务模块的方式, package相当一个业务模块的抽象 名字必须是唯一的 -->
<package name="main" extends="struts-default">
<!-- Action 必须是在 包空间下定义 -->
<!-- class 中指定要执行的action类 从WEB-INF/classes的文件夹做为根,开始找 -->
<action name="login" class="com.mycom.LoginAction" >
<!-- jsp文件在工程中的位置 WebRoot\jsp\login.jsp -->
<result name="success">/jsp/welcome.jsp</result>
<result name="error">/jsp/error.jsp</result>
</action>
<action name="method1" class="com.mycom.LoginAction" method="addMetd" >
<result name="success">/jsp/welcome.jsp</result>
<result name="error">/jsp/error.jsp</result>
</action>
<action name="signAction" class="com.mycom.LoginAction" >
<result name="success">/jsp/welcome.jsp</result>
<result name="error">/jsp/error.jsp</result>
</action>
<action name="Action*" class="com.mycom.LoginAction" method="{1}" >
<result name="success">/jsp/{1}page.jsp</result>
</action>
<action name="moduleJsp" class="com.mycom.LoginAction" method="moduleJsp" >
<result name="success">jsp/myModule/myModulePage.jsp</result>
</action>
</package>
<!-- 包含了一个业务模块的配置文件 -->
<include file="struts-module1.xml"></include>
</struts>
struts-module1.xml 的文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
<!--namespace:定义package命名空间 该命名空间影响到url的地址,访问地址为http://localhost:服务端口号如8080/服务发布名称/module/testAction -->
<package name="module1" namespace="/module" extends="struts-default">
<action name="testAction" class="com.mycom.myModule.MyModuleAction" method="test" >
<!--jsp路径 相对于WebRoot -->
<result name="success">/jsp/myModule/myModuleTest.jsp</result>
<!--转向不只是jsp页面,下面的转向一个Action方法也很常用-->
<!--重新定向 指向一个可以执行的action方法 并且有参数传递 感兴趣的可以看一下 多用于信息添加到列表页面的切换 -->
<result name="viewInfo" type="redirect">/module/listLnfo?name=${name}</result>
</action>
</package>
</struts>
WebRoot/jsp/myModule/myModulePage.jsp 这个jsp文件内容:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>我的模块</title>
</head>
<body>
<s:form action="testAction" method="post" namespace="/module" >
<table>
<tr><td><s:textfield name="name" label="姓名"></s:textfield></td></tr>
<tr><td><s:textfield name="address" label="籍贯"></s:textfield></td></tr>
<tr><td>
<s:submit value="提交"></s:submit>
<s:submit value="提交到另一个方法" method="otherMethod" ></s:submit>
</td></tr>
</table>
</s:form>
</body>
</html>
WebRoot/jsp/myModule/myModuleTest.jsp 这个jsp文件内容:
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>模块测试页面</title>
</head>
<body>
这个你要的模块测试页面.
</body>
</html>
国际化的时候,也有模块化的开发支持,下一篇关于struts2国际化的文章,我会详细说明。