在開始寫代碼之前,先要把准備工作做好:
把學要的資料(即要顯示在網頁上的html文件 和圖片)放在Moudle的根目錄下,如圖:
package cn.kgc.cn.kgc.bs; import java.io.IOException; import java.net.ServerSocket; import java.io.InputStream; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.BufferedOutputStream; import java.net.Socket; public class Server { public static void main(String[] args) { try { //首先創建服務器的ServerSocket接口對象 ServerSocket server=new ServerSocket(8888); while(true){ //通過server的accept()方法來對網絡端進行監聽,並獲得網絡端Socket對象 Socket socket=server.accept(); //創建多線程,以提高效率 new Thread(new Runnable() { @Override public void run() { try{ //獲得網絡字節輸入流,以便於讀取網絡端發送的地址請求 InputStream is=socket.getInputStream(); //使用BufferedReader把網絡字節輸入流包裝成網絡字符緩沖流,提高讀取效率 BufferedReader br=new BufferedReader(new InputStreamReader(is)); //讀取網絡端返回的字符串請求中的第一行 String line=br.readLine(); //對第一行內容進行分割,以便於下面獲取網絡端需要訪問的文件路徑 String[]split=line.split(" "); /** * 分割后的元素存放在數組中 * 對下標為1的元素進行截取 * 獲得學要的文件路徑 */ String sub=split[1].substring(1); System.out.println(sub); /** * 需要使用服務器的本地字節輸入流 * 把文件按照得到的路徑寫到 * 服務器的內存中 * 然后使用網絡字節輸出流 * 把內存中的文件寫到網絡端 */ //把本地字節輸入流和網絡字節輸出流分別包裝成緩沖字符輸入流和字符輸出緩沖流 BufferedInputStream bis=new BufferedInputStream(new FileInputStream(sub)); BufferedOutputStream bos=new BufferedOutputStream(socket.getOutputStream()); int len=0; //讀取文件 while((len=bis.read())!=-1){ //把文件寫到網絡端 bos.write(len); } //釋放資源呢 bos.close(); bis.close(); is.close(); socket.close(); }catch(IOException e){ e.printStackTrace(); } } }).start(); } } catch (IOException e) { e.printStackTrace(); } } }