【问题标题】:Dynamic MVC Controller with Spring MVC and Java使用 Spring MVC 和 Java 的动态 MVC 控制器
【发布时间】:2015-12-13 22:06:09
【问题描述】:

我正在使用 Java 1.8 和 Spring MVC(最新版本),但我遇到了一个无法解决的问题。我有一个由 CMS 提供支持的网站,该网站通过 JSON 将内容传送到 web 应用程序,存储在 couchbase 存储库中。每个文档代表一个页面,文档的键是页面的 URL。所以我想要做的是从请求中获取 URL,它可以是 HTML 或 JSP 或其他任何东西,所有 GET 请求都通过一个动态控制器,该控制器将通过基于 URL 键查找文档来解析 URL。

我有一个页面通过动态控制器,但由于某种原因没有其他内容,我无法弄清楚。我从tomcat得到的只是404。任何人都可以提供一些帮助。我可以很容易地在 .Net MVC 中做同样的事情,但使用 Java 和 Spring MVC 似乎并不那么简单。

非常感谢任何帮助或建议。

谢谢,

【问题讨论】:

  • 能否请您发布您的控制器代码?

标签: java spring spring-mvc


【解决方案1】:

我设法解决了这个问题,我已经为任何通过 CMS 驱动的网站遇到这个问题的人发布了我的示例代码。

控制器代码

@Controller
public class PageController {

    @Autowired
    private ViewResolver viewResolver;

    @RequestMapping(value="**", method = RequestMethod.GET)
    public ModelAndView page() throws Exception {

        PageRepository repo = new PageRepository();

        String url = getUrl();
        Page page = repo.GetPageByID(url.toLowerCase());
        if (page == null)
        {
            throw new ResourceNotFoundException();
        }
        else
        {
            config conf = new config();
            page.setViewResolver(viewResolver);
            ModelAndView mav = new ModelAndView(conf.PageViewPath() + page.getPageTemplate());
            mav.addObject("page", page);
            return mav;
        }
    }
}

我的 MVC Dispatcher Servlet 的配置

<context:component-scan base-package="com.fsdynamic.*" />

    <mvc:annotation-driven/>
    <mvc:default-servlet-handler default-servlet-name="mvc-dispatcher"/>
    <mvc:resources mapping="/resources/**" location="/resources/"/>

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

我的 Web.xml 的配置

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <context-param>
    <param-name>contextConfiguration</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.eot</url-pattern>
    <url-pattern>*.svg</url-pattern>
    <url-pattern>*.ttf</url-pattern>
    <url-pattern>*.woff</url-pattern>
  </servlet-mapping>
</web-app>

我希望这对将来的其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2015-01-16
    • 2012-07-06
    相关资源
    最近更新 更多