美文网首页
使用Http Server构建web应用

使用Http Server构建web应用

作者: 奋斗live | 来源:发表于2019-06-17 14:01 被阅读0次
    一、输出信息到页面中
    package http;
    
    import com.sun.net.httpserver.HttpExchange;
    import com.sun.net.httpserver.HttpHandler;
    import com.sun.net.httpserver.HttpServer;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetSocketAddress;
    
    public class Http {
    
    
        public static void main(String[] arg) throws Exception{
            HttpServer server = HttpServer.create(new InetSocketAddress(8001),0);
            server.createContext("/index",new TestHandler());
            server.start();
        }
    
        static class TestHandler implements HttpHandler{
    
            @Override
            public void handle(HttpExchange exchange) throws IOException {
                String response = "this is server";
                exchange.sendResponseHeaders(200, 0);
                OutputStream os = exchange.getResponseBody();
                os.write(response.getBytes());
                os.close();
            }
        }
    }
    

    直接在浏览器上输入地址访问
    http://127.0.0.1:8001/index

    显示如下图


    image.png
    二、加载某个页面

    加载某个页面,需要用到pom.xml
    项目结构如下


    image.png

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>netty_tcp_test</groupId>
        <artifactId>netty_tcp_test</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <netty.version>4.1.25.Final</netty.version>
            <os.detected.classifier>linux-x86_64</os.detected.classifier>
            <slf4j.version>1.7.25</slf4j.version>
            <java.version>1.8</java.version>
        </properties>
    
    <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <encoding>${java.version}</encoding>
                    </configuration>
                </plugin>
    
            </plugins>
        </build>
    
    </project>
    

    Http.java

    package http;
    
    import com.sun.net.httpserver.HttpExchange;
    import com.sun.net.httpserver.HttpHandler;
    import com.sun.net.httpserver.HttpServer;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetSocketAddress;
    
    public class Http {
    
    
        public static void main(String[] arg) throws Exception{
            HttpServer server = HttpServer.create(new InetSocketAddress(8002),0);
            server.createContext("/index.html",new TestHandler());
            server.start();
            System.out.println("启动成功");
        }
    
        static class TestHandler implements HttpHandler{
    
            private byte[] data;
    
            public TestHandler(){
                try(InputStream in = this.getClass().getResourceAsStream("/index.html")){
                    this.data = new byte[in.available()];
                    in.read(data);
                }catch (Exception e){
                    throw  new RuntimeException(e);
                }
            }
            @Override
            public void handle(HttpExchange exchange) throws IOException {
                String response = "this is server";
                exchange.getResponseHeaders().set("Content-Type", "text/html");
                exchange.sendResponseHeaders(200, 0);
    
                OutputStream os = exchange.getResponseBody();
                os.write(data);
                os.close();
            }
        }
    }
    
    

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>teste</title>
    </head>
    <body>
    <form onsubmit="return false;">
        <label>
            name
            <input type="text" value="yilian" id="userId" required="required" style="width: 100%">
        </label>
        <br/>
        <label>
            age<span style="color: red">*</span>
            <input type="text" value="age" id="hello" required="required" style="width: 100%">
    
        </label>
        <br/>
        <label>
            sex
            <input type="checkbox" value="sex" id="broadcast">
        </label>
        <br/>
        <br/>
        <input type="button" value="Send To Client" style="width: 100%" onclick="send()">
    </form>
    <script type="application/javascript">
        function $(id) {
            return document.getElementById(id);
        }
    
        function send() {
            var broadcast = $('broadcast').checked;
            var userId = $('userId').value;
            var content = $('hello').value;
            if (!userId && !broadcast) {
                alert("please input userId.");
                return false;
            }
    
            if (!content) {
                alert("please input content.");
                return false;
            }
    
    
            var xhr = new XMLHttpRequest();
            xhr.open('POST', '/push', true);
            xhr.setRequestHeader("context-type", "application/json; charset=utf-8");
            xhr.onload = function (e) {
                if (this.status == 200) {
                    alert(this.response)
                }
            };
    
            xhr.send(JSON.stringify({
                userId: userId,
                hello: content,
                broadcast: broadcast,
                condition: $('condition').value
            }));
        }
    </script>
    </body>
    </html>
    
    

    启动后如下访问,即可访问到对应的index.html页面


    image.png
    3、并发处理

    对于TestHandler,可以在其中为每个新的请求新开一个线程进行处理,如下

      static class TestHandler implements HttpHandler{
    
            private byte[] data;
    
            public TestHandler(){
                try(InputStream in = this.getClass().getResourceAsStream("/index.html")){
                    this.data = new byte[in.available()];
                    in.read(data);
                }catch (Exception e){
                    throw  new RuntimeException(e);
                }
            }
            @Override
            public void handle(HttpExchange exchange) throws IOException {
    
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            exchange.getResponseHeaders().set("Content-Type", "text/html");
                            exchange.sendResponseHeaders(200, 0);
    
                            OutputStream os = exchange.getResponseBody();
                            os.write(data);
                            os.close();
                        }catch (IOException ie){
                            ie.printStackTrace();
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }).start();
    
            }
        }
    

    相关文章

      网友评论

          本文标题:使用Http Server构建web应用

          本文链接:https://www.haomeiwen.com/subject/jljafctx.html