0

我正在运行 tomcat6 并将其作为服务器连接到 eclipse 中,因此我可以快速调试代码更改 - 但是我遇到了传递给我的 servlet 的路由问题。

我正在运行 spring mvc3,并在类上注释了我的路线,例如:

@Controller
@RequestMapping(value="/rest")
public class HandleItController {
...

在 web.xml 我有

<welcome-file-list>
    <welcome-file>welcome.html</welcome-file>
</welcome-file-list>

<servlet-mapping>
    <servlet-mapping>handleit</servletmapping>
    <url-pattern>/rest</url-pattern>
</servlet-mapping>

但是,我一次只能使这些设置之一按需要工作。

假设“Web 项目设置”的上下文根设置为appname 现在,如果我 GET localhost:8080/appname 我将根据需要获得欢迎页面但是如果我点击 localhost:8080/appname/rest/yadda 我会收到警告说

在名称为“handleit”的 DispatcherServlet 中找不到具有 URI [/appname/rest/yadda] 的 HTTP 请求的映射

如果我将我的 servlet url-pattern 更改为 / ,那么我会通过 servlet 路由请求而没有预先添加 appname 并且 servlet 按预期处理它们 - 但是我不能然后点击欢迎页面

我需要一个不涉及硬编码appname到 web.xml 或控制器映射中的解决方案,必须有某种方法可以同时提供 html 文件和独立于我的应用程序部署到的 uri 的 servlet - 即停止将 url 的上下文部分发送到 servlet

4

1 回答 1

0

中的 URI@RequestMapping将附加到url-mapping调度程序 servlet 的 中。因此,如果 servlet 和控制器都映射到rest,则完整的 URI 将变为/contextpath/rest/rest。如果您不希望这样,请将您的控制器映射到/

编辑:当您将 servlet 映射到时它不起作用的原因/是 Spring 调度程序 servlet 处理上下文根下的所有内容。所以要让它工作,你需要配置 Spring MVC 来提供静态文件。

于 2013-04-11T17:01:00.880 回答