问题标签 [servlet-container]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1820 浏览

java - Tomcat 如何在同一个 servlet 容器中为不同的应用程序提供服务?

我的问题是基于对 webserver - servlet 容器如何交互的理解。因此,如果我的基本理解有误,请纠正我。

  1. 考虑进来一个请求:www.bank.com/credit-cards.

  2. 一旦 Tomcat 服务器收到请求,它就会将其转发给 servlet Container映射web.xml/credit-cards上面传入 URI 的

  3. Servlet Container 执行实例化 servlet 的例程(如果这是第一个请求)。如果没有,它将Thread为此请求创建一个并将其交给 Servlet,由它处理生成响应。Tomcat 然后将响应返回给客户端浏览器。

  4. 现在假设我有另一个请求www.bank.com/accounts。这由同一服务器中的不同应用程序提供服务。它不是同一个应用程序中的不同 servlet。

  5. 现在如何保存 url 映射?服务器如何知道它应该将请求转发到哪个应用程序?服务器不保存任何描述符文件。应用程序 1 和应用程序 2 具有将传入 url 映射到 servlet 的 web.xml 文件。所有的 URL 映射和 servlet 是否都在服务器的某个地方注册以供查找?

  6. 我想每个应用程序都应该有自己的容器。也就是说,在上述情况下将有两个 servlet 容器。

  7. 这是一个常见的场景吗?我不知道任何使用 servlet/JSP 在服务器中保存多个应用程序的真实世界示例(如果两个请求来自相同或不同的应用程序,用户可能无法区分)

0 投票
1 回答
4960 浏览

java - 我应该在生产中运行没有 servlet 容器的 Jenkins,即使用 java -jar jenkins.war

我是 Java 和 Java Web 应用程序的新手。我试图理解为什么我应该使用像 Tomcat 这样的 Java 应用程序服务器,而不是从命令行运行它。

  • 我应该在生产中运行没有 servlet 容器的 Jenkins,即使用java -jar jenkins.war吗?
  • Tomcat更适合生产环境吗?
  • 还有其他优点吗?

请告诉我为什么在 servlet 容器中运行应用程序很重要。

0 投票
3 回答
604 浏览

java - WAR 共享的容器级版本库

在 Java servlet 容器中(最好是 Tomcat,但如果这可以在不同的容器中完成,那就这么说吧)我想要理论上可行的东西。我的问题是是否存在支持它的工具,如果有的话,有哪些工具(或者我应该进一步研究哪些名称)。

这是我的问题:在一个 servlet 容器中,我想运行大量不同的 WAR 文件。它们共享一些大型通用库(例如 Spring)。乍一看,我有两个不可接受的选择:

  1. 在每个 WAR 文件中包含大型库(例如 Spring)。这是不可接受的,因为它会加载大量的 Spring 副本,耗尽服务器上的内存。

  2. 将大型库放在容器类路径中。现在所有 WAR 文件共享一个库实例(很好)。但这是不可接受的,因为我无法在不一次升级所有 WAR 文件的情况下升级 Spring 版本,而且如此大的更改几乎是不可能的。

不过,理论上,有一种替代方案可以奏效:

  1. 将大型库的每个版本放入容器级类路径中。做一些容器级别的魔法,以便每个 WAR 文件声明它希望使用的版本,并且它会在其类路径中找到它。

“魔术”必须在容器级别完成(我认为),因为这只能通过使用不同的类加载器加载库的每个版本来实现,然后调整每个 WAR 文件可见的类加载器。

那么,你听说过这样做吗?如果是这样,怎么做?或者告诉我它叫什么,以便我进一步研究。

0 投票
1 回答
1181 浏览

java - Quartz Scheduler - 在 Tomcat 或应用程序 jar 中运行?

我们有一个 Web 应用程序,它通过在 Jersey/Tomcat/Apache/PostgreSQL 上运行的 RESTful Web 服务接收传入数据。除了这个 Web 服务应用程序之外,我们还有许多需要执行的重复任务和计划任务。例如,以不同的时间间隔清除不同类型的数据,按不同的时间表从外部系统中提取数据,以及在指定的日期和时间生成报告。

所以,在阅读了 Quartz Scheduler 之后,我发现它看起来很合适。

我的问题是:我应该将我的基于 Quartz 的调度应用程序设计为在 Tomcat 中运行(通过 QuartzInitializerListener),还是将其构建到一个独立的应用程序中作为 linux 守护程序运行(例如,通过 Apache Commons Daemon 或 Tanuk Java Service Wrapper)。

一方面,我觉得使用 Tomcat 来托管一个不适合接收 http 调用的应用程序是违反直觉的。另一方面,我之前没有使用过 Apache Commons Daemon 或 Java Service Wrapper,所以在 Tomcat 中运行可能是阻力最小的路径。

我应该注意这两种方法是否有任何显着的好处或危险?我们的核心模块已经处理了数据访问、日志记录等,所以我认为这些服务并不是一个重要因素。

我们的调度将是数据驱动的,因此我们基于 Quartz 的调度器将从 PostgreSQL 中读取相关数据。但是,如果我们在 Tomcat 中运行调度应用程序,是否可以/合理地通过对 Tomcat 的 http 调用向我们的应用程序发送消息?最后,由于我们的工作将由我们现有的应用程序数据驱动,我认为不需要 Quartz JDBCJobStore。

0 投票
1 回答
3849 浏览

java - Netbeans 不会部署到 Tomcat

