<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://m.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 | 蚊香
    主站蜘蛛池模板: 国产免费观看青青草原网站| 久久大香香蕉国产免费网站| 成人毛片免费观看视频大全| 亚洲综合一区二区国产精品| 男人的天堂网免费网站| 亚洲人成影院在线无码观看| igao激情在线视频免费| 亚洲av午夜精品一区二区三区| 男女猛烈xx00免费视频试看| 免费看片免费播放| 立即播放免费毛片一级| 亚洲AV伊人久久青青草原| 日韩a毛片免费观看| 久久精品国产亚洲5555| 国产在线观看免费视频软件| 亚洲av日韩av无码黑人| 在线观看的免费网站无遮挡| 亚洲国产成人久久| 免费无码黄动漫在线观看| 老妇激情毛片免费| 亚洲一区AV无码少妇电影☆| 久99久精品免费视频热77| 亚洲黄色一级毛片| 永久免费毛片在线播放| 国产亚洲精品2021自在线| 亚洲一区视频在线播放| 久草免费手机视频| 亚洲免费在线观看视频| 永久中文字幕免费视频网站| h片在线播放免费高清| 亚洲高清在线视频| 欧洲精品成人免费视频在线观看| 亚洲.国产.欧美一区二区三区| 亚洲人成亚洲人成在线观看| 91香蕉国产线在线观看免费| 亚洲色偷偷色噜噜狠狠99| 国产亚洲精品a在线观看app| 免免费国产AAAAA片| 一二三区免费视频| 亚洲无线一二三四区| 亚洲AV无码乱码精品国产|