Tag: tomcat

如何构建同一个加载不同类加载器的两个实例?

我有两个不同的webapps,每个都加载相同的A类和不同的类加载器。 当我在会话中放入一个实例然后从另一个webapp获取它时, ClassCastException 。 例如,在webapp A中,我在会话中存储a ,然后在webapp B中,我从会话中获取a并将其转换为A, ClassCastException 。 有办法解决这个问题吗?

在TomEE +上使用JAX-RS时,“没有资源方法”

使用库存TomEE +,我无法获得简单的JAX-RS资源。 我不断得到一个错误: Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher WARNING: No resource methods have been found for resource class com.tensorwrench.test.BaseResource Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher WARNING: No resource methods have been found for resource class com.tensorwrench.test.BaseResource Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher WARNING: No resource methods have been found for resource […]

我们在哪里将Servlet放在Tomcat的目录结构中?

我复制了一个从Web获得的HelloServlet应用程序并将其放在ROOT文件夹中。 我跑了服务器,它不起作用。 怎么了? 我认为它关于Java类的位置。

Servlet缓冲响应尽管调用flush()

我们有一个系统,客户端发出HTTP GET请求,系统在后端进行一些处理,压缩结果,并将其发送到客户端。 由于处理可能需要一些时间,因此我们将其作为包装response.getOutputStream()的ZipOutputStream发送。 但是,当我们在第一个ZipEntry有非常少量的数据,而第二个条目需要很长时间时,客户端使用的浏览器会超时。 我们已经尝试刷新流缓冲区,但是在向流写入至少1000个字节之前,似乎没有响应发送到浏览器。 奇怪的是,一旦发送了前1000个字节,后续的刷新似乎工作正常。 我尝试将代码拆解为裸露的示例: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { ZipOutputStream _zos = new ZipOutputStream( response.getOutputStream()); ZipEntry _ze = null; long startTime = System.currentTimeMillis(); long _lByteCount = 0; response.setContentType(“application/zip”); while (_lByteCount < 2000) { _ze = new ZipEntry("foo"); _zos.putNextEntry( _ze ); //writes 100 bytes and then […]

Tomcat和JAXB内存泄漏

我已经追了好几天了。 我们在我们的应用程序中使用JAXB,sun实现。 当停止Tomcat(6或7)时,catalina日志文件中记录了严重的内存泄漏,列出了我们应用程序中的所有JAXB类,两个不同的包中有两个类。 我经历过很多google和Stack溢出链接。 我使用过JProfiler,它告诉我Tomcat在不使用它时会持有Enums,但这不应该是问题。 marshaller或unmarshaller的所有实例都是在本地创建的,并且对于激进的GC设置为null。 我确保在销毁servlet时JAXBcontext为null,并且在我的contextDestroyed中运行System.gc(); 已被建议避免错误。 但仍然会记录错误。 我在Tomcat演示文稿中看到这是已知的错误,因为JAXBContext.newInstance()创建了一个JarURLConnection锁,显然这可以通过禁用缓存来避免,但这对我没有任何作用。 http://people.apache.org/~markt/presentations/2010-11-04-Memory-Leaks-60mins.pdf 关于如何在Tomcat上运行的JAXB中修复此内存泄漏的任何其他建议。 这是错误日志: SEVERE: The web application [/myApplication] created a ThreadLocal with key of type [com.sun.xml.bind.v2.ClassFactory$1] (value [com.sun.xml.bind.v2.ClassFactory$1@6a724da1]) and a value of type [java.util.WeakHashMap] (value [{class my.package.model.layout.Element=java.lang.ref.WeakReference@7646bb9f, class my.package.model.layout.ScriptBeforeFileID=java.lang.ref.WeakReference@1dc80063, class my.package.model.layout.OutputProperty=java.lang.ref.WeakReference@359172db, class my.package.model.layout.Data=java.lang.ref.WeakReference@600ba356, class my.package.model.layout.InputProperty=java.lang.ref.WeakReference@1c10945d, class my.package.model.layout.ToPort=java.lang.ref.WeakReference@47c7410, class my.package.model.layout.ConfigFile=java.lang.ref.WeakReference@6a7c8bd, class my.package.model.layout.LayoutInstanceID=java.lang.ref.WeakReference@716bf3b4, class my.package.model.layout.ScriptAfterFunction=java.lang.ref.WeakReference@664ce898, class be.securit.trustbuilder.config.model………}]) […]

Eclipse和Tomcat:如何指定项目中提供的文件夹?

我正在使用Eclipse 3.4和Tomcat 5.5,并且我已经设置了动态Web项目。 我可以从http://127.0.0.1:8080/project/访问它,但默认情况下它提供WebContent文件夹中的文件。 我想要提供的真实文件可以在名为“share”的文件夹下找到。 这个文件夹来自CVS所以我想用它给定的名称而不是重命名它。 如何才能做到这一点?

AppEngine响应时间差异

我正在考虑使用AppEngine来部署我正在开发的webapp。 作为我对AppEngine平台的调查的一部分,我一直在检查简单请求的响应时间。 为此,我编写了一个简单的PING servlet: @SuppressWarnings(“serial”) public class Ping extends HttpServlet { @Override public void doGet(@SuppressWarnings(“unused”) HttpServletRequest xiReq, HttpServletResponse xiResp) throws IOException { xiResp.setContentType(“text/plain”); xiResp.getWriter().println(“PONG”); } } 然后我编写了一个java程序,每秒向该servlet发出一个请求,并计算完成请求所需的时间。 获取页面内容使用以下代码。 private static String getPageContent(String url) throws IOException { String result = null; URL reqURL = new URL(url); URLConnection connection = reqURL.openConnection(); connection.setConnectTimeout(30 * 1000); connection.setReadTimeout(30 * 3000); […]

Jersey java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer

我正在尝试使用jersey库与Tomcat和Eclipse建立Web服务。 这是我的服务类: package com.gontuseries.university; import javax.ws.rs.core.MediaType; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @Path(“/university”) public class UniversityRestWs { @GET @Produces(MediaType.TEXT_HTML) public String getHtmlUniversityInfo(){ return “test”; } @GET @Produces(MediaType.TEXT_PLAIN) public String getTextUniversityInfo(){ return “test”; } } 这是文件web.xml Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages com.gontuseries.university Jersey REST Service /rest/* 当我测试我的服务时,我得到java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer我从https://jersey.java.net/download.html下载了jersey 有人能帮我吗? 谢谢

嵌入式Tomcat 7与Tomcat 6相比较慢

我最近开始嵌入Tomcat 7进行集成测试,而不是Tomcat 6,因为我需要7个function中的一些,它是我们的目标容器。 与Tomcat 6嵌入式相比,性能非常慢。 启动服务器大约需要20秒。 这是我正在使用的代码: Tomcat tomcat = new Tomcat(); tomcat.setPort(port); tomcat.setSilent(true); tomcat.setBaseDir(“.”); tomcat.getHost().setAppBase(webappDir); tomcat.addWebapp(context, “”); tomcat.start(); 有没有其他人经历过这个或者有提高性能的建议? 我在Windows 7,Linux Mint和Ubuntu上运行测试。

无法访问的对象不是从堆中收集的垃圾

我在JVM堆(Java 1.7)中遇到了无法访问的对象。 正如你从图片中看到的那样(图片上的所有类都无法访问),我们有超过74%的对象没有参考,所以它应该被收集起来。 这个状态在我们的tomcat 7服务器上运行3周之后,只运行探测监控应用程序,tomcat管理器和我们的webapp,这可能是问题的根源。 我们的应用程序基于JSF 1.2,在客户端上保存状态,如下图所示 – 主要使用ViewSaveState的char数组。 当我从jVisualVM手动运行GC时,它会删除所有无法访问的对象,并且在堆达到其限制的3周之前一切正常。 如何清除某些物体? 我们的JVM参数 -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=29001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname= -Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true -Xms320m -Xmx2500m -XX:MaxPermSize=500m -XX:PermSize=96m -verbose:gc -Xloggc:/var/log/gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xdebug -Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=n -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC OutOfMemoryError的STACKTRACES 我认为原因隐藏在其他地方,堆栈跟踪来自app的不同部分。 可能存在一些泄漏,但堆栈跟踪仅报告最后一个组件,该组件在没有任何内存的情况下及时声明了一些内存。 java.lang.OutOfMemoryError: Java heap space at java.util.LinkedHashMap.createEntry(LinkedHashMap.java:442) at java.util.HashMap.addEntry(HashMap.java:888) at java.util.LinkedHashMap.addEntry(LinkedHashMap.java:427) at java.util.HashMap.put(HashMap.java:509) at sun.util.resources.OpenListResourceBundle.loadLookup(OpenListResourceBundle.java:134) at sun.util.resources.OpenListResourceBundle.loadLookupTablesIfNecessary(OpenListResourceBundle.java:113) at sun.util.resources.OpenListResourceBundle.handleGetObject(OpenListResourceBundle.java:74) at sun.util.resources.TimeZoneNamesBundle.handleGetObject(TimeZoneNamesBundle.java:75) at java.util.ResourceBundle.getObject(ResourceBundle.java:389) […]