0

我试图弄清楚我是如何构建一个 restFull Web 服务器的:

1:去 / 时服务单个 index.html 文件

2:所有其他 URL 将被控制器以一种安静的方式捕获 例如:/invoke1 -> 将到达“/invoke1”的请求映射

问题:

首先,spring 调度程序对提供 html 页面有一些奇怪的影响(我不是在谈论资源和<mvc:resources mapping),我是在谈论提供 html 页面而不是 JSP。

我通过使用默认的 catalina servlet 解决了这个问题,如下所示:

<servlet>
 <servlet-name>default</servlet-name>
    <servlet-class>
      org.apache.catalina.servlets.DefaultServlet
    </servlet-class>
   <load-on-startup>2</load-on-startup>       
</servlet>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/docs/*</url-pattern>
</servlet-mapping> 

使用此代码,我可以提供 HTML 页面(即使在安全性之后,只要它们位于 /docs/* 路径下),所以从这里我可以做到:

@RequestMapping(method = RequestMethod.GET)
public String main() {
     return "redirect:/docs/index.html";
}

但这不是我想要的。从这里开始,浏览器上的 URL 将显示为 /docs/

我想要发生的是,当用户去 / 他会得到 index.html 但是当他去 /invoke1 时,他会到达 spring 控制器。

这是我现在试图弄清楚一段时间的事情。希望您能指导我找到正确的解决方案。谢谢你。

4

4 回答 4

0

在您的配置文件中,您可以定义一个mvc:view-controller来处理重定向 URL:

<beans xmlns:mvc="http://www.springframework.org/schema/mvc"
 .....
 xsi:schemaLocation="...
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
 ....>

<mvc:view-controller path="/index" view-name="/docs/index.html" />
 ....
</beans>

你可以改变你的main方法重定向到/index

@RequestMapping(method = RequestMethod.GET)
public String main() {
     return "redirect:/index";
}

现在,当向 发出请求时/,它将来到该main方法,该方法将向 发送重定向请求/index。上面的映射会将请求转发/index到静态视图index.html。并且/docs/index.html不会出现在浏览器 URL 中。

于 2013-10-10T10:06:46.670 回答
0

使用 Spring 3+ 及其资源处理,您可以:

  • 将 servlet 映射到/- 所有请求(不包括*.jsp)都将由 Spring 处理
  • 配置 Spring 以服务您的资源- (因此index.html将由 Spring 提供服务)
  • 在 web.xml 中配置index.html为您的<welcome-file>
于 2013-10-10T10:45:38.443 回答
0

1)最简单的解决方案是将 Spring 映射到类似的东西/rest/并离开/你的index.html.

2)另一种解决方案,虽然您不希望它,将您index.html的 JSP 包装起来并提供它/index.html并按预期定义您的控制器。

3) 或者使用< mvc:resources >。您可以.html从预定义的静态目录中提供服务,然后只需在索引控制器“static/index.html”中返回。参看。这个StackOverflow问题。

于 2013-10-10T08:23:09.563 回答
0

简单的答案是您需要使用转发(“转发:/”)而不是重定向(“重定向:/”)。

于 2013-10-10T13:48:17.887 回答