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

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

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

    kalman03

    每天早上看一遍《福布斯》富翁排行榜,如果上面沒有我的名字,我就去學習......
    隨筆 - 22, 文章 - 0, 評論 - 86, 引用 - 0
    數據加載中……

    手動實現Web容器

          一個類似Tomcat的容器,不過只是模擬Web容器的解析過程,只做了簡單的解析HTML。
          首先用Java IDE建立一個普通的Java Project,要解析web少不了Request和Response對象,所以在工程(項目)里建立兩個類:MyHttpServletRequest(對應HttpServletRequest)、MyHttpServletResponse(對應HttpServletResponse),如下:
    //MyHttpServletRequest.java
    package com.kalman03.servlet;

    import java.io.BufferedReader;
    import java.io.IOException;

    public class MyHttpServletRequest{
        
    private BufferedReader br;
        
    private String header;
        
    public MyHttpServletRequest(BufferedReader br){
            
    try{
                
    this.br = br;
                
    this.header = br.readLine();//  GET /index.html HTTP/1.1
            }catch(IOException ex){
                ex.printStackTrace();
            }
        }   

        
    public String getURL(){
            String [] temp 
    = header.split(" ");
            
    return temp[1].substring(1);
        }
    }

    //MyHttpServletResponse.java
    package com.kalman03.servlet;

    import java.io.PrintWriter;

    public class MyHttpServletResponse{
        
    private PrintWriter out;
        
    public MyHttpServletResponse(PrintWriter out){
            
    this.out = out;
            out.println(
    "HTTP/1.1 200 OK");
        }

        
    public PrintWriter getWriter(){
            
    return out;
        }
    }

    構造一個抽象類MyHttpServlet:
    //MyHttpServlet.java
    package com.kalman03.servlet;

    public abstract class MyHttpServlet{
        
    public abstract void doGet(MyHttpServletRequest request,MyHttpServletResponse response)throws Exception;
        
    public abstract void doPost(MyHttpServletRequest request,MyHttpServletResponse response)throws Exception;
    }

    用MyServlet類實現上面MyHttpServlet抽象類:
    //MyServlet.java
    package com.kalman03.servlet.ext;

    import java.io.BufferedReader;
    import java.io.PrintWriter;
    import java.io.File;
    import java.io.FileReader;
    import com.kalman03.servlet.MyHttpServlet;
    import com.kalman03.servlet.MyHttpServletRequest;
    import com.kalman03.servlet.MyHttpServletResponse;

    //該類繼承MyHttpServlet類,實現其中的doGet(),doPost()方法
    public class MyServlet extends MyHttpServlet {
        
    private PrintWriter out;
        
    private String url;

        
    public void doGet(MyHttpServletRequest request,
                          MyHttpServletResponse response) 
    throws Exception {
            
    this.out = response.getWriter();
            url 
    = request.getURL();
            
    if (url.equals("")) {
                url 
    = "index.html";
            }
            File file 
    = new File(url);
            FileReader fr 
    = new FileReader(file);
            BufferedReader brR 
    = new BufferedReader(fr);
            String temp;
            
    while ((temp = brR.readLine()) != null) {
                out.println(temp);
            }
            out.close();
            brR.close();
            fr.close();
        }

        
    public void doPost(MyHttpServletRequest request,
                           MyHttpServletResponse response) 
    throws Exception {
            
    this.doGet(request, response);
        }
    }

    跑一個線程監聽類MyWebService:
    //MyWebService.java
    package com.kalman03.servlet;

    import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;

    public class MyWebService {
        
    public MyWebService(MyHttpServlet ms) {
            
    try {
                ServerSocket ss 
    = new ServerSocket(2008);
                
    while (true) {
                    Socket s 
    = ss.accept();
                    
    new myRunnable(s, ms).start();
                }
            } 
    catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }


    //線程監聽
    class myRunnable extends Thread {
        
    private Socket s;
        
    private MyHttpServlet ms;
        
    public myRunnable(Socket s, MyHttpServlet ms) {
            
    this.s = s;
            
    this.ms = ms;
        }

        
    public void run() {
            
    try {
                BufferedReader br 
    = new BufferedReader(new InputStreamReader(s.
                        getInputStream()));
                PrintWriter out 
    = new PrintWriter(s.getOutputStream(), true);
                MyHttpServletRequest req 
    = new MyHttpServletRequest(br);
                MyHttpServletResponse rep 
    = new MyHttpServletResponse(out);
                ms.doGet(req, rep);
                br.close();
                out.close();
            } 
    catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    至此大工基本告成,再來一個main方法(MainClass類)就OK了:
    //MainClass.java
    package com.kalman03.test;

    import com.kalman03.servlet.MyWebService;
    import com.kalman03.servlet.ext.MyServlet;

    public class MainClass {
        
    public static void main (String[] args) {
           
    new MyWebService(new MyServlet());
       }
    }

    運行,OK!一個web容器已經啟動,當你在剛建的工程(項目)目錄下丟一個HTML(比如welcome.html),在瀏覽器里輸入http://127.0.0.1:2008/welcome.html,即可解析welcome.html。
    示例效果:




    posted on 2008-10-17 22:40 kalman03 閱讀(2125) 評論(6)  編輯  收藏 所屬分類: JSP/Servlet

    評論

    # re: 手動實現Web容器  回復  更多評論   

    補充一下,這里設置的默認端口為2008,當沒有指定具體頁面時候,尋找的是index.html
    2008-10-17 22:48 | kalman03

    # re: 手動實現Web容器  回復  更多評論   

    看看 NanoHTTPD 這個單文件開源HTTP服務器, 做的很棒.
    2008-10-18 09:23 | BeanSoft

    # re: 手動實現Web容器  回復  更多評論   

    @BeanSoft
    where??
    2008-10-18 17:00 | kalman03

    # re: 手動實現Web容器  回復  更多評論   

    http://elonen.iki.fi/code/nanohttpd/ 可能要代理才能上去...

    http://www.tkk7.com/beansoft/archive/2008/10/18/235235.html 我轉發了一份
    2008-10-18 22:47 | BeanSoft

    # re: 手動實現Web容器  回復  更多評論   

    @BeanSoft
    謝謝
    2008-10-19 01:02 | kalman03

    # re: 手動實現Web容器  回復  更多評論   

    好文章啊~~
    2010-05-27 16:40 | 蚊香
    主站蜘蛛池模板: 亚洲精品国产高清不卡在线 | 亚洲1区2区3区精华液| 久久国产精品成人片免费| 久久九九亚洲精品| 一级毛片人与动免费观看| 免费一看一级毛片| 国产综合激情在线亚洲第一页| 精品无码国产污污污免费| 亚洲色成人WWW永久在线观看| 亚洲国产精品国自产拍电影| 最近中文字幕大全免费版在线 | 免费国产成人午夜私人影视| 免费播放美女一级毛片| 全黄性性激高免费视频| 免费国产在线精品一区| 亚洲一级毛片免费看| 精品国产香蕉伊思人在线在线亚洲一区二区 | 日韩免费观看一级毛片看看| 久久久久久久久无码精品亚洲日韩| 日本免费人成黄页在线观看视频 | 色多多免费视频观看区一区| 亚洲国产人成精品| 成人影片一区免费观看| 亚洲国产亚洲综合在线尤物| 韩国免费三片在线视频| japanese色国产在线看免费| 自怕偷自怕亚洲精品| 免费鲁丝片一级观看| 国产精品免费久久久久久久久 | 最新黄色免费网站| 亚洲精品国产第一综合99久久| 1000部啪啪未满十八勿入免费| 亚洲欧美国产精品专区久久| 五月婷婷亚洲综合| 99亚洲乱人伦aⅴ精品| 亚洲乱码无码永久不卡在线| 91嫩草免费国产永久入口| mm1313亚洲国产精品无码试看| 精品国产日韩久久亚洲| 国产91精品一区二区麻豆亚洲| 亚洲视频免费观看|