zoukankan      html  css  js  c++  java
  • 通过Jetty搭建一个简单的Servlet运行环境

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

    整个环境的代码可以在https://github.com/mcai4gl2/jettysetup找到. 代码包括了IntelliJ的项目文件,如果需要eclipse项目文件,请在下载代码后运行 mvn eclipse:eclipse 来生成eclipse项目文件. (当然, 请在本地安装Maven).

    • 设置Maven Dependency:
      <dependencies>
              <!-- jetty -->
              <dependency>
                  <groupId>org.eclipse.jetty</groupId>
                  <artifactId>jetty-server</artifactId>
                  <version>${jetty.version}</version>
              </dependency>
              <dependency>
                  <groupId>org.eclipse.jetty</groupId>
                  <artifactId>jetty-servlet</artifactId>
                  <version>${jetty.version}</version>
              </dependency>
              <!-- spring -->
              <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-webmvc</artifactId>
                  <version>${spring.version}</version>
              </dependency>
              <!-- log4j -->
              <dependency>
                  <groupId>log4j</groupId>
                  <artifactId>log4j</artifactId>
                  <version>1.2.17</version>
              </dependency>
              <!-- utils -->
              <dependency>
                  <groupId>org.apache.commons</groupId>
                  <artifactId>commons-io</artifactId>
                  <version>1.3.2</version>
              </dependency>
          </dependencies>

    • 设置servlet-context.xml:
      <?xml version="1.0" encoding="UTF-8"?>
      <beans:beans xmlns="http://www.springframework.org/schema/mvc"
                   xmlns:beans="http://www.springframework.org/schema/beans"
                   xmlns:context="http://www.springframework.org/schema/context"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="
      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
      
          <interceptors>
              <interceptor>
                  <mapping path="/*"/>
                  <beans:bean class="weblog.examples.jettysetup.LoggingInterceptor"/>
              </interceptor>
          </interceptors>
      
          <context:annotation-config/>
      
          <context:component-scan base-package="weblog.examples.jettysetup.serlvet"/>
      </beans:beans>
    • 一个简单的Main Class:
      public static void main(String[] args) throws Exception {
              try {
                  DOMConfigurator.configure(Thread.currentThread().getContextClassLoader().getResource("log4j.xml"));
      
                  Server server = new Server();
      
                  SelectChannelConnector connector = new SelectChannelConnector();
                  connector.setPort(7411);
                  server.setConnectors(new Connector[] {connector});
      
                  DispatcherServlet servlet = new DispatcherServlet();
                  servlet.setContextConfigLocation("classpath:servlet-context.xml");
      
                  ServletContextHandler context = new ServletContextHandler();
                  context.setContextPath("/");
                  context.addServlet(new ServletHolder("baseServlet", servlet), "/");
      
                  HandlerCollection handlers = new HandlerCollection();
                  handlers.setHandlers(new Handler[] { context, new DefaultHandler()});
                  server.setHandler(handlers);
      
                  XmlWebApplicationContext wctx = new XmlWebApplicationContext();
                  wctx.setConfigLocation("");
                  wctx.setServletContext(servlet.getServletContext());
                  wctx.refresh();
      
                  context.setAttribute(XmlWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wctx);
                  server.start();
      
                  log.info("Jetty embedded server started");
      
                  log.info("Press any key to stop");
                  System.in.read();
                  log.info("Stopping Server");
                  server.stop();
                  log.info("Server stopped");
      
              } catch (Exception ex) {
                  log.error("Failed to run Jetty Server", ex);
                  throw ex;
              }
          }

    在JettyLauncher运行后,我们可以访问http://localhost:7411/ping来查看Jetty是否成功运行. http://localhost:7411/ping将运行以下Spring MVC Servlet:

    @Controller
    public class TestServlet {
    
        private static Logger log = Logger.getLogger(TestServlet.class);
    
        @RequestMapping(value="/ping", method = RequestMethod.GET)
        public void ping(HttpServletResponse response) throws IOException {
            log.info("ping page is called");
            IOUtils.write("Embedded Jetty Server is Up and Running", response.getOutputStream());
        }
    }
    

    通过Jetty,我们可以很容易的在本地运行和调试Servlet,而生成好的Servlet我们可以直接发布到Tomcat. 这样,我们可以简化Servlet的开发和调试.

  • 相关阅读:
    狐狸和兔子
    Arguments to main
    strncpy
    atoi
    sscanf
    集体的智慧:为什么SaaS打败企业软件?
    终于来热风了,又一次感觉到什么叫温暖!
    博士生的毕设
    淡淡的
    endnote如何修改输出格式?
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3333686.html
Copyright © 2011-2022 走看看