是否有任何Tomcat API或配置可以告诉应用程序(可能在启动时),它在没有请求的情况下运行的端口是什么?
想象一下,有两个Web应用程序在同一个Tomcat中运行,其中一个需要从另一个调用Web服务.我们不希望请求离开Tomcat(如果您使用Apache服务器名称或绝对URL,请求将退出并再次返回,它可以转到任何实例)并返回.为此,我知道机器名称但无法获取端口号.我知道我可以硬编码这些信息,但我不想这样做,因为我希望我的war文件与应用服务器无关.
我知道如果我们有HTTPServletRequest,我们可以找到它
这仅适用于Tomcat 6,不适用于Tomcat 7
我安装的Apache Tomcat 6.0到一个C:/Program Files文件夹,我设置环境变量JAVA_HOME和CATALINA_HOME,但是当我使用启动服务器startup.bat,我得到的错误:
CATALINA_HOME环境变量未正确定义.
我的CATALINA_HOME环境变量设置为CATALINA_HOME=C:\Program Files\apache-tomcat-6.0.35.
我做错了什么?
我正在编辑直接驻留在内部的JSP文件tomcat/webapps/myapp/WEB-INF,但要查看更改,我必须重新启动服务器.据我所知,JSP更改不需要您重新启动服务器.我找到的与自动重新加载有关的唯一配置是reloadable ="true"
如果您希望Catalina监视/ WEB-INF/classes /和/ WEB-INF/lib中的类以进行更改,则设置为true;如果检测到更改,则自动重新加载Web应用程序.
我在中使用了这个属性context.xml,但问题仍然存在.在没有重新启动的情况下,如果没有检测到JSP文件中的更改,可能是什么原因?
@Bozho:
这是摘自web.xml.我需要改变什么吗?
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud) 从Eclipse运行我的WebApp项目时,它大多数时候都能正常运行.但如果错误地停止服务器,我会在"控制台"视图中将其删除,而不是从"服务器"视图中"停止"服务器.在运行干净的项目时我得到了这个
java.lang.NullPointerException
at org.eclipse.wst.common.componentcore.internal.util.VirtualReferenceUtilities.getDefaultProjectArchiveName(VirtualReferenceUtilities.java:81)
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getJavaClasspathReferences(J2EEModuleVirtualComponent.java:332)
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getNonManifestRefs(J2EEModuleVirtualComponent.java:236)
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:160)
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:208)
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:201)
at org.eclipse.jst.common.internal.modulecore.SingleRootUtil.hasConsumableReferences(SingleRootUtil.java:217)
at org.eclipse.jst.common.internal.modulecore.SingleRootUtil.validateSingleRoot(SingleRootUtil.java:165)
at org.eclipse.jst.common.internal.modulecore.SingleRootUtil.isSingleRoot(SingleRootUtil.java:93)
at org.eclipse.jst.common.internal.modulecore.SingleRootExportParticipant.canOptimize(SingleRootExportParticipant.java:84)
at org.eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.canOptimize(FlatVirtualComponent.java:136)
at org.eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.cacheResources(FlatVirtualComponent.java:118)
at org.eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.fetchResources(FlatVirtualComponent.java:101)
at org.eclipse.wst.web.internal.deployables.FlatComponentDeployable.members(FlatComponentDeployable.java:147)
at org.eclipse.wst.server.core.internal.ModulePublishInfo.hasDelta(ModulePublishInfo.java:418)
at org.eclipse.wst.server.core.internal.ServerPublishInfo.hasDelta(ServerPublishInfo.java:443)
at org.eclipse.wst.server.core.internal.Server.hasPublishedResourceDelta(Server.java:1539)
at org.eclipse.wst.server.core.internal.Server$ResourceChangeJob$1.visit(Server.java:214)
at org.eclipse.wst.server.core.internal.Server.visitModule(Server.java:2929)
at org.eclipse.wst.server.core.internal.Server.visit(Server.java:2913)
at org.eclipse.wst.server.core.internal.Server$ResourceChangeJob.run(Server.java:225)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Run Code Online (Sandbox Code Playgroud)
在启动时,我得到了这个
SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Document base D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Webapp does not exist or is not a readable directory
at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4319)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
Run Code Online (Sandbox Code Playgroud)
请帮助从中恢复.
如果我将war文件部署到Tomcat,例如foo-bar-1.1.2.war,我该如何部署它以便将其解压缩到webapps/bar并且其URL根目录为/ bar/...?
我的目的是将war文件保存在webapps服务器及其版本信息中,以便我知道安装了哪个版本,但是它会覆盖以前版本的应用程序.
我可以使用PSI Probe部署war文件.这将允许我为Web应用程序指定目标上下文.但是,这意味着我将丢失war文件名中的任何版本信息.
在给出WAR-File时,如何告诉Tomcat使用特定的上下文路径?
示例:我有一个由maven build创建的war文件,结果文件的名称相当长.所以我不希望tomcat管理器应用程序使用war的文件名作为上下文.
在META-INF中提供context.xml不会产生所需的结果
我还在文档中找到了以下path属性Context:
除非在server.xml中静态定义Context,否则不得设置此字段的值,因为它将从用于.xml上下文文件或docBase的文件名中推断出来.
所以它似乎不是告诉应用程序服务器应该是什么路径的正确方法.
还有什么提示吗?
我正面临一些关于tomcat启动和关闭的问题.
我在用
我使用命令启动tomcat:
$./catalina.sh jpda start
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用命令停止它:
$./catalina.sh stop
Run Code Online (Sandbox Code Playgroud)
并获得以下消息:
SEVERE: Catalina.stop:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:422)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:338)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:416)
Run Code Online (Sandbox Code Playgroud)
我也尝试使用命令停止它:
$./catalina.sh stop -force
Run Code Online (Sandbox Code Playgroud)
但我收到了消息:
Kill failed: $CATALINA_PID not set
Run Code Online (Sandbox Code Playgroud)
然后我再次尝试使用命令启动tomcat:
$./catalina.sh jpda start
Run Code Online (Sandbox Code Playgroud)
在/ logs文件夹中,仅生成catalina.out,并显示以下错误消息:
ERROR: transport error 202: bind failed: Address already in use …Run Code Online (Sandbox Code Playgroud) 如何在Tomcat中确定maxSpare,minSpare和maxThreads,acceptCount等的最佳数量?是否存在最佳实践?
我确实理解这需要基于硬件(例如每个核心),并且只能作为特定硬件上进一步性能测试和优化的基础.
在我的webapp中,我创建了一个ExecutorService使用固定大小的ThreadPool的服务.我ExecutorService在整个应用程序生命周期中重复使用它.
private static ExecutorService pool = Executors.newFixedThreadPool(8);
Run Code Online (Sandbox Code Playgroud)
所有都在Tomcat中运行,它在向下发出错误时给出了以下错误:
appears to have started a thread named [pool-1-thread-1] but has failed to stop it. This is very likely to create a memory leak.
Run Code Online (Sandbox Code Playgroud)
我确实意识到我需要在关闭tomcat之前关闭ExecutorService.Soms SO线程已经谈到了这一点,但我找不到一个干净的方法来处理这个问题.
我是否应该ShutdownHook在线程和执行程序的正常关闭中使用@ Tim-bender ?或者我应该使用CachedThreadPool吗?
我需要在IntelliJ IDEA中为Tomcat6调试Web应用程序.
当我尝试运行我的Web应用程序时,我收到两个错误:
手动启动Apache Tomcat 6服务工作正常.
我应该怎么做才能从Intellij IDEA调试Apache Tomcat 6中的Web应用程序?