我正在使用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>
答案 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
有关视图解析器的更多信息,请参阅here:
答案 1 :(得分:0)
您可能对UrlRewriteFilter感兴趣。这是我建议的方法。如果您认真对待干净的URL,那么无论如何您都可能需要它。
另一方面,如果它是一次性的,最小控制器可能更容易:
@Controller
public class Somepage {
@RequestMapping("/somepage")
public String handler() {
return "somepage.jsp";
}
}