熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

用java 實現一個簡單的web 服務器

2022-06-13   來源: Java核心技術 

  import javaioIOException;
import ServerSocket;
import Socket;

  /**
 * Socket + Thread + FileIO
 *
 * 服務器運行機制
 * 啟動服務器處於運行狀態
 * 能接收到請求
 * 分析請求內容
 * 處理響應內容
 * 發送響應內容到客戶端
 *
 * @author Administrator
 *
 */
public class Server
{
private int port = ;

  /**
* 啟動服務器
*/
public void start()
{
try
{
// 實例化一個服務器端Socket對象用於接收客戶端的連接信息
ServerSocket server = new ServerSocket(port);

  while(true)
{
// 接收到的socket對象中 包含了http請求信息
Socket socket = serveraccept();

  Systemoutprintln(接收到一個請求!);

  // 將socket對象交給線程類進行 單獨的處理從而可以同時響應多個用戶的請求
Processor p = new Processor(socket);
new Thread(p)start();
}
}
catch (IOException e)
{
eprintStackTrace();
}
}

  /**
* 簡單的服務器程序通過main方法來啟動服務器
* @param args
*/
public static void main(String[] args)
{
new Server()start();
}
}

  import javaioBufferedReader;
import javaioFile;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioIOException;
import javaioInputStream;
import javaioInputStreamReader;
import javaioOutputStream;
import javaioOutputStreamWriter;
import Socket;

  /**
 * Processor 用於接收請求內容分析請求內容處理響應發送響應
 * @author Administrator
 *
 */
public class Processor implements Runnable
{
private Socket socket;
// 定義虛擬服務器所在的根目錄
// 當訪問請求地址為
// 程序將讀取並返回 WEB_ROOT\doc\l 文件的內容
private final static String WEB_ROOT = E:\\java學習\\web 作業\\浮動廣告;

  public Processor(Socket s)
{
thissocket = s;
}

  @Override
public void run()
{
// 分析請求內容
String filePath = parse();
// 處理響應讀取頁面文件內容
String fileContent = readFile(filePath);
if(fileContent != null)
{
// 發送響應
sendResult( OK fileContent);
}
}

  /**
* 解析請求內容根據請求中的URL內容獲取請求對應的頁面文件路徑
* @return 頁面相對路徑
*/
public String parse()
{
try
{
InputStream in = socketgetInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String requestContent = readerreadLine();
// Systemoutprintln(requestContent);
String[] contents = requestContentsplit( );
String url = contents[];
// Systemoutprintln(url);
// inclose();
// readerclose();
return url;
}
catch (IOException e)
{
eprintStackTrace();
}
return null;
}

  /**
* 根據傳入的文件相對路徑通過文件IO流讀取內容並返回
* 如果沒有找到文件發送錯誤響應
* @param filePath
* @return
*/
public String readFile(String filePath)
{
String absFilePath = WEB_ROOT + filePath;
File file = new File(absFilePath);
Systemoutprintln(filegetAbsolutePath() + 文件是否存在+fileexists());

  // File IO流讀取文件內容
if(fileexists())
{
try
{
byte[] buff = new byte[(int) filelength()];
FileInputStream fis = new FileInputStream(file);
fisread(buff);
String fileContent = new String(buff);
fisclose();
return fileContent;
}
catch (FileNotFoundException e)
{
eprintStackTrace();
}
catch (IOException e)
{
eprintStackTrace();
}
}
else
{
sendResult( File not found 你懂的!);
}
return null;
}

  /**
* 通過響應發送響應內容
* @param errorCode
* @param errorMessage
*/
public void sendResult(int code String message String result)
{
// 通過socket對象的輸出流 發送響應內容
try
{
OutputStream os = socketgetOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
oswwrite(HTTP/ + code + + message + \r\n);
oswwrite(ContentLength: + resultgetBytes()length + \r\n);
oswwrite(ContentType:text/html\r\n);
oswwrite(\r\n);
oswwrite(result);
oswflush();
oswclose();
}
catch (IOException e)
{
eprintStackTrace();
}
}
}


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26138.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.