NetBeans用maven构建HTTP服务器 1

来源:互联网 发布:辅导软件 编辑:程序博客网 时间:2024/06/01 09:27

使用 Maven 的简单 Java SE 应用程序,从一个现有项目学习尝试搭建一个新的项目。

首先完成最基础的GET POST请求的功能。


1.新建项目 Maven-Java应用程序


2.打开POM,编辑POM.XML,添加jetty库

<project>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.glassfish.jersey</groupId>                <artifactId>jersey-bom</artifactId>                <version>2.23.2</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>        <dependencies>        <dependency>            <groupId>org.glassfish.jersey.containers</groupId>            <artifactId>jersey-container-jetty-servlet</artifactId>        </dependency>        <!-- json support -->        <dependency>            <groupId>org.glassfish.jersey.media</groupId>            <artifactId>jersey-media-json-jackson</artifactId>        </dependency>                <!-- jetty is our HTTP server -->        <dependency>            <groupId>org.eclipse.jetty</groupId>            <artifactId>jetty-server</artifactId>            <version>8.1.19.v20160209</version>        </dependency>        <dependency>            <groupId>org.eclipse.jetty</groupId>            <artifactId>jetty-rewrite</artifactId>            <version>8.1.16.v20140903</version>        </dependency>        <dependency>            <groupId>org.eclipse.jetty</groupId>            <artifactId>jetty-util</artifactId>            <version>8.1.16.v20140903</version>        </dependency>        <dependency>            <groupId>org.eclipse.jetty</groupId>            <artifactId>jetty-servlet</artifactId>            <version>8.1.19.v20160209</version>        </dependency>        <dependency>            <groupId>org.eclipse.jetty</groupId>            <artifactId>jetty-servlets</artifactId>            <version>8.1.19.v20160209</version>        </dependency>                        <!-- logger -->        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-api</artifactId>            <version>1.7.13</version>        </dependency>    </dependencies></project>

3.编辑Main.java

import org.eclipse.jetty.server.Connector;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.server.handler.HandlerList;import org.eclipse.jetty.server.nio.SelectChannelConnector;import org.eclipse.jetty.servlet.ServletContextHandler;import org.eclipse.jetty.servlet.ServletHolder;import org.eclipse.jetty.util.thread.QueuedThreadPool;import org.glassfish.jersey.servlet.ServletContainer;import org.eclipse.jetty.servlets.UserAgentFilter;public class Main {    public static void main(String[] args) throws Exception {        startServer();    }    public static Server startServer() throws Exception {        int port = 8080;        String path = "test";                //Set the maximum number of threads.        QueuedThreadPool threadPool = new QueuedThreadPool();        threadPool.setMaxThreads(500);                //入口        ServletHolder jerseyServlet = new ServletHolder(ServletContainer.class);        jerseyServlet.setInitParameter("javax.ws.rs.Application", "com.test.mavenproject.inject.TestJerseyConfig");        jerseyServlet.setInitOrder(1);        //基础路径        ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);        contextHandler.setContextPath("/");        contextHandler.addServlet(jerseyServlet, "/" + path + "/*");        contextHandler.addFilter(UserAgentFilter.class, "/" + path + "/*", null);                HandlerList handlerList = new HandlerList();        handlerList.addHandler(contextHandler);        //端口设置        SelectChannelConnector selectChannelConnector = new SelectChannelConnector();        selectChannelConnector.setPort(port);        selectChannelConnector.setAcceptors(Math.max(1, Runtime.getRuntime().availableProcessors() - 1));        //开启server        Server server = new Server();        server.setThreadPool(threadPool);        server.setHandler(handlerList);        server.setConnectors(new Connector[]{selectChannelConnector});        server.start();        server.join();        return server;    }}

4.修改com.test.mavenproject.inject.TestJerseyConfig

import javax.inject.Inject;import org.glassfish.hk2.api.ServiceLocator;import org.glassfish.jersey.jackson.JacksonFeature;import org.glassfish.jersey.server.ResourceConfig;public class TestJerseyConfig extends ResourceConfig {    @Inject    public TestJerseyConfig(            ServiceLocator serviceLocator    ){         //json转换器         super(JacksonFeature.class);                 register(new TestBinder());        //扫描服务类所在的包        packages("com.test.mavenproject.rest");        //可以注册各种工具类        //register(***Filter.class);    }}

import org.glassfish.hk2.utilities.binding.AbstractBinder;public class TestBinder extends AbstractBinder {    @Override    protected void configure() {        //TODO. 配置@Inject需要的注入    }    }

5.rest包添加服务类

import javax.inject.Inject;import javax.ws.rs.Consumes;import javax.ws.rs.DefaultValue;import javax.ws.rs.FormParam;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.Produces;import javax.ws.rs.QueryParam;import javax.ws.rs.core.MediaType;@Path("test1")public class TestResource {    @Inject    public TestResource(    ) {            }        @GET    @Path("get")    @Produces(MediaType.TEXT_PLAIN)    public String getTest(){        return "called Get";    }    //http://192.168.0.164:8080/test/test1/get    //called Get        @GET    @Path("get1")    @Produces(MediaType.APPLICATION_JSON)    public TestResponse getTest1(){        TestResponse response = new TestResponse();        response.setRes("asd");        return response;    }    //http://192.168.0.164:8080/test/test1/get1    //{"res":"asd"}        @GET    @Path("get2/{text}")    @Produces(MediaType.TEXT_PLAIN)    public String getTest2(@PathParam("text")String text,                            @DefaultValue("2") @QueryParam("id") int uid){        StringBuilder sb = new StringBuilder();        sb.append("called Get,text =");        sb.append(text);        sb.append(",id =");        sb.append(uid);        return sb.toString();    }    //http://192.168.0.164:8080/test/test1/get2/asd?id=5    //called Get,text =asd,id =5            @POST    @Path("post")    @Produces(MediaType.APPLICATION_JSON)    @Consumes(MediaType.APPLICATION_JSON)    public TestResponse postTest(TestRequest request){        TestResponse response = new TestResponse();        response.setRes(request.getInfo());        return response;    }}

import com.fasterxml.jackson.annotation.JsonProperty;public class TestRequest {    @JsonProperty("otherNodeName")    private String info;        public String getInfo(){        return info;    }        public void setInfo(String info){        this.info = info;    }}public class TestResponse {    private String res;        public String getRes(){        return res;    }        public void setRes(String res){        this.res = res;    }}


原创粉丝点击