Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有控制器的SpringMVC是否可行(但仅使用DispatcherServlet)_Java_Html_Spring_Spring Mvc_Servlets - Fatal编程技术网

Java 没有控制器的SpringMVC是否可行(但仅使用DispatcherServlet)

Java 没有控制器的SpringMVC是否可行(但仅使用DispatcherServlet),java,html,spring,spring-mvc,servlets,Java,Html,Spring,Spring Mvc,Servlets,我试图在不编写显式控制器的情况下配置SpringMVC应用程序,而只是使用DispatcherServlet。我很难让它正常工作(我不是故意添加控制器的。这是我的密码: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-cl

我试图在不编写显式控制器的情况下配置SpringMVC应用程序,而只是使用DispatcherServlet。我很难让它正常工作(我不是故意添加控制器的。这是我的密码:

<servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <load-on-startup>2</load-on-startup>
  </servlet>

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

您可以通过在dispatcher-servlet.xml中指定控制器来实现这一点,只要您还指定了某种视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/htm/" />
  <property name="suffix" value=".htm" />
</bean>

<mvc:view-controller path="/test" view-name="test" />

好的,那么您的问题实际上是知道是否可以为静态资源提供名称与dispatcher servlet匹配的服务

这是绝对可能的,:

这允许将DispatcherServlet映射到“/”(从而覆盖容器的默认Servlet的映射),同时仍然允许容器的默认Servlet处理静态资源请求。它使用“/**”URL映射配置DefaultServletHttpRequestHandler,并且相对于其他URL映射具有最低优先级

此处理程序将所有请求转发到默认Servlet


选择将SpringServlet映射到一个非常特定的映射(
*.htm
)是非常奇怪的,尽管您知道这个映射会与静态资源冲突。您可以简单地选择将servlet映射到任何其他扩展(
*.action
,或其他任何扩展),这样就不会有这种冲突。

这是意料之中的。你在这里的目标是什么?您将*.htm映射到dispatcher servlet。您向test1.htm发送请求。因此,它转到DispatcherServlet。dispatcher servlet尝试将请求分派到映射到/test1.htm的控制器,但没有找到任何请求,因为您根本没有定义任何控制器,因此它会返回404错误。您为什么要这样做?我觉得这很傻。我的目标是理解为什么我们需要一个控制器,而我只想把请求发送到一个特定的资源。SpringMVC的DispatcherServlet是否足够灵活,可以看出这里没有控制器,DispatcherServlet应该将请求路由到test1.htm。如果它足够灵活,那么我只想知道如何做。听起来你在寻找一个视图控制器。将你的
DispatcherServlet
映射到
/
并在xml文件中注册一个
。这将把所有未解析的URI传递给容器。
[org.springframework.web.servlet.PageNotFound] WARN  No mapping found for HTTP request with URI [/myapp/test1.htm] in DispatcherServlet
with name 'dispatcher'
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/htm/" />
  <property name="suffix" value=".htm" />
</bean>

<mvc:view-controller path="/test" view-name="test" />