<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 40, 文章 - 0, 評論 - 20, 引用 - 0
    數據加載中……

    用Java實現的Html web服務器

    ? 馬上就要開始轉到新的項目組,做一個全新的項目了,對于HTTP協議需要一定的了解,所以周末自己用Java寫了一個簡單的web服務器試試,只能實現簡單的html文件瀏覽。

    主要包括三個類:WebServer(監聽瀏覽器請求),SocketThread(處理瀏覽器請求的進程),StringUtil(實現一些公共的操作),下面是三個類的代碼.


    ----WebServer----
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class WebServer {
    ?
    ?public static void main(String[] argv) throws IOException {
    ??ServerSocket servSocket = new ServerSocket(StringUtil.LISTENING_PORT);
    ??try {
    ???while (true) {
    ????Socket socket = servSocket.accept();
    ????new SocketThread(socket).start();
    ???}
    ??} finally {
    ???servSocket.close();
    ??}
    ?}
    }

    ---SocketThread------
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintStream;
    import java.io.Writer;
    import java.net.Socket;

    public class SocketThread extends Thread {
    ?private Socket socket = null;

    ?public SocketThread(Socket s) {
    ??this.socket = s;
    ?}

    ?public void run() {
    ??try {
    ???if (socket == null) {
    ????throw new Exception("==>SOCKET為空<==");
    ???}
    ???BufferedReader reader = new BufferedReader(new InputStreamReader(
    ?????socket.getInputStream()));
    ???String fileName = "";
    ???while (true) {
    ????String str = reader.readLine();
    ????if (str == null || str.length() <= 0) {
    ?????break;
    ????}
    ????//System.out.println("===>"+str);
    ????if (StringUtil.isGetRequestInfo(str)) {
    ?????fileName = StringUtil.getFileName(str);
    ?????break;
    ????}
    ???}
    ???//System.out.println("===>客戶機IP==>"+socket.getInetAddress().toString());
    ???//System.out.println("===>客戶機端口==>"+socket.getPort());???
    ???/*
    ??? BufferedWriter writer = new BufferedWriter(new
    ??? OutputStreamWriter(socket.getOutputStream()));
    ??? */
    ???PrintStream outputStream = new PrintStream(socket.getOutputStream());
    ???File file = new File(StringUtil.WEBPATH + fileName);
    ???if (file.exists()) { //如果文件存在
    ????StringUtil.sendHttpHead(outputStream, file);
    ????StringUtil.sendFile(outputStream, file);
    ????outputStream.flush();
    ???} else { //文件沒找到,返回404頁面
    ????StringUtil.send404Page(outputStream);
    ????outputStream.flush();
    ???}
    ??} catch (Exception e) {
    ???e.printStackTrace();
    ??} finally {
    ???try {
    ????socket.close();
    ???} catch (Exception e) {
    ???}
    ??}
    ?}

    }



    ---StringUtil-----
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.PrintStream;

    /**
    ?* @author xiaoliang
    ?*/
    public class StringUtil {

    ?// 服務器監聽的端口
    ?public static final int LISTENING_PORT = 8080;

    ?// 服務器文件的位置
    ?public static final String WEBPATH = "E:";

    ?/**
    ? * 判斷該字符串是不是瀏覽器發送過來的請求頭信息
    ? * @param str
    ? * @return
    ? */
    ?public static boolean isGetRequestInfo(String str) {
    ??if (str == null || str.length() <= 0)
    ???return false;
    ??boolean isGetStr = true;
    ??if (str.indexOf("GET") != 0) {
    ???isGetStr = false;
    ??}
    ??if (str.indexOf("HTTP/") <= 0) {
    ???isGetStr = false;
    ??}
    ??return isGetStr;
    ?}

    ?/**
    ? * 獲得請求信息中的文件名,默認為index.html
    ? *
    ? * @param str
    ? * @return
    ? */
    ?public static String getFileName(String str) {
    ??String fileName = "index.html", s;
    ??int httpIndex = str.lastIndexOf("HTTP/");
    ??s = str.substring(3, httpIndex);
    ??s = s.trim();
    ??if (s != null && s.length() > 0 && s.indexOf(".") > 0) {
    ???fileName = s;
    ??}
    ??return fileName;
    ?}

    ?/**
    ? * 發送文件到客戶端
    ? *
    ? * @param out
    ? * @param file
    ? */
    ?public static void sendFile(PrintStream out, File file) {
    ??try {
    ???DataInputStream in = new DataInputStream(new FileInputStream(file));
    ???int length = (int) file.length();
    ???byte[] buffer = new byte[length];
    ???in.readFully(buffer);
    ???out.write(buffer, 0, length);
    ???in.close();
    ??} catch (Exception e) {
    ???e.printStackTrace();
    ??}
    ?}

    ?/**
    ? * 發送返回的頭部信息
    ? * @param out
    ? */
    ?public static void sendHttpHead(PrintStream outputStream, File file) {
    ??try {
    ???outputStream.println("HTTP/1.0200OK");
    ???outputStream.println("Content_Type:text/htm1");
    ???outputStream.println("Content_Length:" + file.length());
    ???outputStream.println("Server:moon webserver 1.0");
    ???outputStream.println("");
    ??} catch (Exception e) {
    ???e.printStackTrace();
    ??}
    ?}

    ?/**
    ? * 返回404頁面
    ? * @param out
    ? */
    ?public static void send404Page(PrintStream out) {
    ??try {
    ???out.println("HTTP /1.0 404 no found");
    ???out.println("Content_type:text/html");
    ???out.println("");
    ???out.println("Error404:file not found!");
    ??} catch (Exception e) {
    ???e.printStackTrace();
    ??}
    ?}
    ?
    ?public static void main(String[] argv) {
    ??String str = "GET /11.html HTTP/1.1";
    ??str = StringUtil.getFileName(str);
    ??System.out.println("==>" + str + "<==");
    ??File file = new File(StringUtil.WEBPATH + str);
    ??if (file.exists()) {
    ???System.out.println("exists");
    ??} else {
    ???System.out.println("not exists");
    ??}
    ?}

    }

    posted on 2006-03-28 13:55 月亮 閱讀(454) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 搜日本一区二区三区免费高清视频| 亚洲毛片基地日韩毛片基地| 亚洲a无码综合a国产av中文| 亚洲人成网站免费播放| 亚洲天天在线日亚洲洲精| 国产成人精品无码免费看| 亚洲人成网亚洲欧洲无码久久| 久久久久国色AV免费观看| 亚洲中文字幕不卡无码| 人人揉揉香蕉大免费不卡| 久久久久亚洲Av片无码v| 99在线观看视频免费| 亚洲另类视频在线观看| 无码人妻一区二区三区免费手机| 日韩亚洲人成在线| 国产美女被遭强高潮免费网站| 一级毛片免费不卡| 国产亚洲精品xxx| 久久久久久曰本AV免费免费| 亚洲国产精品综合福利专区| 免费网站看v片在线香蕉| 羞羞漫画页面免费入口欢迎你| 亚洲国产精品人人做人人爱| 在线毛片片免费观看| 亚洲成AV人片久久| 国产99视频免费精品是看6| 国产精品极品美女自在线观看免费 | 亚洲国产人成在线观看69网站| 7m凹凸精品分类大全免费| 伊人久久亚洲综合影院首页| 亚洲国产成人五月综合网 | jizz免费观看| 亚洲欧洲一区二区| 毛片高清视频在线看免费观看| 免费国产高清毛不卡片基地 | 色猫咪免费人成网站在线观看 | 波多野结衣亚洲一级| 亚洲精品99久久久久中文字幕| 午夜精品一区二区三区免费视频| 亚洲无码一区二区三区 | 久久精品免费一区二区喷潮|