zoukankan      html  css  js  c++  java
  • Jetty入门

    这是一个JavaProject


    首先是待纳入Jetty管理的LoginServlet.java

    1. package com.jadyer.servlet;  
    2.   
    3. import java.io.IOException;  
    4. import java.io.PrintWriter;  
    5.   
    6. import javax.servlet.ServletException;  
    7. import javax.servlet.http.HttpServlet;  
    8. import javax.servlet.http.HttpServletRequest;  
    9. import javax.servlet.http.HttpServletResponse;  
    10.   
    11. public class LoginServlet extends HttpServlet {  
    12.     private static final long serialVersionUID = 2827360195836107171L;  
    13.   
    14.     @Override  
    15.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    16.         System.out.println("收到请求参数[" + request.getParameter("username") + "]");  
    17.         response.setContentType("text/html; charset=UTF-8");  
    18.         PrintWriter out = response.getWriter();  
    19.         out.print("<h2>这是我的嵌入式Jetty测试结果</h2>");  
    20.         out.flush();  
    21.         out.close();  
    22.     }  
    23. }  
    下面这个也是待纳入Jetty管理的UserServlet.java

    1. package com.jadyer.servlet;  
    2.   
    3. import java.io.IOException;  
    4. import java.io.PrintWriter;  
    5.   
    6. import javax.servlet.ServletException;  
    7. import javax.servlet.http.HttpServlet;  
    8. import javax.servlet.http.HttpServletRequest;  
    9. import javax.servlet.http.HttpServletResponse;  
    10.   
    11. public class UserServlet extends HttpServlet {  
    12.     private static final long serialVersionUID = 2827360195836107171L;  
    13.   
    14.     @Override  
    15.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    16.         System.out.println("收到请求参数[" + request.getParameter("username") + "]");  
    17.         response.setContentType("text/html; charset=UTF-8");  
    18.         PrintWriter out = response.getWriter();  
    19.         out.print("<h2>这是我的嵌入式Jetty测试结果-->用户访问Servlet成功</h2>");  
    20.         out.flush();  
    21.         out.close();  
    22.     }  
    23. }  
    最后是自己编写的Jetty启动类MyServer.java(内含Jetty嵌入式的简单用法)

    1. package com.jadyer.jetty;  
    2.   
    3. import java.util.HashMap;  
    4. import java.util.Map;  
    5.   
    6. import javax.servlet.Servlet;  
    7.   
    8. import org.eclipse.jetty.server.Server;  
    9. import org.eclipse.jetty.servlet.ServletContextHandler;  
    10. import org.eclipse.jetty.webapp.WebAppContext;  
    11.   
    12. import com.jadyer.servlet.LoginServlet;  
    13. import com.jadyer.servlet.UserServlet;  
    14.   
    15. /** 
    16.  * @see -------------------------------------------------------------------------------------------------------------- 
    17.  * @see Jetty简介 
    18.  * @see Jetty是一个嵌入式的Web服务器 
    19.  * @see Jetty官网:http://www.eclipse.org/jetty/ 
    20.  * @see Jetty下载:http://download.eclipse.org/jetty/ 
    21.  * @see -------------------------------------------------------------------------------------------------------------- 
    22.  * @see Jetty与Tomcat比较(取自网络) 
    23.  * @see Jetty的架构要比Tomcat简单一些,它是基于Handler来实现的,它可以通过Handler来进行扩展 
    24.  * @see Tomcat的架构是基于容器设计的,扩展Tomcat时需要了解Tomcat的整体设计结果,故不易扩展 
    25.  * @see -------------------------------------------------------------------------------------------------------------- 
    26.  * @see Jetty使用 
    27.  * @see 0)版本选择:由于Jetty9需要JDK7的支持,所以我们这里使用jetty-distribution-8.1.10.v20130312.zip 
    28.  * @see 1)修改端口:修改\JETTY_HOME\etc\jetty.xml第40行default="8080"即可 
    29.  * @see 2)非嵌入式的项目发布(有两种方式) 
    30.  * @see   非嵌入式的启动方式为命令行下执行该命令-->D:Developjetty-distribution-8.1.10.v20130312>java -jar start.jar 
    31.  * @see   第一种:项目打成war包放到\JETTY_HOME\webapps\下即可,访问地址为http://127.0.0.1:8080/warName(war名字大小写严格相同) 
    32.  * @see   第二种:类似于Tomcat的<Context path="" docBase="">的方式,即在\JETTY_HOME\contexts\目录下新增一个名字随意的xml文件 
    33.  * @see         文件格式与该目录下的javadoc.xml相同,其中主要修改以下两处 
    34.  * @see         <Set name="contextPath">/testBbb</Set> 
    35.  * @see         <Set name="resourceBase">F:/Tool/Code/JavaSE/loginManager/WebRoot</Set> 
    36.  * @see 3)嵌入式的项目发布 
    37.  * @see   也就是把Jetty提供的jar加入到项目中(可以是Java项目或Web项目),然后编写通过一个main()启动Jetty,所用到的jar如下 
    38.  * @see   JETTY_HOME中的lib目录,和lib下的jsp目录,这俩目录中的jar加入到项目中即可(若不涉及jsp页面,就不需要jsp目录下的jar了) 
    39.  * @see   具体写法详见这里的startForServlet()和startForWebApp()方法 
    40.  * @see -------------------------------------------------------------------------------------------------------------- 
    41.  * @create Jul 5, 2013 12:54:24 PM 
    42.  * @author 玄玉<http://blog.csdn.net/jadyer> 
    43.  */  
    44. public class MyServer {  
    45.     public static void main(String[] args) {  
    46.         Map<Class<? extends Servlet>, String> servletMap = new HashMap<Class<? extends Servlet>, String>();  
    47.         servletMap.put(UserServlet.class"/user");  
    48.         servletMap.put(LoginServlet.class"/login");  
    49.         startForServlet(8089"/testJettyDemo", servletMap);  
    50.         startForWebApp(8089"/gbook""F:/Tool/Code/JavaSE/guestbook/WebRoot");  
    51.     }  
    52.       
    53.       
    54.     /** 
    55.      * 针对Servlet 
    56.      * @see 通过servletMap参数可以使得该方法直接同时发布多个Servlet 
    57.      * @param port        访问服务器的端口 
    58.      * @param contextPath 访问服务器的地址 
    59.      * @param servletMap  发布的Servlet(这是一个Map,键为Servlet的class对象,值为映射url-pattern) 
    60.      */  
    61.     private static void startForServlet(int port, String contextPath, Map<Class<? extends Servlet>, String> servletMap){  
    62.         //绑定端口  
    63.         Server server = new Server(port);  
    64.         //可以使用ServletContextHandler处理Servlet  
    65.         ServletContextHandler context = new ServletContextHandler();  
    66.         //添加Servlet并指定映射url-pattern  
    67.         for(Map.Entry<Class<? extends Servlet>, String> servletEntry : servletMap.entrySet()){  
    68.             context.addServlet(servletEntry.getKey(), servletEntry.getValue());  
    69.         }  
    70.         //此时访问路径就是http://127.0.0.1:port/contextPath/urlPattern  
    71.         context.setContextPath(contextPath);  
    72.         //绑定Handler  
    73.         server.setHandler(context);  
    74.         //启动服务  
    75.         try {  
    76.             server.start();  
    77.         } catch (Exception e) {  
    78.             System.out.println("启动Jetty时发生异常,堆栈轨迹如下");  
    79.             e.printStackTrace();  
    80.         }  
    81.         if(server.isStarted()){  
    82.             System.out.println("Servlet服务启动成功");  
    83.         }  
    84.     }  
    85.       
    86.       
    87.     /** 
    88.      * 针对一个Web应用 
    89.      * @see 注意resourceBase参数指向的应用所依赖的jar必须全部存放在其WebRootWEB-INFlib目录中 
    90.      * @see 否则应用启动后,访问时会由于在lib中找不到jar而报告java.lang.ClassNotFoundException 
    91.      * @param port         访问服务器的端口 
    92.      * @param contextPath  访问服务器的地址 
    93.      * @param resourceBase Web应用的目录(需指向到WebRoot目录下) 
    94.      */  
    95.     private static void startForWebApp(int port, String contextPath, String resourceBase){  
    96.         Server server = new Server(port);  
    97.         //使用WebAppContext时就必须设置resourceBase  
    98.         WebAppContext context = new WebAppContext();  
    99.         //此时访问路径就是http://127.0.0.1:port/contextPath  
    100.         context.setContextPath(contextPath);  
    101.         context.setResourceBase(resourceBase);  
    102.         server.setHandler(context);  
    103.         try {  
    104.             server.start();  
    105.         } catch (Exception e) {  
    106.             System.out.println("启动Jetty时发生异常,堆栈轨迹如下");  
    107.             e.printStackTrace();  
    108.         }  
    109.         if(server.isStarted()){  
    110.             System.out.println("Web服务启动成功");  
    111.         }  
    112.     }  
    113. }  
  • 相关阅读:
    大数据基本概念及Hadoop技术基础
    基于 ReliefF和K-means算法的应用
    利用Hadoop和Spark处理用户心跳周期数据
    Java线程池源码解析及高质量代码案例
    muleESB的第一个开发实例-HelloWorld(二)
    [USACO11JAN]道路和飞机Roads and Planes
    CH6101 最优贸易
    POJ3662 Telephone Lines
    扫描线+线段树例题(HDU1542)
    关于Dinic算法的几点讨论
  • 原文地址:https://www.cnblogs.com/daichangya/p/12959067.html
Copyright © 2011-2022 走看看