spring-mvc - Spring MVC : How to resolve the path to subdirectories of the root 'JSP' folder in a web application

标签 spring-mvc

使用 SpringMVCs viewResolvers 解析不在 Web 应用程序根 JSP 目录中的 JSP 文件的路径的简单方法是什么?例如,假设我们有以下 Web 应用程序结构:

web-app
  |-WEB-INF
    |-jsp
      |-secure
        |-admin.jsp
        |-admin2.jsp
      index.jsp
      login.jsp

我想使用一些开箱即用的组件来解析 jsp 根文件夹和安全子目录中的 JSP 文件。我有一个 *-servlet.xml文件定义:

开箱即用,InternalResourceViewResolver :
 <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
  <property name="prefix" value="/WEB-INF/jsp/"></property>
  <property name="suffix" value=".jsp"></property>
 </bean>

处理程序映射:
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 <property name="mappings">
  <props>
   <prop key="/index.htm">urlFilenameViewController</prop>
   <prop key="/login.htm">urlFilenameViewController</prop>
   <prop key="/secure/**">urlFilenameViewController</prop>
  </props>
 </property>
</bean>

开箱即用 UrlFilenameViewController Controller :
<bean id="urlFilenameViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController">
</bean>

我遇到的问题是无法解决对安全目录中 JSP 的请求,因为 jspViewResolver只有一个前缀定义为 /jsp/而不是 /jsp/secure/ .

有没有办法处理这样的子目录?我更愿意保留这种结构,因为我也在尝试使用 Spring Security,并且将所有安全页面放在一个子目录中是一个很好的方法。

可能有一种简单的方法可以实现这一点,但我是 Spring 和 Spring MVC 框架的新手,因此任何指针都将不胜感激。

最佳答案

我无法找到我所问问题的确切解决方案,但我确实有适合我特定要求的解决方法。问题似乎在于hander映射。如果按照帖子中的示例进行指定,则对安全文件夹中页面的任何请求都会导致在 /WEB-INF/JSP/ 中定位实际 JSP 文件的尝试失败。文件夹,当然实际文件位于 /WEB-INF/jsp/secure/ .

但是,如果像这样指定:

 <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
   <props>
    <prop key="/login.htm">loginFormController</prop>
    <prop key="**/*.htm">urlFilenameViewController</prop>
   </props>
  </property>
 </bean>

然后所有页面都正确解析。对 /login.html 的请求将转到特定的表单 Controller ,但会找到对所有其他页面的请求,无论它们是在根 JSP 目录中还是在子目录中都会被找到。对我来说,这很好,因为我真正想要的是一种避免为应用程序中的每个页面指定 Controller 的方法(嗯……也许我应该在第一篇文章中说明这一点——也许有更好的方法来无论如何都要这样做(?))。 **/*.htm作为一个包罗万象的案例,我想要由不同 Controller 处理的任何页面都可以在此属性上方显式指定,如 /login.htm 所示。 .

关于spring-mvc - Spring MVC : How to resolve the path to subdirectories of the root 'JSP' folder in a web application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1785988/

相关文章:

java - spring BeanCreationException 关于映射的困惑

java - 通用 DAO 实现, Controller 级别注入(inject)失败

java - Angularjs如何仅在调用init方法后加载div内容

java - 我可以使用 Spring DispatcherServlet 捕获所有不匹配的请求吗

Spring 安全SessionRegistry不起作用

java - spring的SecurityConfig可以拆分吗?

java - 自定义 ExceptionMapper 在 Spring + Jersey + Jetty 中不起作用

hibernate - 如何解决 java.lang.NoClassDefFoundError : org/hibernate/QueryTimeoutException in spring

java - 我 thymeleaf 如何使用页面参数作为属性键?

java - 使用 @Autowire 链接我的 @Service 类和 @Repository 类会导致错误。似乎找不到解决方案