2015-10-18 114 views
0

我正在使用Embedded Jetty和Spring MVC,并且通过主函数启动我的WebApplication。 我不喜欢它看起来的样子,它不是很干净,我觉得我做错了什么,即使它工作得很好。 我的问题是,我想初始化主方法之外的ServerHolder,ServletContextHandler和Server对象,但是我不能这样做,因为DispatcherServlet需要和ApplicationContext。嵌入式Jetty + Spring MVC主要方法

任何想法?

public static void main(String[] args) throws Exception { 

    AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); 
    applicationContext.register(EPConfiguration.class); 

    ServletHolder servletHolder = new ServletHolder(new DispatcherServlet(applicationContext)); 

    ServletContextHandler context = new ServletContextHandler(); 
    context.setContextPath("/"); 
    context.addServlet(servletHolder, "/*"); 

    BasicConfigurator.configure(); 

    Server server = new Server(); 
    server.setHandler(context); 
    //HTTP 
    ServerConnector connector = new ServerConnector(server); 
    connector.setPort(9999); 

    server.setConnectors(new Connector[]{connector}); 
    server.start(); 
    server.join(); 
} 

回答

0

我不跟熟悉并且码头,但你可以设置和通过以下方式初始化DispatcherServlet

  1. 声明它实现了抽象类AbstractAnnotationConfigDispatcherServletInitializer一个Java类(它通常会被称为WebAppInitializer )。
  2. 实现其抽象方法 - getRootConfigClasses()(返回配置应用程序上下文的类),getServletConfigClasses()(它返回配置ServletContext的类)和getServletMappings()(它设置DispatcherServlet映射)。
  3. 我通常将配置ServletContext的类调用为WebConfig。您应该使用@Configuration@EnableWebMvc对其进行注释。此外,你应该用它来定义一个ViewResolver豆:

```Java的

@Bean 
public ViewResolver viewResolver() { 
    InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
    resolver.setPrefix("/WEB-INF/view"): 
    resolver.setSuffix(".jsp"); 
    resolver.setExposeContextBeansAsAttributes(true); 
    return resolver; 
} 

```