【问题标题】:How to browse htm file in Spring MVC如何在 Spring MVC 中浏览 htm 文件
【发布时间】:2012-02-10 11:08:28
【问题描述】:

我使用的是 Spring MVC 2 的默认配置。所以,我的调度程序看起来像,

 <prop key="index.htm">indexController</prop>

我在根目录下有一个简单的 htm 文件。当我浏览这个文件时,我得到 404:Not Found Error。如何在 Spring MVC 中浏览(物理上存在于磁盘上的)htm 文件。

【问题讨论】:

  • 这个问题已经在stackoverflow.com/questions/2129876/…得到解答
  • 在下面查看我的答案,如果可能的话,也可以在您的 web.xml 中为调度程序 servlet 提供条目。谢谢

标签: java spring-mvc glassfish


【解决方案1】:

在基于注解的 Spring 3.x 中,您可以在控制器中将其编写为,

@RequestMaping(value="/index.htm")
public void doSomeJob(){
    //some code here
}

如果您以“/pathToIt/index.htm”的形式发出请求,那么它将被 doSomeJob() 方法捕获..

P.S Spring MVC 3.x 配置文件中不需要请求映射

注意:如果 spring 找不到您的物理文件,也可能导致 404..

【讨论】:

  • 谢谢,但我使用的是 MVC 2,问题是我有一个物理 *.htm 文件,但 Spring 声称 404 Not Found。
  • 您能否发布您的项目目录和文件……以及 servlet 配置内容(您在哪里定义了 viewResolvers 等,如果有的话)和接收您的 index.htm 请求的控制器部分……跨度>
  • 查看并下载项目,stackoverflow.com/questions/8861401/…
【解决方案2】:

尝试在你的 springmvc-servlet.xml 文件中添加一个 bean id:

<bean id="indexController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>

然后:

   <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
       <property name="mappings">
        <props>
               ...
           <prop key="/index.htm">indexController</prop>
         </props>
       </property>
    </bean>

【讨论】:

  • 谢谢,但不能解决我的问题。当我删除 web.xml 设置(servlet-mapping)然后它工作。
【解决方案3】:

好的,这听起来很熟悉,如果您使用的是 MVC 2,那么实现此目的的最佳方法是为调度程序 servlet 提供特定映射而不是 /

    <servlet>
      <servlet-name>myDispatcherServlet</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>myDispatcherServlet</servlet-name>
    <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>

这将确保对 *.jsp 的唯一请求将发送到调度程序 servet,而其余请求将由容器本身处理。

【讨论】:

  • 不幸的是,我的所有控制器都已映射到 *.htm。我无法更改此映射。
  • 这无法完成。您必须将文件扩展名从 htm 更改为 html 或将简单的 htm 重命名为 html 文件:(
【解决方案4】:

您需要将 URL index.htm 与您的控制器进行映射。在它具有正确的 spring mvc 配置之前,您无法查看您的页面。

<bean name="/index.htm" class="com.indexController">
 ....
</bean>

在控制器中,您将在modelAndView 中将您的jsp 页面名称作为view 传递。

检查您的视图解析器是否有这样的正确设置

<!-- View Resolver -->
<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix">
        <value>/WEB-INF/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

【讨论】:

  • 是的。将 .jsp 更改为 .htm 或添加另一个值。
  • 我非常了解 Spring MVC 和 ASP.NET MVC 中的路由规则。这不是路由问题。问题是 Dispathcher Serve 捕获所有以 .htm 结尾的请求。我正在寻找类似msdn.microsoft.com/en-us/library/…
  • 在 web.xml 中添加更多的 url 模式 *.htm*.do
猜你喜欢
  • 2011-03-17
  • 2014-07-09
  • 2014-12-16
  • 1970-01-01
  • 2016-06-05
  • 2014-08-07
  • 2017-01-27
  • 1970-01-01
  • 2014-12-12
相关资源
最近更新 更多