在Web伺服器搭建自己的Jetty伺服器,並開啟埠進行訪問
在專案中,往往要手動設定一個Jetty伺服器進行各種引數處理,比如之前在遊戲公司,用的就是遊戲服內部搭建Jetty伺服器,然後方便外部訪問.
主要用到這幾塊.
本身就是Web應用了,還用Jetty幹嘛,當然,我這只是做個示例,以後做app或者平臺級應用都可以用Jetty搭建外部訪問Servlet.
首先,我們設定WebServer,並且設定在監聽器裡,使得WEB伺服器啟動的時候可以載入Jetty伺服器,
這裡是WebServer程式碼:
設定引數,啟動,初始化,這些內容.package com.dc.web; /** * Date: 2014-2-17 * * Copyright (C) 2013-2015 7Road. All rights reserved. */ import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.Servlet; import org.dom4j.DocumentException; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.ResourceHandler; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.road.pitaya.web.WebHandleAnnotation; import com.road.util.ClassUtil; /** * * @author Tower */ public class WebServer { private static final Logger LOGGER = LoggerFactory .getLogger(WebServer.class); /** * jetty自帶的server */ private Server server; /** * 觸發的處理器 */ private ServletContextHandler context; /** * 處理器列表 */ private HandlerList handlerList = new HandlerList(); /** * 觸發的資源處理器 */ private ResourceHandler resourceHandler; /** * 單例載入器 */ private static class LazyHolder { private static final WebServer INSTANCE = new WebServer(); } /** * 獲取例項 * * @return */ public static WebServer getInstance() { return LazyHolder.INSTANCE; } public boolean start() { LOGGER.info("WebServer is starting..."); server = new Server(7039); try { context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); context.setResourceBase(""); resourceHandler = new ResourceHandler(); resourceHandler.setResourceBase("/webResource/"); handlerList.addHandler(context); handlerList.addHandler(resourceHandler); server.setHandler(handlerList); loadServletByWebServerConfig(); server.start(); } catch (DocumentException e) { LOGGER.error("load Xml Failed"); e.printStackTrace(); return false; } catch (Exception e) { e.printStackTrace(); return false; } LOGGER.info("WebServer has started successfully"); return true; } /** * 載入Servlet的不同介面 * * @return */ public Map<String, Class<?>> resetMapHandle() { Map<String, Class<?>> HandleMap = new HashMap<String, Class<?>>(); // 從相應的包載入Servlet的不同介面 List<Class<?>> activityClass = ClassUtil .getClasses("com.dc.servlet"); for (Class<?> class1 : activityClass) { WebHandleAnnotation annotation = class1 .getAnnotation(WebHandleAnnotation.class); if (annotation != null) { HandleMap.put(annotation.cmdName(), class1); } } return HandleMap; } /** * 使用WebServerConfig載入Servlet類 * * @return * @throws DocumentException */ private boolean loadServletByWebServerConfig() { Map<String, Class<?>> HandleMap = resetMapHandle(); for (Map.Entry<String, Class<?>> one : HandleMap.entrySet()) { try { String path = one.getKey(); Servlet servlet = (Servlet) one.getValue().newInstance(); context.addServlet(new ServletHolder(servlet), path); } catch (InstantiationException e) { e.printStackTrace(); continue; } catch (IllegalAccessException e) { e.printStackTrace(); continue; } } return true; } public boolean close() { LOGGER.info("WebServer is closing..."); try { server.stop(); } catch (Exception e) { e.printStackTrace(); } LOGGER.info("WebServer has closed successfully"); return true; } }
package com.dc.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gson.Gson; import com.road.entity.info.UserInfo; import com.road.pitaya.component.LanguageComponent; import com.road.pitaya.database.DataOption; /** * 中控介面繼承用 * * @author Tower */ public abstract class AbstractServlet extends HttpServlet { private static final long serialVersionUID = 2421477169746085074L; @SuppressWarnings("unused") private Logger LOGGER = LoggerFactory.getLogger(AbstractServlet.class); /** * 用於處理實體類的Gson例項 */ protected final Gson gson = new Gson(); /** 請求客戶端的IP */ protected String requestIP = null; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String result = null; try { requestIP = com.dc.util.ServletUtil.getRequestIP(request); result = execute(request, response); } catch (Exception e) { e.printStackTrace(); } response.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); PrintWriter out = response.getWriter(); out.print(result); out.flush(); out.close(); } public abstract String execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; /** * 建立一個新的賬號 * @return */ protected UserInfo newUserInfo(String site, String iuid, String pssd, Date createTime) { UserInfo userInfo = new UserInfo(); userInfo.setOp(DataOption.INSERT); userInfo.setSite(site);//所屬平臺 userInfo.setIuid(iuid);//賬號 userInfo.setPssd(pssd);//密碼 userInfo.setCreateTime(createTime);//建立時間 userInfo.setServerId(0);// 賬號所在服編號(這裡暫不分服) return userInfo; } protected String formatTime(long millis) { int m = (int)(millis/1000); int ss = m%60; int mm = m/60%60; int hh = m/3600%24; int dd = m/86400; String time = ""; if(dd > 0) time = LanguageComponent.getResource("Login.ServerStatusdd", dd, hh, mm, ss); else if(hh > 0) time = LanguageComponent.getResource("Login.ServerStatushh", hh, mm, ss); else if(mm > 0) time = LanguageComponent.getResource("Login.ServerStatusmm", mm, ss); else if(ss > 0) time = LanguageComponent.getResource("Login.ServerStatusss", ss); return time; } }
中控介面繼承用
然後就是我們測試的Servlet
package com.dc.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.road.pitaya.web.WebHandleAnnotation; /** * 測試介面 * @author Tower * */ @WebHandleAnnotation(cmdName = "/doSomething", description = "測試介面.") public class DoSomethingServlet extends AbstractServlet{ /** * */ private static final long serialVersionUID = -7574673387670968292L; @Override public String execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(111111111); return null; } }
對於webResources可以看到有個配置檔案:
名字叫:crossdomain.xml
從名字可以看出來,這個是跨域策略,方便跨域訪問.
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
內容就這些,只是作為實現. 準備就做完了,我們啟動tomcat,
Jetty正常啟動.
我們之前設定的埠是7039
我們在doSomething設定一個斷點,然後我們訪問localhost:7039/doSomething 可以看到,斷點進去,
控制檯輸出,於是,我們一個簡單的Jetty伺服器就搭建完成了,以後可以根據這個Jetty伺服器進行其他各項操作.
相關推薦
在Web伺服器搭建自己的Jetty伺服器,並開啟埠進行訪問
在專案中,往往要手動設定一個Jetty伺服器進行各種引數處理,比如之前在遊戲公司,用的就是遊戲服內部搭建Jetty伺服器,然後方便外部訪問. 主要用到這幾塊. 本身就是Web應用了,還用Jetty幹嘛,當然,我這只是做個示例,以後做app或者平臺級應用都可以用Jetty搭
使用阿里雲搭建自己的伺服器,並部署IIS為自己的app提供服務
之前幫實驗室搭過一個阿里雲,最近看到阿里雲有學生優惠,就自己買了個伺服器,搭了個同樣的伺服器供自己折騰,主要做測試服。下面記錄下搭建過程中遇到的問題。 買伺服器什麼就不說了,去阿里雲註冊個帳號,然後像淘寶一樣購物就好了。 買完之後可以拿到自己伺服器的公網IP
利用GitHub來搭建自己的伺服器!
1、建立一個GitHub賬號 2、把你的專案提交至GitHub 3、在網頁上的GitHub開啟你的專案 4 、 點選master 然後在輸入框裡面建立一個gh-page 5、點開設定按鈕,然後往下滑動,你將看到一個GitHub pages的地方 點選none,由no
雲伺服器搭建自己的Git伺服器
系統:Windows ,JDK1.7,gitblit1.8.0(類似軟體gitlab這個好像功能更多,svn) 第一步:Java JDK安裝與配置。(具體參考這裡的jdk安裝配置https://www.cnblogs.com/ucos/p/3924720.html) 第二步:下載Gitbli
如何搭建自己CDN伺服器
6、檔名:檔名相對網站根目錄,以/開頭,如要刪除網站根目錄下的mydir/file檔案, 用/mydir/file便可(我們建議將檔名用urlencode進行編碼)。如果是“檔案+記憶體”模式,文件名為/lum_high_cache
阿里雲伺服器搭建自己的個人網站之撥開迷霧
阿里雲最近推出了一個學生計劃,每個學生可以買一個9.9元(月供)的雲伺服器,看了覺得很實惠,就自己倒弄倒弄玩玩。 該教程分兩條主線: 第一條,利用hexo搭建自己的靜態部落格 第
教你如何在Mac上搭建自己的伺服器——Nginx
WHAT 本篇主要是基於Nginx在Mac上搭建自己的伺服器。 我相信很多朋友肯定是第一次聽到Nginx,關於它具有怎樣的傳奇,這兒肯定說不完也說不透. 有興趣的朋友可以自行google或者baidu. WHY 為什麼要搭建自己的伺服器呢。 好處肯定多多,這兒說
【新手建站三部曲之一】——一塊錢搭建自己的伺服器(LAMP)
本地:Windows7 雲主機:CentOS6.7 參考百度第一條教程 購買騰訊雲主機 最便宜的雲主機一年也要近千元,所以這裡的一元錢雲主機是有前提的,前提是什麼呢?前提就是你還是個寶寶,劃掉,還是個學生。。。 活動地址:http
在Mac上搭建自己的伺服器——Nginx
WHAT 本篇主要是基於Nginx在Mac上搭建自己的伺服器。 我相信很多朋友肯定是第一次聽到Nginx,關於它具有怎樣的傳奇,這兒肯定說不完也說不透. 有興趣的朋友可以自行google或者baidu. WHY 為什麼要搭建自己的伺服器呢。 好處肯定多多,這兒說一條—
GPRS/GPS模組組學習——伺服器搭建之雲伺服器 ECS
在學習GPRS中,我們需要連線上一個公網IP,如果你的網路不是公網就需要進行一定的技術進行對映。如花生殼之類的。 下面我們對不是公網的情況,進行租借伺服器,進行配置等操作進行學習。 簡單瞭解一下公網IP:所謂的公網相當於一個詳細的地址,不會更變。公網的計算機和Internet上的其他計算機可
Android 從網頁中跳轉到APP,從微信開啟自己的app並開啟指定頁面
先說實現步驟再說原理: 使用步驟 一,首先要給你要開啟的應用中的activity設定過濾器(在清單檔案裡設定)以JumpActivity為例如下面的: <intent-filter> 中就是所需過濾器 <activity android:name=".
阿里雲伺服器搭建FTP圖片伺服器[圖文詳解]
FastDFS是用c語言編寫的一款開源的分散式檔案系統。FastDFS為網際網路量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用FastDFS很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、下載等服務。 Tracker
使用webpack構建本地伺服器,實現自動重新整理,並直接在手機上訪問
前提 使用webpack構建前端開發環境,可以直接使用webpack構建本地服務,實現頁面儲存自動重新整理。 模組安裝 首先安裝webpack-dev-server模組 npm inst
ubuntu 14.04 server 依賴教育映象伺服器搭建本地映象伺服器
準備一臺ubuntu14.04 server ip:192.168.x.x 1: $ sudo apt-get update 2: $ sudo apt-get install apt-mirror apache2 3: $ sudo cp /etc/apt/mi
騰訊雲Linux伺服器搭建(四) Git伺服器搭建(通過https驗證)
先安裝git: 下載 #wget https://github.com/git/git/archive/v2.9.2.tar.gz 解壓 # tar zxvf v2.9.2.tar.gz # cd git-2.9.2 編譯安裝 # make configure # ./co
IDEA 伺服器搭建 IDEA授權伺服器
本文對原作者文章進行更詳細講解 1.下載軟體:磁力連結: magnet:?xt=urn:btih:2289E4F8CEB346AC44E54C8C0DA706CC537301AA 複製磁力連結地址 magnet:?xt=urn:btih:
阿裏雲 CentOS7安裝redis4.0.9並開啟遠程訪問
文件 serve 前端 prefix onf round 內部 style edi 1 安裝redis編譯的c環境 yum install gcc-c++ redis是c語言開發的,安裝redis需要先將官網下載的源碼進行編譯,編譯依賴gcc環境。 如果沒有g
Ubuntu 開啟 root 使用者並開啟 ssh 遠端訪問許可權
本文主要記錄了Ubuntu下開啟 root 使用者以及 ssh 遠端訪問許可權的方法 適用於: Trusty Tahr (Ubuntu 14.04) Xenial Xerus (Ubuntu 16.04) 其他Ubuntu發行版配置方法基本相
CentOS 7 上安裝 Redis3.2.3 並開啟外網訪問(親測好用,轉)
前一段時間寫過一篇codis叢集的文章,寫那篇文章主要是因為當時的專案不支援Redis自身叢集的功能。 而現在最新的專案是需要redis叢集的,這篇文章我們就來介紹下有關redis的安裝與配置。 一、redis原始碼安裝 截至到2016.8.11,redis最新穩定版本為3.2.3.本篇文章我們就以此
【WEB】vue搭建自己的部落格網站並部署到伺服器
技術框架和基本庫: 1.前端:vue-cli腳手架,vue-router管理路由,axios前後端互動。 2.伺服器端:使用node語言開發,express作為開發框架,提供api藉口給前端ajax呼叫。路由和render交給vue解決。同時以RESTful