春季3.1.4 Java 1.7
我有一个webapp,其中包含为所有网址配置的DispatcherServlet。他们中的大多数都会有映射。应用程序中有一些静态文件,当我使用http://host:port/myapp/index.html
访问时,正确显示了web目录下index.html的内容。我通过在myapp-servlet.xml中使用以下代码段实现此目的
<mvc:default-servlet-handler/>
我期待当访问网址http://host:port/myapp
时,将呈现默认的index.html,因为我的web.xml中有以下内容
<servlet-mapping>
<servlet-name>myapp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
然而,似乎并非如此,即,除非在URL中指定了index.html,否则DispatcherServlet无法正确解析它。有人能告诉我这是如何实现的吗?服务器日志告诉我以下
o.a.c.c.C.[.[.[/myapp] - servletPath=null, pathInfo=null, queryString=null, name=default
o.a.c.c.C.[.[.[/myapp] - Named Dispatcher Forward
o.a.c.c.C.[.[.[/myapp] - Disabling the response for futher output
o.s.web.servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'myapp': assuming HandlerAdapter completed request handling
o.s.web.servlet.DispatcherServlet - Successfully completed request
答案 0 :(得分:2)
servlet优先于<welcome-file-list>
,因此在这种情况下,<welcome-file-list>
将无效,因为DispatcherServlet
会消耗所有请求,我担心。
解决方案很简单,只需为Spring中的默认路径添加映射,并将控制器操作发送到index.html
。
答案 1 :(得分:1)
如果你已经为Spring MVC正确配置了,那么应该是这样的,
<servlet>
<servlet-name>myapp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myapp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
现在你应该有一个文件myapp-servlet.xml,你应该在其中提供针对所请求的URL PATTERN做什么的映射,或者你可以直接在java文件中进行基于注释的映射。
在这种情况下,您的欢迎文件将不会播放规则,因为您的第一个请求“AppName /”将传递mvc映射“/ *”,并将在Spring MVC文件中搜索映射。
您可以通过这种方式实现您的需求,
<servlet>
<servlet-name>myapp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myapp</servlet-name>
<url-pattern>/mvc/*</url-pattern>
</servlet-mapping>
现在MVC只有在模式跟随“/ mvc /”时才会出现,否则它将在正常流程中起作用。