Struts2多配置文件在不同目录下是否可以加载的问题
由于开发需要涉及到的模块比较多,所以考虑不同模块的Struts配置分开放看着清楚一点。
但是遇到一点问题:
src目录下放struts.xml
src下的config里放各个模块的配置文件比如这样
/src
----/config
-----------/模块1
----------------模块1.xml
-----------/模块2
----------------模块2.xml
struts.xml里使用include标签
<include file="config/模块1/模块1.xml"/>
这个样子写,在Eclipse里按住Ctrl键同时鼠标放到文件路径上的时候,文件路径显示下划线可以点击进去查看文件
说明文件路径没问题。
但是启动容器之后,进入页面,在用户点击链接或者提交form之后,显示找不到Action,路径不可用
如果把每个配置文件里的内容拷贝出来粘在struts.xml里,运行就没有问题
想知道这是为什么呢?Struts2不支持这么配置吗?
--------------------编程问答-------------------- 你可以将几个模块的配置文件和struts.xml放到同以目录下,然后包进去就可以了.
没有像你那样配置过.
不然你就将文件全部配到web.xml里面,那样应该就能找到路径了 --------------------编程问答-------------------- 可以这么做的。
看看有没有Action定义的问题。不行的话,贴代码吧。 --------------------编程问答-------------------- 可以这样啊,是不是你jsp调用action的时候写错了,比如namespace什么写错了 --------------------编程问答--------------------
----------------模块1.xml
----------------模块2.xml
这样分好以后,要把这些分散的 ---------模块.xml 集中在一个 struts.xml 里面
struts.xml 如下:
<!-- 公共模块 -->
<include file="/config/struts/模块1.xml" />
<!-- 信息数据模块 -->
<include file="/config/struts/模块2.xml" />
希望对你有帮助 --------------------编程问答--------------------
这个可能性比较大
这种做法肯定是可以的 --------------------编程问答-------------------- 好吧,贴配置文件代码
struts.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>
<!-- 引入用户控制部分的配置-->
<include file="user/struts-user.xml"/>
</struts>
struts-user.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>
<package name="user" namespace="/user" extends="struts-default">
<action name="login class="loginAction">
<result name="success">/WEB-INF/page/common/needLogin.jsp</result>
</action>
</package>
</struts>
第二个配置文件里的配置直接复制到第一个配置文件里之后(同时删除第一个配置里的include标记)
运行没问题
但是按上面这样做就找不到Action
页面是这样的
<body>
<s:form action="login" namespace="/user" name="u" method="post">
<s:textfield label="用户名" name="loginUser.a"></s:textfield><br/>
<s:password label="密码" name="loginUser.b"></s:password>
<s:submit value="登录"></s:submit><s:reset value="清空"></s:reset>
</s:form>
</body>
--------------------编程问答--------------------
这一行是不是误打少了一个双引号 --------------------编程问答-------------------- xml 的属性赋值 必须 有引号 引起来 --------------------编程问答--------------------
少打一个双引号的目的是想看看Struts是否已经加载配置文件
这段配置如果写在struts.xml里,启动容器的时候会报错
但是写在第二个文件里,再用struts.xml去include的时候,容器启动正常
说明,根本就没加载第二个文件 --------------------编程问答-------------------- 那你有没有报这样的信息
信息: Unable to locate configuration files of the name xxx, skipping --------------------编程问答-------------------- 没有诶~~~~ --------------------编程问答--------------------
哦?Struts启动时使用了其他的struts.xml文件? --------------------编程问答--------------------
没啊,就是在web.xml里制定了struts.xml的路径 --------------------编程问答-------------------- 可以,但是需要写全路径在web.xml内配置的时候。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,../../WEB-INF/conf/struts/struts.xml,../../WEB-INF/conf/struts2/struts1.xml,../../WEB-INF/conf/struts2/struts2.xml</param-value>
</init-param>
</filter> --------------------编程问答--------------------
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/classes/conf/**/*.xml
</param-value>
</init-param>
这是加载一个目录下所有xml文件 --------------------编程问答-------------------- 可以这么用 肯定代码有问题 --------------------编程问答-------------------- 按照14楼的做法,没有出现问题,并且运行正常。
但是我是想在web.xml中只配置一个主的struts.xml
然后再用struts.xml引用其他的配置。
这样做的话,和我的目的有些偏离。
再等等。
如果代码有问题,配置应该无论怎么弄都运行不成功吧? --------------------编程问答-------------------- 问题解决了没,你用了SSH整合了的吧? --------------------编程问答--------------------
最终还是和14楼的方法一样做的
我们用的数据层一般是JDBC或者iBatis --------------------编程问答-------------------- 把package和form表单中的namespace="/user"去掉 或者 请求的url前面去掉/ 即写成:user/login.action
补充:Java , Java EE