Jetty入門
這是一個JavaProject
首先是待納入Jetty管理的LoginServlet.java
package com.jadyer.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 2827360195836107171L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("收到請求參數[" + request.getParameter("username") + "]"); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.print("<h2>這是我的嵌入式Jetty測試結果</h2>"); out.flush(); out.close(); } }
下面這個也是待納入Jetty管理的UserServlet.java
package com.jadyer.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class UserServlet extends HttpServlet { private static final long serialVersionUID = 2827360195836107171L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("收到請求參數[" + request.getParameter("username") + "]"); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.print("<h2>這是我的嵌入式Jetty測試結果-->用戶訪問Servlet成功</h2>"); out.flush(); out.close(); } }
最后是自己編寫的Jetty啟動類MyServer.java(內含Jetty嵌入式的簡單用法)
package com.jadyer.jetty; import java.util.HashMap; import java.util.Map; import javax.servlet.Servlet; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.webapp.WebAppContext; import com.jadyer.servlet.LoginServlet; import com.jadyer.servlet.UserServlet; /** * @see -------------------------------------------------------------------------------------------------------------- * @see Jetty簡介 * @see Jetty是一個嵌入式的Web服務器 * @see Jetty官網:http://www.eclipse.org/jetty/ * @see Jetty下載:http://download.eclipse.org/jetty/ * @see -------------------------------------------------------------------------------------------------------------- * @see Jetty與Tomcat比較(取自網絡) * @see Jetty的架構要比Tomcat簡單一些,它是基于Handler來實現的,它可以通過Handler來進行擴展 * @see Tomcat的架構是基于容器設計的,擴展Tomcat時需要了解Tomcat的整體設計結果,故不易擴展 * @see -------------------------------------------------------------------------------------------------------------- * @see Jetty使用 * @see 0)版本選擇:由于Jetty9需要JDK7的支持,所以我們這里使用jetty-distribution-8.1.10.v20130312.zip * @see 1)修改端口:修改\\JETTY_HOME\\etc\\jetty.xml第40行default="8080"即可 * @see 2)非嵌入式的項目發布(有兩種方式) * @see 非嵌入式的啟動方式為命令行下執行該命令-->D:\Develop\jetty-distribution-8.1.10.v20130312>java -jar start.jar * @see 第一種:項目打成war包放到\\JETTY_HOME\\webapps\\下即可,訪問地址為http://127.0.0.1:8080/warName(war名字大小寫嚴格相同) * @see 第二種:類似于Tomcat的<Context path="" docBase="">的方式,即在\\JETTY_HOME\\contexts\\目錄下新增一個名字隨意的xml文件 * @see 文件格式與該目錄下的javadoc.xml相同,其中主要修改以下兩處 * @see <Set name="contextPath">/testBbb</Set> * @see <Set name="resourceBase">F:/Tool/Code/JavaSE/loginManager/WebRoot</Set> * @see 3)嵌入式的項目發布 * @see 也就是把Jetty提供的jar加入到項目中(可以是Java項目或Web項目),然后編寫通過一個main()啟動Jetty,所用到的jar如下 * @see JETTY_HOME中的lib目錄,和lib下的jsp目錄,這倆目錄中的jar加入到項目中即可(若不涉及jsp頁面,就不需要jsp目錄下的jar了) * @see 具體寫法詳見這里的startForServlet()和startForWebApp()方法 * @see -------------------------------------------------------------------------------------------------------------- * @create Jul 5, 2013 12:54:24 PM * @author 玄玉<http://blog.csdn.net/jadyer> */ public class MyServer { public static void main(String[] args) { Map<Class<? extends Servlet>, String> servletMap = new HashMap<Class<? extends Servlet>, String>(); servletMap.put(UserServlet.class, "/user"); servletMap.put(LoginServlet.class, "/login"); startForServlet(8089, "/testJettyDemo", servletMap); startForWebApp(8089, "/gbook", "F:/Tool/Code/JavaSE/guestbook/WebRoot"); } /** * 針對Servlet * @see 通過servletMap參數可以使得該方法直接同時發布多個Servlet * @param port 訪問服務器的端口 * @param contextPath 訪問服務器的地址 * @param servletMap 發布的Servlet(這是一個Map,鍵為Servlet的class對象,值為映射url-pattern) */ private static void startForServlet(int port, String contextPath, Map<Class<? extends Servlet>, String> servletMap){ //綁定端口 Server server = new Server(port); //可以使用ServletContextHandler處理Servlet ServletContextHandler context = new ServletContextHandler(); //添加Servlet并指定映射url-pattern for(Map.Entry<Class<? extends Servlet>, String> servletEntry : servletMap.entrySet()){ context.addServlet(servletEntry.getKey(), servletEntry.getValue()); } //此時訪問路徑就是http://127.0.0.1:port/contextPath/urlPattern context.setContextPath(contextPath); //綁定Handler server.setHandler(context); //啟動服務 try { server.start(); } catch (Exception e) { System.out.println("啟動Jetty時發生異常,堆棧軌跡如下"); e.printStackTrace(); } if(server.isStarted()){ System.out.println("Servlet服務啟動成功"); } } /** * 針對一個Web應用 * @see 注意resourceBase參數指向的應用所依賴的jar必須全部存放在其WebRoot\WEB-INF\lib目錄中 * @see 否則應用啟動后,訪問時會由于在lib中找不到jar而報告java.lang.ClassNotFoundException * @param port 訪問服務器的端口 * @param contextPath 訪問服務器的地址 * @param resourceBase Web應用的目錄(需指向到WebRoot目錄下) */ private static void startForWebApp(int port, String contextPath, String resourceBase){ Server server = new Server(port); //使用WebAppContext時就必須設置resourceBase WebAppContext context = new WebAppContext(); //此時訪問路徑就是http://127.0.0.1:port/contextPath context.setContextPath(contextPath); context.setResourceBase(resourceBase); server.setHandler(context); try { server.start(); } catch (Exception e) { System.out.println("啟動Jetty時發生異常,堆棧軌跡如下"); e.printStackTrace(); } if(server.isStarted()){ System.out.println("Web服務啟動成功"); } } }
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!