1. 程式人生 > >JavaWeb之服務器基礎

JavaWeb之服務器基礎

創建服務 dynamic oracl 路徑 form local 查找 utf 服務

本章內容:

Web項目簡介

主流服務器介紹

Tomcat的安裝和配置

自定義Web服務器

什麽B/S和C/S結構?

B/S 瀏覽器/服務器

服務器一般是性能強大PC或工作站,安裝應用程序服務器軟件,如:Tomcat、JBoss,和DBMS如:MySQL、Oracle等。

瀏覽器去訪問服務器,不需要安裝客戶端軟件,如:網銀、淘寶。

優點:軟件安裝服務器端,省去客戶端更新、維護時間,目前管理系統一般是BS的。

缺點:服務器壓力比較大,瀏覽器不能呈現太復雜的特效。

JavaWEB項目都屬於BS結構程序。

C/S 客戶端/服務器

需要安裝客戶端軟件,如:QQ、微信、網遊。

優點:客戶端分擔大量工作,可以呈現復雜特效。

缺點:更新和維護比較麻煩。

主流Web服務器簡介

Web服務器是運行及發布Web應用的容器,只有將開發的Web項目放置到該容器中,才能使網絡中的所有用戶通過瀏覽器進行訪問。開發Java Web應用所采用的服務器主要是與JSP/Servlet兼容的Web服務器,比較常用的有Tomcat、Resin、JBoss、WebSphere 和 WebLogic 等

Tomcat 服務器

  目前最為流行的Tomcat服務器是Apache-Jarkarta開源項目中的一個子項目,是一個小型、輕量級的支持JSP和Servlet 技術的Web服務器,也是初學者學習開發JSP應用的首選。

Resin 服務器

  Resin是Caucho公司的產品,是一個非常流行的支持Servlet和JSP的服務器,速度非常快。Resin本身包含了一個支持HTML的Web服務器,這使它不僅可以顯示動態內容,而且顯示靜態內容的能力也毫不遜色,因此許多網站都是使用Resin服務器構建

JBoss服務器

  JBoss是一個種遵從JavaEE規範的、開放源代碼的、純Java的EJB服務器,對於J2EE有很好的支持。JBoss采用JML API實現軟件模塊的集成與管理,其核心服務又是提供EJB服務器,不包含Servlet和JSP的Web容器,不過它可以和Tomcat完美結合

WebSphere 服務器

  WebSphere是IBM公司的產品,可進一步細分為 WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server 是基於Java 的應用環境,可以運行於 Sun Solaris、Windows NT 等多種操作系統平臺,用於建立、部署和管理Internet和Intranet Web應用程序。

WebLogic 服務器

  WebLogic 是BEA公司的產品(現在已經被Oracle收購),可進一步細分為 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特別強大。WebLogic 支持企業級的、多層次的和完全分布式的Web應用,並且服務器的配置簡單、界面友好。對於那些正在尋求能夠提供Java平臺所擁有的一切應用服務器的用戶來說,WebLogic是一個十分理想的選擇

Tomcat的安裝和配置

0、安裝JDK

1、配置JAVA_HOME

JAVA_HOME的值為JDK安裝目錄

2、下載Tomcat

3、配置環境變量

系統變量添加:

CATALINA_HOME 值: Tomcat安裝路徑

在Path添加: ;%CATALINA_HOME %\bin;

4、測試,打開cmd,輸入startup

打開瀏覽器輸入:http://localhost:8080,出現類似下面的頁面

Tomcat目錄介紹

bin 命令執行文件

conf 配置文件目錄

server.xml 核心配置,如:端口、連接池

tomcat-user.xml 用戶配置

web.xml web請求配置

lib tomcat運行需要的jar包

logs 日誌目錄

webapps web項目部署目錄

work 存放項目中的java字節碼文件

Tomcat和Eclipse的配置

1、打開Server面板

Window > Show View > Other > Server > Servers

2、雙擊create new server

選擇服務器版本,下一步

設置Tomcat安裝目錄

3、雙擊創建的服務器,設置項目部署路徑

4、創建Web項目

new > dynamic web project

下一步到最後,勾中復選框,點擊完成

5、在WebContent新建HTML頁面,右鍵點擊run as server運行。

Web項目的目錄介紹:

src Java源代碼

build 字節碼目錄

WebContent 網頁內容(JSP、HTML、JS、CSS、圖片)

META-INF 元信息

WEB-INF

web.xml 項目重要組件配置文件

lib 項目需要的jar包(拷貝後會自動導入項目)

Web服務器的原理

我們將網站部署到Web服務器上,用戶通過瀏覽器就可以訪問服務器上的頁面,這個過程是如何實現的呢?

Web服務器都是基於HTTP協議的,當瀏覽器訪問頁面時,首先會發送HTTP的請求頭給服務器,服務器接受請求後會在web項目的目錄中查找瀏覽器需要的頁面文件,然後服務器依次發送響應狀態和響應頭給瀏覽器,最後發送網頁的HTML代碼給瀏覽器,瀏覽器接受服務器的數據後會解析HTML文件並顯示出來。

下面的案例是通過Socket模擬Web服務器,實現瀏覽器訪問服務器上的頁面。

/**

* 自定義Web服務器

* @author chenheng

*

*/

public class MyTomcat {

private static final int PORT = 8888;

private ExecutorService threadPool = Executors.newFixedThreadPool(10); //創建線程池

/**

* 啟動服務器

*/

public void start(){

System.out.println("服務器啟動了");

try {

//創建服務器Socket,監聽8888端口

ServerSocket server = new ServerSocket(PORT);

while(true){

//獲得客戶端的連接Socket

Socket socket = server.accept();

//啟動線程對客戶端進行服務

threadPool.execute(new ServiceThread(socket));

}

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

new MyTomcat().start();

}

}

/**

* 為客戶端服務的線程

* @author chenheng

*

*/

public class ServiceThread implements Runnable{

public static final String DIR = "C:/java_code/web/";

private Socket socket = null; // 客戶端連接

public ServiceThread(Socket socket) {

this.socket = socket;

}

@Override

public void run() {

//獲得客戶端的輸入流

try(BufferedReader br = new BufferedReader(

new InputStreamReader(socket.getInputStream()))){

//讀取客戶端的請求信息

String line = br.readLine();

//截取出請求頭中客戶請求的網頁地址

String url = line.split(" ")[1];

System.out.println("url:"+url);

if(!url.endsWith(".html")){

return;

}

//在服務器的磁盤上讀取該頁面文件的內容

BufferedReader br2 = new BufferedReader(

new InputStreamReader(new FileInputStream(DIR+url)));

StringBuilder strb2 = new StringBuilder();

while((line = br2.readLine()) != null){

strb2.append(line);

}

br2.close();

System.out.println("HTML:"+strb2.toString());

//獲得客戶端的輸出流

OutputStream out = socket.getOutputStream();

//定義響應狀態

String status = "HTTP/1.1 200 OK\r\n";

byte[] b_status = status.getBytes("UTF-8");

//發送響應狀態

out.write(b_status, 0, b_status.length);

//將HTML正文轉為字節

byte[] html = strb2.toString().getBytes("UTF-8");

//定義響應頭

String response_headers = "Content-Type:text/html;charset=utf-8\r\n"

+ "Content-Length:"+html.length+"\r\n";

byte[] headers = response_headers.getBytes("UTF-8");

//發送響應頭

out.write(headers);

//發送字節作為響應頭和正文的分隔

out.write(new byte[]{13,10},0,2);

//發送正文

out.write(html,0,html.length);

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

JavaWeb之服務器基礎