Spring 3:将page.html映射到page.jsp

时间:2011-05-20 08:52:45

标签: java spring spring-mvc

我正在使用Spring 3,我不知道如何在没有控制器的情况下将somepage.htm映射到somepage.jsp。 那就是:如果我去somepage.htm,我希望它能告诉我jsp。但当然没有重定向。我不希望任何人只看到“.jsp”“.htm”

 <servlet>
    <servlet-name>Training01</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
 </servlet>

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

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
    <value>/jsp/</value>
</property>
<property name="suffix">
    <value>.jsp</value>
</property>

2 个答案:

答案 0 :(得分:5)

要做的是将<mvc:view-controller..>标记与视图解析器结合使用。

有关更多文档,请参阅here

<mvc:view-controller..>标记将网址映射到视图。因此,如果您想将相对网址/login映射到视图名称登录,您可以通过向webmvc-context.xml文件添加以下行来执行此操作:

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

当然要实现这一点,您必须有一个视图解析 - 将逻辑名称映射到特定视图的东西 - 在您的上下文中设置。在您的情况下,因为您使用直接jsps查看图层,所以您需要在配置中添加以下内容:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
  <property name="prefix" value="/WEB-INF/jsp/"/>
  <property name="suffix" value=".jsp"/>
</bean>

因此,如果您在/WEB-INF/jsp目录中有一个jsp login.jsp,那么使用此设置,您就可以直接从网址www.myapp.com/mycontenxtroot/login

中引用该jsp

有关视图解析器的更多信息,请参阅here

答案 1 :(得分:0)

您可能对UrlRewriteFilter感兴趣。这是我建议的方法。如果您认真对待干净的URL,那么无论如何您都可能需要它。

另一方面,如果它是一次性的,最小控制器可能更容易:

@Controller
public class Somepage {
    @RequestMapping("/somepage")
    public String handler() {
        return "somepage.jsp";
    }
}