【问题标题】: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>
我希望这对将来的其他人有所帮助。