Java 没有控制器的SpringMVC是否可行(但仅使用DispatcherServlet)
我试图在不编写显式控制器的情况下配置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
<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" />