A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近在做一些简单的Servlet开发的时候,感觉每次调试的时候都要发布到tomcat上很麻烦,把程序共享给同事也很麻烦,需要帮他设置本地的tomcat环境. 在网上找了找其他的Servlet运行环境,发现用Jetty可以很方便的实现嵌入式Web container.这里我记录一下通过Jetty搭建简单Servlet运行环境的过程,希望对有同样需要的朋友有所帮助.

整个环境的代码可以在https://github.com/mcai4gl2/jettysetup找到. 代码包括了IntelliJ的项目文件,如果需要eclipse项目文件,请在下载代码后运行 mvn eclipse:eclipse 来生成eclipse项目文件. (当然, 请在本地安装Maven).
  1. 设置Maven Dependency:
  2. [plain]  
  3. <dependencies>  
  4.         <!-- jetty -->  
  5.         <dependency>  
  6.             <groupId>org.eclipse.jetty</groupId>  
  7.             <artifactId>jetty-server</artifactId>  
  8.             <version>${jetty.version}</version>  
  9.         </dependency>  
  10.         <dependency>  
  11.             <groupId>org.eclipse.jetty</groupId>  
  12.             <artifactId>jetty-servlet</artifactId>  
  13.             <version>${jetty.version}</version>  
  14.         </dependency>  
  15.         <!-- spring -->  
  16.         <dependency>  
  17.             <groupId>org.springframework</groupId>  
  18.             <artifactId>spring-webmvc</artifactId>  
  19.             <version>${spring.version}</version>  
  20.         </dependency>  
  21.         <!-- log4j -->  
  22.         <dependency>  
  23.             <groupId>log4j</groupId>  
  24.             <artifactId>log4j</artifactId>  
  25.             <version>1.2.17</version>  
  26.         </dependency>  
  27.         <!-- utils -->  
  28.         <dependency>  
  29.             <groupId>org.apache.commons</groupId>  
  30.             <artifactId>commons-io</artifactId>  
  31.             <version>1.3.2</version>  
  32.         </dependency>  
  33.     </dependencies>  

  34. 设置servlet-context.xml:
  35. [html]  
  36. <?xml version="1.0" encoding="UTF-8"?>  
  37. <beans:beans xmlns="http://www.springframework.org/schema/mvc"  
  38.              xmlns:beans="http://www.springframework.org/schema/beans"  
  39.              xmlns:context="http://www.springframework.org/schema/context"  
  40.              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  41.              xsi:schemaLocation="  
  42. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
  43. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  44. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  45.   
  46.     <interceptors>  
  47.         <interceptor>  
  48.             <mapping path="/*"/>  
  49.             <beans:bean class="weblog.examples.jettysetup.LoggingInterceptor"/>  
  50.         </interceptor>  
  51.     </interceptors>  
  52.   
  53.     <context:annotation-config/>  
  54.   
  55.     <context:component-scan base-package="weblog.examples.jettysetup.serlvet"/>  
  56. </beans:beans>  
  57. 一个简单的Main Class:
  58. [java]  
  59. public static void main(String[] args) throws Exception {  
  60.         try {  
  61.             DOMConfigurator.configure(Thread.currentThread().getContextClassLoader().getResource("log4j.xml"));  
  62.   
  63.             Server server = new Server();  
  64.   
  65.             SelectChannelConnector connector = new SelectChannelConnector();  
  66.             connector.setPort(7411);  
  67.             server.setConnectors(new Connector[] {connector});  
  68.   
  69.             DispatcherServlet servlet = new DispatcherServlet();  
  70.             servlet.setContextConfigLocation("classpath:servlet-context.xml");  
  71.   
  72.             ServletContextHandler context = new ServletContextHandler();  
  73.             context.setContextPath("/");  
  74.             context.addServlet(new ServletHolder("baseServlet", servlet), "/");  
  75.   
  76.             HandlerCollection handlers = new HandlerCollection();  
  77.             handlers.setHandlers(new Handler[] { context, new DefaultHandler()});  
  78.             server.setHandler(handlers);  
  79.   
  80.             XmlWebApplicationContext wctx = new XmlWebApplicationContext();  
  81.             wctx.setConfigLocation("");  
  82.             wctx.setServletContext(servlet.getServletContext());  
  83.             wctx.refresh();  
  84.   
  85.             context.setAttribute(XmlWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wctx);  
  86.             server.start();  
  87.   
  88.             log.info("Jetty embedded server started");  
  89.   
  90.             log.info("Press any key to stop");  
  91.             System.in.read();  
  92.             log.info("Stopping Server");  
  93.             server.stop();  
  94.             log.info("Server stopped");  
  95.   
  96.         } catch (Exception ex) {  
  97.             log.error("Failed to run Jetty Server", ex);  
  98.             throw ex;  
  99.         }  
  100.     }  
  101. 在JettyLauncher运行后,我们可以访问http://localhost:7411/ping来查看Jetty是否成功运行. http://localhost:7411/ping将运行以下Spring MVC Servlet:


  102. [java]  
  103. @Controller  
  104. public class TestServlet {  
  105.   
  106.     private static Logger log = Logger.getLogger(TestServlet.class);  
  107.   
  108.     @RequestMapping(value="/ping", method = RequestMethod.GET)  
  109.     public void ping(HttpServletResponse response) throws IOException {  
  110.         log.info("ping page is called");  
  111.         IOUtils.write("Embedded Jetty Server is Up and Running", response.getOutputStream());  
  112.     }  
  113. }  
复制代码
通过Jetty,我们可以很容易的在本地运行和调试Servlet,而生成好的Servlet我们可以直接发布到Tomcat. 这样,我们可以简化Servlet的开发和调试.

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马