Java 1中的Web服务-配置服务器

Java是后端工作的乐趣。 它不仅表现出色,而且在业界已经了很长时间,将其标记为经过考验的可靠平台。

它是完全可定制的,这有助于使Java像服务器端语言一样高效和强大。 您可以从可用库的几乎每种组合构建应用程序,并仅选择所需的功能。

这有其优点。 虽然这也使每个项目都有某种Lego建造任务。 不幸的是,它不能像现成的乐高玩具那样工作。 要使用您喜欢或需要的功能,您需要选择一个包装。 到目前为止,这已经非常详细了,以使服务器正确运行,您需要选择一个XML / JSON解析器。

为了向您的第一个应用程序提供逐步指南,在本系列中,我们将研究如何

Create Project

As a build and dependency tool for our project, we will use Gradle. This will allow us to specify dependencies we need for our project. A project using Gradle has the following structure:

src
- main
    - java
    - resources
- test
    - java
    - main
build.gradle
settings.gradle

在src目录中,我们将放置所有源代码。 这里有一个用于测试的子目录-测试-**和另一个用于我们的应用程序-main。 在这两个目录中的每个目录中都有一个名为** java的Java代码目录以及其他文件资源资源。

在build.gradle中,我们存储所有项目配置;在settings.gradle中,我们将配置项目。

这是用于本系列的build.gradle:

plugins {
    id 'java'
}

group 'JettyServer'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.28'
        compile 'org.eclipse.jetty:jetty-server:9.4.19.v20190610'
        compile 'org.eclipse.jetty:jetty-servlet:9.4.19.v20190610'
        compile 'org.glassfish.jersey.inject:jersey-hk2:2.28'
        compile 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.2'
        runtime 'org.glassfish.jaxb:jaxb-runtime:2.3.2'
    compile 'org.eclipse.jetty:jetty-servlets:9.4.19.v20190610'
    compile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.28'
    compile 'org.hibernate:hibernate-core:5.4.4.Final'
    compile 'org.xerial:sqlite-jdbc:3.20.1'
    compile 'com.zsoltfabok:sqlite-dialect:1.0'
}

Create a server in Java

你们中的某些人可能已经使用过其他Web技术,例如Rails,Flask,Express.js等。在这些语言中,服务器的创建大部分对您来说是隐藏的。 您可以创建一个对象并对其进行初始化,否则所有内容都将立即可用。 对于我们的服务器,情况并非如此。 但让我们看看:

首先,我们需要主班与主要方法在这里,我们将把我们所有的起始代码。

public class Main {
    public static void main(String[] args) throws Exception {

    }
}

首先,我们需要一个队列持有所有线程数我们将习惯于处理请求。请注意,如果将其设置得太大,它将耗尽所有系统资源;如果将其设置得太小,它将无法处理所有负载。 就我们而言,我们将开始容量的20, 让它增长2和将队列限制为80。我们将把这个队列提供给我们线程池它会handle the distribution的jobs进入我们的队列。

public static void main(String[] args) {
//Queue initialization
    BlockingQueue<Runnable> threadPoolQueue = new BlockingArrayQueue<>(20, 2, 80);
// Create ThreadPool for the server to use.
// default idle time as defined in the QueuedThreadPool.
    QueuedThreadPool threadPool = new QueuedThreadPool(20, 2, (int) TimeUnit.MINUTES.toMillis(1), threadPoolQueue);
  threadPool.setName("jetty-test-server");
  threadPool.setDaemon(true);
}

现在我们已经设置了系统资源,我们需要创建一个服务器。我们将通过创建服务器类和一个服务器Connector类。 连接器将打开服务器的网络。

// Instance of server object - adds the threadPool to use
Server server = new Server(threadPool);
// instance of server connector with server instance to handle connections for
ServerConnector connector = new ServerConnector(server);
// set port to use
connector.setPort(8080);
// add connector to server
server.setConnectors(new Connector[]{connector});

接下来我们添加一个ServletContextHandler用于我们的REST资源。 该上下文处理程序负责提供一个执行请求处理程序方法的环境。 这包括请求,响应,届会和其他重要资源。

final ServletContextHandler servletContextHandler = new ServletContextHandler();
servletContextHandler.setContextPath("/");

设置ContextHandler。 下一步是提供ServletHolder供ContextHandler进行操作。 ServletHolder用于状态管理为了正确处理路径。 它包含一个Servlet容器那本身只是一个实例Servlet(服务器可调用的资源)已使用我们要在应用程序中使用的所有资源初始化。

// Holds all the resources we want to register (currently, there's nothing to do)
ResourceConfig resourceConfig = new ResourceConfig();
// handles state for servlets
final ServletHolder servletHolder = new ServletHolder(new ServletContainer(resourceConfig));
servletContextHandler.addServlet(servletHolder, "/*");

当我们初始化ServletContextHandler时,是时候将其提供给我们的服务器,以便它可以将请求委托给它了。 为此,我们将使用处理程序列表并用我们的ServletContextHandler并将其传递给我们的服务器。

HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] {servletContextHandler});
server.setHandler(handlers);

我们已经准备好一切(Yaaaay:D)。 让我们启动服务器:

server.start();
server.join();

现在,它在端口8080上运行。

from: https://dev.to//funcke/web-services-in-java-1-configure-the-server-1kh7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值