Tomcat是Web服务器还是应用程序服务器?
与使用NIO框架(例如和)来托管JAX-RS RESTful服务相比,使用Servlet容器(例如Apache Tomcat)的优缺点是什么?NettyGrizzly
我将使用Java开发RESTful应用程序.Java具有用于构建RESTful服务的JAX-RS API(JSR 331和JSR 339).正如您在此处所看到的,它有不同的实现方式.所有这些都实现了JAX-RS API,因此在它们之间进行切换应该很容易(至少在理论上).Jersey是参考实现,我现在选择它.
对于客户端部分,我将使用angularJS+ bootstrap(所以只是html/css/js而没有jsp页面).
只是为了记录,我说我PostgreSQL用作我的数据库和EclipseLink我的JPA(ORM).
在这里,我想我只是错过了一个部分,那就是服务器部分(JAX-RS服务的主机).AFAIK我可以使用一个Servlet容器(例如Apache tomcat)或定制服务器(使用NIO framwroks如Netty和Grizzly,或也许NIO.2其是JDK 7的一部分)用于这一目的.
但我不知道应该使用哪一个.我认为这两种解决方案之间的利弊有助于我选择一种解决方案.
我有以下代码行:
servletContext.getRealPath("resources/images/video_icon.png")
Run Code Online (Sandbox Code Playgroud)
我使用jetty(使用maven插件)运行应用程序这段代码行返回corect值.
当我使用tomcat 8运行应用程序时(在tomcat 7上它可以工作) - 应用程序返回null.
申请结构:
1.怎么解决?
为什么会这样?
我正在研究servlet技术,其中我听到了术语servlet容器和jsp容器,我感到困惑,两者是否相同.
jsp页面由jsp容器处理,但servlet由servlet容器处理.
在搜索我在servlet容器中找到的某个站点时,有一个名为page compiler的文件,它在jsp请求到来时将servlet容器转换为jsp contaner.
所以我想知道,实际上转换发生在这两个或两者之间是相同的事情,可以互换使用.
谢谢
在我工作的项目中,部署参数——例如存储路径或数据库登录——通常通过参数文件给出,该文件存储在 war 文件中。
我发现这不合适,因为每次为不同的部署(开发与生产,更改执行计算机)打包 webapp 时都需要更改这些值。源代码被版本化,这让它更加麻烦。
有没有更好的选择来传递上面列出的参数?
更好,我的意思是:
编辑
我选择了@aksappy的答案来奖励答案中所做的工作,因为它提供了几种使用标准工具的方法。但是,根据上下文,我可以采用任何其他解决方案:
我正在阅读文档,getRealPath(String s)当我阅读本声明时,我感到困惑
返回包含给定虚拟路径的实际路径的String.例如,路径
/index.html返回服务器文件系统上的绝对文件路径将由请求提供服务http://host/contextPath/index.html,其中contextPath是此ServletContext的上下文路径.
什么是虚拟路径?假设我在我的部署环境中,当我说getRealPath("index.html")这通常指向WEB-INF目录时?或者getRealPath()是否开始读取根目录(在Web应用程序的文件夹名称内)?
我的问题很简单.我希望在/static/*上下文中提供静态资源,但是我的特定servlet服务/*上下文.既然/static/*是/*它的一个子集不起作用.我的web.xml看起来像这样:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>template-guice-jersey-tomcat</display-name>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- set up Google Guice Servlet integration -->
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>de.danbim.templateguicejerseytomcat.GuiceServletConfig</listener-class>
</listener>
</web-app>
Run Code Online (Sandbox Code Playgroud) 我是Java和Java Web应用程序的新手.我试图理解为什么我应该使用像Tomcat这样的Java应用服务器,而不是从命令行运行它.
java -jar jenkins.war?请告诉我为什么在servlet容器中运行应用程序很重要.
在一个Java servlet容器中(最好是Tomcat,但是如果这可以在另一个容器中完成,那么这样说)我希望理论上可行的东西.我的问题是,是否存在支持它的工具,以及是否存在哪些工具(或者我应该进一步研究哪些名称).
这是我的问题:在一个servlet容器中,我想运行大量不同的WAR文件.它们共享一些大型公共库(例如Spring).乍一看,我有两个不可接受的选择:
在每个WAR文件中包含大型库(例如Spring).这是不可接受的,因为它会加载大量的Spring副本,耗尽服务器上的内存.
将大型库放在容器类路径中.现在所有WAR文件共享一个库实例(好).但这是不可接受的,因为我无法在不升级所有WAR文件的情况下升级Spring版本,并且如此大的改变难以实现.
但理论上,有一种替代方案可行:
"魔术"必须在容器级别完成(我认为),因为这只能通过使用不同的类加载器加载库的每个版本来实现,然后调整每个WAR文件可见的类加载器.
所以,你有没有听说过这样做?如果是这样,怎么样?或者告诉我它叫什么,这样我就可以进一步研究.
我知道您可以构建一个WAR文件来部署到应用程序服务器,但是在运行主Application类时会创建什么样的服务器?
/**
* Main method, used to run the application.
*/
public static void main(String[] args) throws UnknownHostException {
SpringApplication app = new SpringApplication(Application.class);
SimpleCommandLinePropertySource source = new SimpleCommandLinePropertySource(args);
addDefaultProfile(app, source);
Environment env = app.run(args).getEnvironment();
log.info("Access URLs:\n-----------------------------------------------------\n\t" +
"Local: \t\thttp://127.0.0.1:{}\n\t" +
"External: \thttp://{}:{}\n-----------------------------------------------",
env.getProperty("server.port"),
InetAddress.getLocalHost().getHostAddress(),
env.getProperty("server.port"));
}
Run Code Online (Sandbox Code Playgroud) 为什么Tomcat支持Hibernate?Hibernate是JPA的实现,但Tomcat不支持Java EE.那么为什么我们可以在Tomcat中使用Hibernate呢?
java ×8
tomcat ×7
servlets ×3
classloader ×1
deployment ×1
java-ee ×1
jenkins ×1
jhipster ×1
nio ×1
path ×1
rest ×1
spring-boot ×1
tomcat8 ×1
webserver ×1