我如何检测tomcat servlet请求的客户端已经断开? 我读过,我应该做一个response.getOutputStream()。print(),然后一个response.getOutputStream()。flush()并捕获一个IOException,但有没有办法检测到这种情况,而不写任何数据? 编辑 : servlet发出的数据stream不一定结束,但不一定有任何数据stream过(这是一个实时事件stream)。 我需要实际检测客户端何时断开连接,因为在这一点上我需要做一些清理工作(释放资源,等等)。 如果我有HttpServletRequest可用,将试图读取,抛出一个IOException,如果客户端断开连接?
你如何正确处理在servlet中遇到的错误? 现在,我inheritance的应用程序(仅使用普通的JSP / Servlet)有一个名为Controller的超类,它扩展了HttpServlet ,并且所有其他的servlet都从中扩展而来。 在那个Controller类中是一个try和catch块,如下所示: try { // execute doPost or doGet here } catch (Exception e) { // show a generic error page } 这是做这件事的正确方法吗? 它似乎笨重,似乎并不总是工作。 我只是一个实习生,所以我没有太多的经验。 任何build议? 我正在努力使该应用程序健壮..
在我的web应用程序中,当用户login时,我将他的Id添加到servlet中的有效ID的向量中,当他注销时,我从向量中删除了他的Id,以便可以看到有多less当前用户处于活动状态用户忘记注销,我的servelt生成的html有: <meta http-equiv="Refresh" content="30; url=My_Servlet?User_Action=logout&User_Id=1111"> 在标签中自动登出他。 但是我注意到很多用户永远都不会忘记。 我发现,为什么通过closures他们的浏览器,他们从来没有手动或自动注销,所以他们的用户ID将永远不会从有效的用户IDvector中删除。 所以,我的问题是:如何检测用户closures他们的浏览器,所以我的servlet可以从vector中删除他们的Id? 我在隧道尽头看到了一些灯光,但仍然有一个问题,我的程序有这样的情况: 活动用户列表: User_1 : Machine_1 [ IP_1 address ] User_2 : Machine_2 [ IP_2 address ] User_3 : Machine_3 [ IP_3 address ] … 我怎么知道,从会话监听器,哪个用户的会话已经结束,因此将他从我的列表中删除? 我希望当会话结束时,HttpServlet的destroy()方法将被调用,我可以在那里删除用户标识,但是当用户closures浏览器时它不会被调用,为什么呢? 当会话closures时,HttpServlet中还有其他的方法吗?
我正在用最好的性能写一个servlet响应的图像。 任何build议,做法,经验?
我注意到,当试图安装我在docker上运行的JSF 2 webapp时,我有这个错误: java.lang.IllegalStateException:应用程序在启动时未正确初始化,无法findFactory:javax.faces.context.FacesContextFactory 这很容易通过添加到我的web.xml解决 <listener> <listener-class> com.sun.faces.config.ConfigureListener </listener-class> </listener> 我试着寻找一个详细的解释,但徒劳无功 jetty-maven-plugin:8.0.3.v20111011:run + jdk 7 + eclipse indigo 这里是我的maven依赖: <dependencies> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.faces</artifactId> <version>2.1.3</version> <scope>compile</scope> </dependency> </dependencies> 这是我的web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>Basic Setup Web Application</display-name> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> […]
我有一个web.xml文件的内容: <servlet> <servlet-name>servlet1</servlet-name> <servlet-class>org.mycompany.test1</servlet-class> </servlet> <servlet> <servlet-name>servlet2</servlet-name> <servlet-class>org.mycompany.test2</servlet-class> </servlet> <servlet-mapping> <servlet-name>servlet1</servlet-name> <url-pattern>/path/test</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>servlet2</servlet-name> <url-pattern>/path/test/*</url-pattern> </servlet-mapping> 我试过请求 …/path/test/abc …/path/test 这两个请求都由Servlet2处理。 为什么? UPDATE 谢谢你们的帮助。 我意识到,行为取决于servlet映射声明的顺序。 我试过这个web.xml <servlet> <servlet-name>servlet1</servlet-name> <servlet-class>org.mycompany.test1</servlet-class> </servlet> <servlet> <servlet-name>servlet2</servlet-name> <servlet-class>org.mycompany.test2</servlet-class> </servlet> <servlet> <servlet-name>servlet3</servlet-name> <servlet-class>org.mycompany.test3</servlet-class> </servlet> <servlet> <servlet-name>servlet4</servlet-name> <servlet-class>org.mycompany.test4</servlet-class> </servlet> <servlet-mapping> <servlet-name>servlet1</servlet-name> <url-pattern>/path/test</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>servlet2</servlet-name> <url-pattern>/path/test/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>servlet3</servlet-name> <url-pattern>/path/*</url-pattern> </servlet-mapping> <servlet-mapping> […]
我正在考虑在我的J2EE应用程序中实现Front Controller。 你能不能build议几个链接(与源代码示例)和任何标准遵循相同? 最好的祝福
我正在玩JAX-RS,部署在Tomcat上。 这基本上是: @Path("/hello") @Produces({"text/plain"}) public class Hellohandler { @GET public String hello() { return "Hello World"; } } 有没有什么办法可以在我的JAX-RS资源中获得ServletContext ?
到目前为止, <mvc:annotation-driven />对我造成了很大的麻烦,所以我想摆脱它。 虽然春季框架文档清楚地说明它应该做什么,但实际上标签列表<mvc:annotation-driven />缺乏。 所以我坚持删除<mvc:annotation-driven /> ,现在得到错误 WARN osweb.servlet.PageNotFound – 在名为“workoutsensor”的DispatcherServlet中找不到具有URI的HTTP请求的映射[/ webapp / trainees] 对于所有的Url应该由控制器类来解决(在这种情况下: ./trainees )。 任何build议,我可以阅读更多关于<mvc:annotation-driven /> ? 我非常想知道<mvc:annotation-driven />代表了什么标签。
前段时间,我读了一篇文章,预计在Servlet API 3.0中。 我记得我读过,你可以将一些.jsp文件保存在/WEB-INF/lib/somelib.jar/META-INF/web/ .jsp文件中 ,这些资源将暴露给Web应用程序的上下文根。 我刚刚安装了Tomcat7来尝试,但我没有发现任何文档,我可以把一些networking资源在jar文件。 这个特性是否存在于servlet api 3.0中? 这个function是否存在于tomcat 7.0中? 在/lib/*.jar文件中是否有另一种方法来使用jsp文件?