Location:Home > Jetty使用攻略

Jetty使用攻略


jetty作为一款小型的web容器用处很大,因为其小巧强大,经常作为嵌入式的组件处理http交互。 Jetty 作为一个独立的 Servlet 引擎可以独立提供 Web 服务,但是它也可以与其他 Web 应用服务器集成,所以它可以提供基于两种协议工作,一个是 HTTP,一个是 AJP 协议,本文介绍jetty处理http请求的应用。 实际上 Jetty 的工作方式非常简单,当 Jetty 接受到一个请求时,Jetty 就把这个请求交给在 Server 中注册的代理 Handler 去执行,如何执行你注册的 Handler,同样由你去规定,Jetty 要做的就是调用你注册的第一个 Handler 的 handle 下面自己对jetty的使用。 动起来: 1.下载jetty: http://www.eclipse.org/jetty/documentation/current/quick-start-getting-started.html#jetty-downloading 2.在项目中引入包,如图:   3.写一个Servlet处理类。 public  class  LoginServlet  extends  HttpServlet {        public  void  doGet(HttpServletRequest  request ,              HttpServletResponse  response )  throws  IOException  {             String  username =  request .getParameter(  "username" );             String  password =  request .getParameter(  "password" );                             response .setContentType(  "text/html;charset=utf-8" );                           //返回html 页面                 response .getWriter().println(  "<html>" );                 response .getWriter().println(  "<head>" );                    response .getWriter().println(  "<title>登录信息</title>"  );                     response .getWriter().println(  "</head>" );                   response .getWriter().println(  "<body>" );                    response .getWriter().println(  "欢迎【"  +  username  +  "】用户登录成功!!!"  );                   response .getWriter().println(  "</body>" );                   response .getWriter().println(  "</html>" );                                      }                public  void  doPost(HttpServletRequest  request ,                    HttpServletResponse  response )  throws  IOException  {               //doGet(request,response);               response .sendRedirect(  "/web-inf/jsp/default.jsp" );        } } 4.设置jetty启动项 public  class  JettyServer {          public  static  void  main(String[]  args )  throws  Exception {             Server  server =  new  Server(8080);                          ServletContextHandler  context =  new  ServletContextHandler(ServletContextHandler. SESSIONS  );               context .setContextPath(  "/" );                            server .setHandler(  context );                            context .addServlet(  new  ServletHolder(  new  LoginServlet()), "/here" );                            server .start();               server .join();       }   } 5.启动并输入地址: http://localhost:8080/here 至此,jetty简单运行成功。   在springMVC中使用jetty 1.引入pom文件: < project  xmlns =  "http://maven.apache.org/POM/4.0.0"  xmlns:xsi =  "http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" >    <  modelVersion > 4.0.0 </ modelVersion  >    <  groupId >  com.lango.test </  groupId >    <  artifactId >  springMvcJetty </  artifactId >    <  packaging >  war </  packaging >    <  version >  0.0.1-SNAPSHOT </  version >    <  name >  springMvcJetty Maven Webapp </  name >    <  url >  http://maven.apache.org </  url >    <  dependencies >      < dependency  >        < groupId  > junit </ groupId >        < artifactId  > junit </ artifactId >        < version  > 3.8.1  </ version  >        < scope  > test  </ scope  >      </ dependency  >        < dependency  >                     < groupId  > org.eclipse.jetty  </ groupId  >                     < artifactId  > jetty-io </ artifactId  >                     < version  > 8.1.8.v20121106  </ version  >               </ dependency  >               < dependency  >                     < groupId  > org.eclipse.jetty  </ groupId  >                     < artifactId  > jetty-io </ artifactId  >                     < version  > 8.1.8.v20121106  </ version  >               </ dependency  >               < dependency  >                     < groupId  > org.eclipse.jetty  </ groupId  >                     < artifactId  > jetty-webapp </ artifactId  >                     < version  > 8.1.8.v20121106  </ version  >               </ dependency  >               < dependency  >                     < groupId  > org.eclipse.jetty  </ groupId  >                     < artifactId  > jetty-server </  artifactId >                     < version  > 8.1.8.v20121106  </ version  >               </ dependency  >               < dependency  >                     < groupId  > org.eclipse.jetty  </ groupId  >                     < artifactId  > jetty-servlet </ artifactId  >                     < version  > 8.1.8.v20121106  </ version  >               </ dependency  >               < dependency  >                     < groupId  > org.springframework  </ groupId  >                     < artifactId  > spring-context  </ artifactId  >                     < version  > 4.1.4.RELEASE  </ version  >               </ dependency  >               < dependency  >                     < groupId  > org.springframework  </ groupId  >                     < artifactId  > spring- jms </  artifactId >                     < version  > 4.1.6.RELEASE  </ version  >               </ dependency  >               < dependency  >                     < groupId  > org.springframework  </ groupId  >                     < artifactId  > spring-test  </ artifactId  >                     < version  > 4.1.4.RELEASE  </ version  >               </ dependency  >               < dependency  >                     < groupId  > org.springframework  </ groupId  >                     < artifactId  > spring-web  </ artifactId  >                     < version  > 4.1.4.RELEASE  </ version  >               </ dependency  >               < dependency  >                     < groupId  > org.springframework  </ groupId  >                     < artifactId  > spring- webmvc </  artifactId >                     < version  > 4.1.4.RELEASE  </ version  >               </ dependency  >               < dependency  >                     < groupId  > org.springframework  </ groupId  >                     < artifactId  > spring-context-support  </ artifactId  >                     < version  > 4.1.4.RELEASE  </ version  >               </ dependency  >    </  dependencies >    <  build >      < finalName  > springMvcJetty  </ finalName  >    </  build > </ project > 2.配置jetty服务器: public  class  jettyT {          public  static  void  main(String[]  args )  throws  Exception {              Server  server =  new  Server(8080);            ServletContextHandler  context =  new  ServletContextHandler(ServletContextHandler. SESSIONS  );            context .setContextPath(  "/" );                     //使用spring的Servlet处理              DispatcherServlet  servlet =  new  DispatcherServlet();           servlet .setContextConfigLocation(  "classpath*:springMvcJetty/spring-jetty.xml"  );           context .addServlet(  new  ServletHolder( servlet ),  "/" );                   HandlerList  handlers =  new  HandlerList();           handlers .addHandler(  context );           server .setHandler(  handlers );                      ThreadPool  pool  =  new  ExecutorThreadPool(                         Executors.  newCachedThreadPool());           server .setThreadPool(  pool );                 Connector  connector =  new  SelectChannelConnector();           connector .setPort(8080);  //此处要与前面设置的 jetty端口一致。           server .setConnectors(  new  Connector[]{  connector });                     server .start();            server .join();       } } 3.其中的spring-jetty.xml配置: <? xml  version = "1.0"  encoding =  "UTF-8" ?> < beans  xmlns =  "http://www.springframework.org/schema/beans"         xmlns:xsi =  "http://www.w3.org/2001/XMLSchema-instance"  xmlns:context = "http://www.springframework.org/schema/context"         xmlns:tx =  "http://www.springframework.org/schema/tx"  xmlns:mvc =  "http://www.springframework.org/schema/mvc"         xmlns:aop =  "http://www.springframework.org/schema/aop"  xmlns:p =  "http://www.springframework.org/schema/p"         xsi:schemaLocation =  "http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd             http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd             "  >               <!-- 注解扫描包 -->        < context:annotation-config  />               < context:component-scan  base-package  = "springMvc"               use-default-filters =  "false" >               < context:include-filter  type  = "annotation"  expression =  "org.springframework.stereotype.Controller"  />        </ context:component-scan  >               <!-- 开启注解 -->        < mvc:annotation-driven  >               </ mvc:annotation-driven  > </ beans > 4.写一个controller: @Controller @RequestMapping ( "/home"  ) public  class  Home {               @RequestMapping ( "/index" )        @ResponseBody        public  String Index(HttpServletRequest  request ){             String  name =  request .getParameter(  "name" );                            return  name +  "你好" ;       } } 在浏览器中访问http://localhost:8080/home/index,就可以了。   扩展: Jetty 有一个处理长连接的机制:一个被称为  Continuations 的特性。利用 Continuation 机制,Jetty 可以使得一个线程能够用来同时处理多个从客户端发送过来的异步请求。 Continuations 机制维护一个队列,当请求在suspend方法之后就加入队列,等到超时或者调用   resume方法时,在交由线程处理。这使得jetty特别适合处理聊天室之类的应用。 参考: http://www.eclipse.org/jetty/documentation/current/   https://www.ibm.com/developerworks/cn/web/wa-lo-jetty/
Related
Your Answer
(Ctrl+Enter To Post)   
    Newest
    Copyright © 2015-2017 163JAVA.COM All Rights Reserved.