在spring中拆分应用程序上下文文件时出错

时间:2009-02-24 11:11:36

标签: spring spring-mvc

我正在尝试在Spring中拆分ApplicationContext文件。

对于前。该文件是testproject-servlet.xml,包含所有条目。现在我想根据逻辑组将这个单个文件拆分成多个文件: group1-services.xml,group2-services.xml

我在web.xml中创建了以下条目:

<servlet>
    <servlet-name>testproject</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/group1-services.xml, /WEB-INF/group2-services.xml
        </param-value>
    </init-param>       
    <load-on-startup>1</load-on-startup>
</servlet>

我使用的是SimpleUrlHandlerMapping:

<bean id="simpleUrlMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="order" value="0"/>
    <property name="mappings">
    <props>
        <prop key="/register.htm">RegisterController</prop>             <prop key="/payroll_services.htm">PayrollServicesController</prop>
    </props>
    </property>
</bean>

我还将控制器定义为:

<bean id="PayrollServicesController" class="com.triforce.b2bseek.businessservices.controller.PayrollServicesController">
      <property name="facadeLookup" ref="FacadeLookup"/>
      ..
      ..
      </property>
</bean> 

问题是我已将ApplicationContext文件“testproject-servlet.xml”拆分为两个不同的文件,并且我将上述条目保存在“group1-services.xml”中。好吗?我想根据它们在单独的.xml文件中的使用来逻辑分组。

但是当我尝试访问应用程序中的页面时,我收到以下错误:

org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping for [/TestProject/payroll_services.htm] in DispatcherServlet with name 'testproject'

请告诉我如何解决它。

提前致谢!

5 个答案:

答案 0 :(得分:1)

替换它                 /WEB-INF/group1-services.xml,/WEB-INF/group2-services.xml         

与 /WEB-INF/group1-services.xml /WEB-INF/group2-services.xm

希望这会奏效...... :)

答案 1 :(得分:0)

我认为你的contextConfigLocation没有问题

我认为调度员需要知道将payroll_servives.htm发送到哪里,并且找不到合适的处理程序知道如何处理这种模式。

请参阅reference documentation

您真的希望*.htm个文件与调度程序servlet匹配吗?

如果您使用的是基于注释的控制器(@Controller),那么您需要有一行类似于:

<context:component-scan base-package="org.springframework.samples.petclinic.web"/>

这将安装一个适当的基于注释的处理程序,用于搜索注释的类/方法:

@Controller
public class PayrollController {
     @RequestMapping("payroll_services.htm")
     public ModelAndView payrollServices() {
         ....
     }
}

否则,如果您使用更传统的处理程序/控制器,则需要使用XML来定义它。此帖子前面的参考文档链接提到了两个这样的处理程序:SimpleUrlHandlerMappingBeanNameUrlHandlerMapping

也许如果您使用处理程序/控制器XML的片段更新了您的问题,这可能会有所帮助吗?

答案 2 :(得分:0)

您是否将ContextLoaderListener添加到web.xml中?我没有看到它:

   <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>

答案 3 :(得分:0)

您需要在每个文件中包含以下内容:

<context:component-scan base-package="com.example.dao" />

如果文件中缺少该文件,则该文件的上下文中似乎不知道带注释的类。

您可能需要重新访问documentation了解详细信息。

答案 4 :(得分:0)

您的DispatcherServlet的处理程序映射不正确或者您使用了错误的URL。如果您修改SimpleUrlHandlerMapping配置周围的布局,我可以告诉您要更改的内容。