A. 使用 OpenResty Docker 鏡像快速搭建 Web 伺服器
在日常工作中經常需要搭建 Web 伺服器和反向代理伺服器,用於測試和生產的情況都有。雖然用於測試的場景有很多便捷的方法,但是在向生產環境遷移時會導致有些工作不能復用。綜合看起來,還是用 Nginx 最為方便。本文嘗試提供一些配置模板。
需要提前了解的內容:
選擇 OpenResty 的原因:
OpenResty 默認安裝位置:
安裝目錄中 Nginx 相關文件:
默認服務指向 Web 文件夾 :
映射關系:
默認 配置文件 位置(後續的配置會覆蓋這里的內容):
在絕大多數情況,覆蓋上面的配置文件就可以了。
但是,這些配置文件的內容,只能是包含在 http 段內的配置,並不能作為完整的配置文件使用。
比如:
可以包含: upstream 、 server
不能包含: tcp
完整配置文件位置:
配置文件相關信息:
https://github.com/openresty/docker-openresty/blob/master/README.md#nginx-config-files
鏡像默認配置為到 /etc/nginx/conf.d/ 讀取配置,所以要把配置文件放到這里。其餘的掛載或埠映射根據需要進行。
假設需要建立如下服務:
(1)通過 http://localhost:20000/shared1/ 訪問 /tmp/webroot/shared1
(2)通過 http://localhost:20000/shared2/ 訪問 /tmp/webroot/myshare
(3)通過 http://localhost:20000// 訪問 http://www..com
配置文件:
啟動命令行:
詳情參考: docker-openresty - Docker tooling for OpenResty - Nginx Config Files
模擬為應用提供多級反向代理,查看訪問鏈路。簡單分為三部分:
使用 Docker Compose 來配置並串聯各容器,文件較多,訪問 GitHub 查看。
(完)
B. 請求Servlet時,部署Servlet的容器要執行哪些步驟
Servlet的生命周期是由servlet的容器來控制的。
分為3個階段:初始化階段、運行階段、銷毀階段。
一、初始化階段:
a Servlet容器載入servlet類,把它的.Class文件中的數據讀到內存中。
b Servlet容器創建servletConfig對象。servletConfig對象包含了servlet的初始化配置信息。此外 servlet容器還會使得servletConfig對象與當前的web應用的servletContext對象關聯。
c Servlet容器創建servlet對象。
d Servlet容器調用servlet對象的init(ServletConfig config)方法。
(2)在web.xml文件中為servlet設置了<load-on-startup>元素
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>servlet.servlet1</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
說明:
在servlet的配置當中,<load-on-startup>5</load-on-startup>的含義是:
標記容器是否在啟動的時候就載入這個servlet。
當值為0或者大於0時,表示容器在應用啟動時就載入這個servlet;
當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才載入。
正數的值越小,啟動該servlet的優先順序越高。
(3) 當web應用被重新啟動時,web應用中的所有servlet會在特定的時間被重新初始化。
二、運行階段
在這個階段sevlet可以隨時響應客戶端的請求。當servlet容器接到訪問特定的servlet請求時,servlet容器會創建針對與這個請求的servletRequest和servletResponse對象,然後調用service()方法,並把這兩個對象當做參數傳遞給service()方法。Service()方法通過servletRequest對象獲得請求信息,並處理該請求,再通過servletResponse對象生成響應結果。
【不管是post還是get方法提交,都會在service中處理,然後,由service來交由相應的doPost或doGet方法處理,如果你重寫了service方法,就不會再處理doPost或doGet了,如果重寫sevice()方法,可以自己轉向doPost()或doGet()方法】
註:當servlet容器把servlet生成的響應結果發送給客戶後,servlet容器會銷毀servletRequest和sevletResponse對象。
三、銷毀階段
當Web應用被終止時,servlet容器會先調用web應用中所有的servlet對象的destroy()方法,然後在銷毀servlet對象。此外容器還會銷毀與servlet對象關聯的servletConfig對象。
在destroy()方法的實現中,可以釋放servlet所佔用的資源。如關閉文件輸入輸出流,關閉與資料庫的連接。
註:sevlet的生命周期中,servlet的初始化和銷毀只會發生一次,因此init()和destroy()方法只能被servlet容器調用一次,而service()方法取決與servlet被客戶端訪問的次數。
C. Docker部署WEB 應用
1、環境:阿里雲伺服器
2、CentOS7系統
3、Docker成功部署
這里前提docker 已經成功部署啦,現有有一個簡單的測試案例,在docker上部署一個應用從而訪問web。
接下來讓我們嘗試使用 docker 構建一個 web 應用程序。
我們將在docker容器中運行一個 Python Flask 應用來運行一個web應用。
通過 -p 參數來設置一樣的埠:
docker ps 查看正在運行的容器
容器內部的 5000 埠映射到我們本地主機的 5000 埠上。
這時我們可以通過瀏覽器訪問WEB應用
發現 訪問失敗
指定外網埠為5000,
1. 本地測試能否打開測試頁
本地沒有問題。
2. 瀏覽器中訪問
在任意一台電腦上輸入公網IP+埠號 (此埠號為運行WEB應用時指定的埠號5000) 如我的阿里雲公網IP為123.11.11.11 此時在任意一台有網路的瀏覽器地址欄輸入公網IP:http://123.11.11.11:5000 應該會出現測試頁
但現在出現如下圖所示:
顯示打不開
查啦大量資料,以前曾經也解決過,一定弄明白自已購買的地區後,再去設置安全組的配置規則。
***1. 登錄阿里雲管理控制台****
2.找到雲伺服器ECS-概覽
5. 手動添加埠5000
6. 最後保存,再從瀏覽器地址欄輸入公網IP加埠號5000成功顯示測試頁如圖:
D. java怎麼在伺服器上部署webservice
是你自己寫的一個web文件網頁服務嗎,weblogic上可以部署web服務的,安裝weblogic11g並且配置jdk1.6就可以了。
E. web容器 web伺服器 servlet/jsp容器 之間的區別和關系
Servlet是Java代碼為主,JSP是html為主。JSP是Servlet的化生。JSP最後會自動生成.java/.clsss文件。
Servlet擅長Java代碼,JSP擅長html。但是Servler也能輸出Html代碼,JSP也能書寫Java代碼。不過有點不方便。