如何将基于注释的RequestMapping与静态内容相结合?

时间:2017-09-19 11:30:48

标签: java spring spring-mvc annotations spring-web

我有一些内容需要动态加载我的控制器和一些我想以静态方式传递的内容。

目前我必须在dispatcher-servlet.xml中手动配置控制器的路径,例如@RequestMapping无效。如果我从<mvc:resources mapping="/static/**" location="/static/" />删除dispatcher-servlet.xml行,则会再次正确阅读注释。

我试图在web.xml中更改调度程序servlet的上下文url,并将静态页面放在spring控件之外,但这也不起作用,所以我还原它。

我的目标是从urlMapping中删除dispatcher-servlet.xml bean并通过注释完成。据我所知,还应该删除AbstractControllerhandleRequestInternal部分。

让我感到困惑的是,当我遗漏静态资源行时,我只能使用注释。

以下是我目前州的相关行动:

调度-servlet.xml中

<context:component-scan base-package="some.pkg.containing.controllers" />
<mvc:resources mapping="/static/**" location="/static/" />
<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  p:prefix="/WEB-INF/jsp/"
  p:suffix=".jsp" />

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    <props>
      <prop key="/dashboard/*">dashboardController</prop>
    </props>
  </property>
</bean>

的web.xml

<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

控制器包装:

@Controller
@RequestMapping("/dashboard")
public class DashboardController extends AbstractController {
  public ModelAndView getSite() {
    ModelAndView retVal = new ModelAndView("dashboard_base");
    retVal.addObject("url", "/dashboard");
    return retVal;
  }
  @Override
  protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
    return getSite();
  }
}

1 个答案:

答案 0 :(得分:0)

你必须告诉春天的mvc部分它也应该尊重你的注释。因此,如果您将此行添加到dispatcher-servlet.xml,它将起作用:

<mvc:annotation-driven />