我正在努力让我的 Netbeans IDE 将我的 Java Web 项目部署到 tomcat 服务器(我通常使用 Eclipse)。我已经在 Netbeans (8.0.1) 中设置了 tomcat 服务器 (7.0.55),并且可以启动和停止服务器。不幸的是,当我尝试部署任何应用程序时,我收到此错误:

我检查了所有的 tomcat 日志(catalina.out、localhost 等),但它们没有揭示导致此错误的原因。我可以在日志中看到服务器启动发生,但是部署失败。目前我只部署一个非常简单的 Java Web 应用程序(基本上是最初创建的)。

谁能指出我正确的方向或告诉我在哪里可以找到更多调试输出?在过去的几个小时里,我在谷歌上搜索了这个问题,但没有运气。谢谢。

0 投票
4 回答
3047 浏览

java - doGet or doPost method invocation

How does the servlet container know whether to call doGet or doPost method.

When I make a get request doGet is called, When I make a post request doPost is called , but where is the logic to decide this .

0 投票
1 回答
1975 浏览

spring-mvc - 带有 REST api 的 Web 服务器 - Spring Boot - 多个 servlet 容器

在我的架构中,我使用 spring 作为 web 服务器,提供静态 html 和 javascript 页面,以及作为 rest api。目前,我的 spring 应用程序侦听端口 8080。尽管我可以轻松地将其更改为端口 80,但我认为 api 和 Web 服务器应该在不同的端口上,并且认为没有理由创建一个单独的应用程序来提供静态内容,哪个弹簧可以轻松做到。

我确实查看了在线和其他一些问题,发现spring可以使用多个servlet容器监听两个不同的端口。有些问题甚至说所有要做的就是创建多个应用程序上下文。

但是,没有提及如何做到这一点,至少对我来说,这并不是微不足道的,尤其是在使用 Spring Boot 时。

  1. 如何创建多个 servlet 容器或多个应用程序上下文,以便侦听多个端口(80 和 8080)?
  2. 设置这些之后,我如何控制哪个 servlet 做什么?也就是说,哪一个服务于静态页面,哪一个服务于其余的 api?

-

编辑

以下问题似乎与我自己的问题相匹配,但如前所述,我不知道如何实现这一点,特别是在使用 Spring Boot/Annotations 时,而不是 xml 配置。

使用 spring boot 配置多个 servletcontainers/servlet

编辑 (2)

这种事情的一个很好的用例是让您的网站启用 ssl,但不是必需的。也就是说,您希望通过 potr 443 启用 ssl,但允许用户通过端口 80 使用不安全的访问。

编辑 (3)

我不知道 Dave Syer 的答案是否是最好的,但它似乎有效。请注意,与他的方法不同,我使用 servlet 容器定制器来更改端口,但我仍然使用第二个线程并创建第二个 spring 应用程序。

编辑(答案)

Dave Syer 的原始答案是有效的,但这不是我想要的。正如他的评论之一所述,如果您使用的是 Tomcat servlet 容器(spring 的默认值)或码头的 Handler,答案是创建第二个 Connector 对象。

我使用了类似以下的东西:

0 投票
0 回答
450 浏览

java - Spring mvc / Tomcat Servlet Container:多线程初始化(以及谁产生了它们?)

我尝试在网上查找,发现只有少数地方说spring实际上是多线程的。即使是那些,似乎也暗示它只是使用多线程 servlet 容器(据我所知,单线程 servlet 容器大多已被弃用,因此它们现在都是多线程的)。

我希望有人能澄清和验证这些信息;多线程真的来自servlet容器而不是spring吗?

更重要的问题是,如何初始化每个线程的数据?作为我的数据库连接管理的一部分,我正在使用一个库,它要求我在每个线程中初始化数据。

目前,我在每次调用该库时检查一个值,以了解初始化它。但我更喜欢在每次线程启动时简单地初始化它。

我相信这应该是可能的;毕竟,有人正在创建那些不断调用我的 spring 控制器的线程。

ps 我在spring中使用的是默认的servlet容器,即Tomcat。我还尝试在 tomcat 中快速搜索每个线程的初始化和多线程,但找不到任何关于何时实际产生新线程的明确信息,或者有关正在使用的线程池的一些信息。我可能是错的,多线程是

0 投票
0 回答
2144 浏览

java - 无法处理 ServletContainerInitializers 在 URL [] 中找到的 JAR

我正在从 Tomcat 7 -> Tomcat 8 升级服务,而我刚刚遇到这个问题,我有点不知所措。

这是堆栈跟踪:

我知道整个“URL []”和“名称为 [{1}] 的上下文”看起来很糟糕,但我不知道为什么,也不知道这些值是如何按原样设置的。任何人都可以请我指出发生了什么的正确方向吗?

0 投票
4 回答
5631 浏览

java - 如何将部署相关参数传递给 webapp

在我工作的项目中,部署参数(例如存储路径或数据库登录名)通常通过存储在 war 文件中的参数文件给出。

我发现这不合适,因为每次将 webapp 打包用于不同的部署(开发与产品,执行计算机的更改)时,都需要更改这些值。源代码被版本化,这使得它更加麻烦。

是否有更好的选择来传递上面列出的参数?

更好,我的意思是:

  • 实用:易于设置、更改和向他人解释
  • 与战争分离
  • 尽可能独立于 web 容器(如果依赖,我在 prod 中使用 tomcat)

编辑

我选择了@aksappy 的答案来奖励答案中所做的工作,因为它提供了几种使用标准工具的方法。但是,根据上下文,我可以寻求任何其他解决方案: