Java之入門篇——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服務啓動成功");
		}
	}
}

image

最新2020整理收集的一些高頻面試題(都整理成文檔),有很多幹貨,包含mysql,netty,spring,線程,spring cloud、jvm、源碼、算法等詳細講解,也有詳細的學習規劃圖,面試題整理等,需要獲取這些內容的朋友請加Q君樣:756584822

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章