当前位置:编程学习 > JAVA >>

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" />




希望对你有帮助 --------------------编程问答--------------------
引用 3 楼 viszl 的回复:
可以这样啊,是不是你jsp调用action的时候写错了,比如namespace什么写错了

这个可能性比较大 
这种做法肯定是可以的  --------------------编程问答-------------------- 好吧,贴配置文件代码
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>




--------------------编程问答--------------------
引用 6 楼 clarck_913 的回复:
        <action name="login class="loginAction">

这一行是不是误打少了一个双引号 --------------------编程问答-------------------- xml  的属性赋值 必须 有引号 引起来 --------------------编程问答--------------------
引用 7 楼 magong 的回复:
引用 6 楼 clarck_913 的回复:

<action name="login class="loginAction">


这一行是不是误打少了一个双引号


少打一个双引号的目的是想看看Struts是否已经加载配置文件

这段配置如果写在struts.xml里,启动容器的时候会报错

但是写在第二个文件里,再用struts.xml去include的时候,容器启动正常

说明,根本就没加载第二个文件 --------------------编程问答-------------------- 那你有没有报这样的信息

信息: Unable to locate configuration files of the name xxx, skipping --------------------编程问答-------------------- 没有诶~~~~ --------------------编程问答--------------------
引用 11 楼 clarck_913 的回复:
没有诶~~~~

哦?Struts启动时使用了其他的struts.xml文件? --------------------编程问答--------------------
引用 12 楼 magong 的回复:
哦?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整合了的吧? --------------------编程问答--------------------
引用 18 楼 javaxiaochouyu 的回复:
问题解决了没,你用了SSH整合了的吧?


最终还是和14楼的方法一样做的

我们用的数据层一般是JDBC或者iBatis --------------------编程问答-------------------- 把package和form表单中的namespace="/user"去掉 或者 请求的url前面去掉/ 即写成:user/login.action
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,