我正在使用嵌入式Jetty和Spring MVC,我正在通过main函数启动我的WebApplication。我不喜欢它的样子,它不是很干净,我觉得我做错了什么,即使它工作得很好。我的问题是,我想初始化ServerHolder,ServletContextHandler和服务器对象外的主要方法,但我不能这样做,因为DispatcherServlet需要和ApplicationContext。
任何想法?
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();
}
我不熟悉Jetty,但是您可以通过以下方式设置和初始化DispatcherServlet
:
- 声明一个java类来实现抽象类
AbstractAnnotationConfigDispatcherServletInitializer
(通常称为WebAppInitializer
)。 - 实现其抽象方法-
getRootConfigClasses()
(返回配置应用程序上下文的类),getServletConfigClasses()(返回配置ServletContext的类)和getServletMappings()
(设置DispatcherServlet
映射)。 我通常调用配置ServletContext的类为
WebConfig
。您应该用@Configuration
和@EnableWebMvc
注释它。此外,您应该使用它来定义ViewResolver
bean:' ' ' java
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/view"):
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
' ' '