輕量級的java HTTP Server——NanoHttpd


NanoHTTPD是一個免費、輕量級的(只有一個Java文件) HTTP服務器,可以很好地嵌入到Java程序中。支持 GET, POST, PUT, HEAD 和 DELETE 請求,支持文件上傳,占用內存很小。 
github地址:https://github.com/NanoHttpd/nanohttpd。

maven依賴:

<dependency>
<groupId>org.nanohttpd</groupId> <!-- <groupId>com.nanohttpd</groupId> for 2.1.0 and earlier -->
<artifactId>nanohttpd</artifactId>
<version>2.2.0</version>
</dependency>

官網demo:

package com.example;

import java.io.IOException;
import java.util.Map;

import fi.iki.elonen.NanoHTTPD;
// NOTE: If you're using NanoHTTPD >= 3.0.0 the namespace is different,
//       instead of the above import use the following:
// import org.nanohttpd.NanoHTTPD;

public class App extends NanoHTTPD {

    public App() throws IOException {
        super(8080);
        start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
        System.out.println("\nRunning! Point your browsers to http://localhost:8080/ \n");
    }

    public static void main(String[] args) {
        try {
            new App();
        } catch (IOException ioe) {
            System.err.println("Couldn't start server:\n" + ioe);
        }
    }

    @Override
    public Response serve(IHTTPSession session) {
        String msg = "<html><body><h1>Hello server</h1>\n";
        Map<String, String> parms = session.getParms();
        if (parms.get("username") == null) {
            msg += "<form action='?' method='get'>\n  <p>Your name: <input type='text' name='username'></p>\n" + "</form>\n";
        } else {
            msg += "<p>Hello, " + parms.get("username") + "!</p>";
        }
        return newFixedLengthResponse(msg + "</body></html>\n");
    }
}

運行App,瀏覽器打開http://localhost:8080/ 即可看到效果。

輸入username,然后回車:

這樣一個簡單的登錄功能就完成了。

問題: 
如果form中指定action為post,你會發現后台session獲取不到參數。 
解決辦法:

session.parseBody(new HashMap());
params = session.getParms();

意思也就是,對於post請求,你需要先調用parseBody()方法,直接傳一個簡單的新構造的map就行了,然后再調用getParams()方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM