Spring SimpleUrlHandlerMapping不允许任何html页面的路由

时间:2009-11-06 05:29:31

标签: spring file-upload spring-mvc

我正在尝试基于Spring documentation在我的Spring应用程序中实现文件上传。但是,当我添加SimpleUrlHandlerMapping引用时,我甚至无法路由到我的登录页面。

在我的web.xml中,我将所有.htm文件映射到我的servlet:

<servlet-mapping>
  <servlet-name>myapp</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

然后,在myapp-servlet.xml中,我有这个:

<bean name="/login.htm" class="com.example.web.LoginFormController">
  <property name="sessionForm" value="true" />
  <property name="commandName" value="loginCommand" />
  <property name="commandClass" value="com.example.command.LoginCommand" />
  <property name="authenticationService" ref="authenticationService" />
  <property name="loginDataAccess" ref="loginDAO" />
  <property name="validator" ref="loginValidator" />
  <property name="formView" value="login" />
  <property name="successView" value="hello.htm" />
</bean>

这允许我进入登录页面并登录。但是,当我根据文档添加以下内容时,我收到此错误:在DispatcherServlet中找不到带有URI [/myapp/login.htm]的HTTP请求的映射,名称为“myapp”

这些是我添加到myapp-servlet.xml文件的行:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    <value>/upload.form=fileUploadController</value>
  </property>
</bean>

<bean id="fileUploadController" class="com.example.web.FileUploadController">
  <property name="commandClass" value="com.example.domain.FileUploadBean" />
  <property name="formView" value="fileuploadform" />
  <property name="successView" value="hello.htm" />
</bean>

如果我取出urlMapping部分,我可以导航到上传页面,但后来我得到一个IllegalStateException。如何正常使用Spring路由htm文件并允许我上传文件? urlMapping不应该只调用upload.form吗?

更新

Per SKaffman's answer,我更新了myapp-servlet.xml,如下所示:

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    <value>
    /upload.form=fileUploadController
    /upload.htm=fileUploadController
    /login.htm=loginController
    </value>
  </property>
</bean>

这允许我导航到上传页面,但是当我点击提交按钮时,我得到404 for upload.form说“(/myapp/upload.form)不可用。”如果我从映射中取出upload.htm,我无法导航到该页面。我不知道用于页面和上传的映射。上传页面已定义此操作:

<form method="post" action="upload.form" enctype="multipart/form-data">

1 个答案:

答案 0 :(得分:2)

默认情况下,Spring会自动注册多个HandlerMapping bean,包括BeanNameUrlHandlerMapping。此处理程序允许您使用<bean name="/login.htm">之类的内容而无需任何其他配置。

但是,只要添加显式处理程序映射bean(如SimpleUrlHandlerMapping),就会不再注册默认值,并且不再映射登录控制器。

最简单的解决方案可能是将您的登录控制器添加到SimpleUrlMappingHandler

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    <value>/login.htm=loginController</value>
    <value>/upload.form=fileUploadController</value>
  </property>
</bean>

<bean id=loginController" class="com.example.web.LoginFormController">
   ...
</bean>