Java Servlet不会停止推送通知

我有一个servlet,它将HTML5服务器发送的事件发送到jsp客户端。 servlet每秒向客户端发送一次数据。 jsp客户端实例化一个新的事件源并接收数据。 当窗口即将关闭时,jsp客户端在“beforeunload”事件中关闭eventsource(如下面的代码所示)。 但是,我注意到即使客户端关闭了事件源并且浏览器退出,服务器也会继续发送数据。 至于有关eventsource的文档,使用eventsource.close()足以阻止客户端重新连接到服务器,服务器将停止发送任何进一步的推送通知。 编辑:我在此链接上阅读了StackOverflow 上的类似问题。 但是,答案是在聊天中讨论的,因此无法访问它。 任何人都可以帮助我理解为什么即使在eventsource.close()和浏览器退出后服务器也没有停止发送推送通知? 我是否写了任何其他代码来通知服务器在客户端退出后停止发送数据? 感谢帮助。 这是我简化的服务器代码: import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; /** * Servlet implementation class ServletForSSE */ @WebServlet(“/ServletForSSE”) public class ServletForSSE extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ […]

具有长请求的Apache CXF客户端“连接重置”

我有一个SOAP Web服务。 从SoapUI调用它时,无论消息内容的大小如何,请求都能正常工作。 如果我从Apache CXF客户端代码发出相同的请求,它可以处理小请求,但如果我的消息内容太长,我会得到“连接重置”,但有以下exception: Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at com.sun.net.ssl.internal.ssl.InputRecord.readFully(Unknown Source) at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read1(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at java.net.HttpURLConnection.getResponseCode(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1606) at […]

RTSP服务器java实现问题:(

我正在编写RTSP服务器并遇到一些问题。 我正在使用VLC作为客户端。 服务器从客户端(VLC播放器)接收OPTIONS,DESCRIBE,SETUP和PLAY命令以及对该命令的回答。 通过SETUP命令,客户端发送端口号,我正在使用该端口发送数据。 当我的服务器收到PLAY命令时,它会发送答案并开始传输数据。 我正在使用客户端端口创建两个DatagramSocket实例。 我正在尝试流式传输mp4文件。 我正在使用mp4parse java库来获取音频和video跟踪数据流。 所以,当我点击VLC上的播放时它正在连接并开始等待数据,几秒钟后我在VLC消息中收到了这条消息: live555 warning: no data received in 10s. Switching to TCP 这是我的SDP数据: v=0 o=- 0 0 IN IP4 127.0.0.1 m=video 0 RTP/AVP 96 b=AS:1633 a=rtpmap:96 H264/90000 a=control:trackID=65536 a=fmtp:96 profile-level-id=64001F; packetization-mode=1; sprop-parameter-sets=Z2QAH6zZgFAFuhAAAAMAEAAAAwMg8YMZoA==,aOl7LIs= a=framesize:96 1280-720 m=audio 0 RTP/AVP 97 b=AS:129 a=rtpmap:97 mpeg4-generic/48000/2 a=control:trackID=65537 a=fmtp:97 profile-level-id=41; config=1190; streamType=5; mode=AAC-hbr; […]

如何使用Grizzly / Jersey获取客户端地址以进行日志记录?

我正在使用Grizzly来提供Jersey应用程序,同时使用Logback来满足我的日志记录需求。 请注意,这里没有涉及Servlet ,我使用一段代码“手动”启动所有内容,如下所示: final URI uri = /* this is a configuration option */ this.server = new HttpServer(); final NetworkListener nl = new NetworkListener( “grizzly”, uri.getHost(), uri.getPort()); server.addListener(nl); final GuiceComponentProviderFactory gcpf = new GuiceComponentProviderFactory(rc, inj); final HttpHandler processor = ContainerFactory.createContainer( HttpHandler.class, rc, gcpf); this.server.getServerConfiguration().addHttpHandler( processor, uri.getPath()); server.start(); 现在我想使用Logback的MDCfunction使客户端的套接字地址在日志记录中可见。 为此,我需要一些地方来连接一个HTTP处理的监听器,它会收到有关传入请求的通知(我可以将地址放入MDC)以及请求完成时(因此我可以清理MDC)。 我遵循的一种方法是使用Jersey连接Container*Filter实例,如下所示: class MdcFilter implements ContainerRequestFilter, ContainerResponseFilter […]

Hibernate中的错误简单示例初学者级别

为了学习hibernate,我写了两个练习的例子。 但是,它们都有如下错误: 无法创建sessionFactory object.java.lang.NoClassDefFoundError:javax / transaction / SystemException线程“main”中的exceptionjava.lang.ExceptionInInitializerError由以下引起:java.lang.NoClassDefFoundError:java.lang.Class.forName0中的javax / transaction / SystemException位于org.jboss.logging.logMer.logM的上的java.lang.Class.forName(未知来源)的(本机方法)org.jboss.logging.Logger.getMessageLogger(Logger.java:2214) at com.example.ManageEmployee.main上的org.hibernate.cfg.Configuration。(Configuration.java:184)(ManageEmployee.java:17) 基本上,我首先编写POJO,并使用eclipse生成hbm.xml。 之后,我编写了管理数据库的主要function。 我试过两次,但遇到了同样的问题。 有人可以给我建议解决这个问题吗? 在此之前,使用JDBC构建项目,但这太复杂了。 所以我需要学习hibernate。 谢谢。 补充(这个hibernate示例项目中的详细信息): 我的Eclipse项目名称: HibernateExa hibernate.cfg.xml : com.mysql.jdbc.Driver hibernateTest jdbc:mysql://localhost:3306/hibernatetest; hibernater hibernatetest org.hibernate.dialect.MySQLDialect create org.hibernate.cache.HashtableCacheProvider thread 我的POJO是Person.java 。 使用eclipse生成Person.hbm.xml 。 项目包含主要function:TestPerson.java public static void main(String [] args){ Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); createPerson(session); queryPerson(session); } public […]

Jackson序列化的动态属性名称

我有很多类,我正在尝试序列化为JSON。 它们非常相似,所以我想知道是否有更好的方法来执行此操作,而不是每次出现此模式时创建3个非常接近相同的类: public class SomethingFoo { @JsonProperty(“foo”) Identifier foo // other properties } public class SomethingBar { @JsonProperty(“bar”) Identifier bar // other properties } public class SomethingBaz { @JsonProperty(“baz”) Identifier baz // other properties } 标识符是一个只包含一个字段的类: public class Identifier { @JsonProperty(“name”) String name = “”; } 我想做的是将标识符更改为: public class Identifier { @JsonProperty(“name”) String name = […]

JSch从字符串中添加私钥

我将SFTP的密钥对文件的内容作为字符串。 我需要使用JSch添加内容,但addIdentity只接受文件路径。 无论如何我能做到吗? 我看到KeyPair类有一个方法 – KeyPair load(JSch jsch, byte[] bytes, byte[] bytes1) 我不确定这是做什么的。

Android Studio在生成JavaDoc时无法读取包

到目前为止,我已经看到了Eclipse Javadoc的问题, 这个和这个,但这些都是Eclipse特有的。 但是我想要它用于ANDROID STUDIO。 我的项目有子模块和自定义视图。 以下是错误: BootStarp1\Base-App\src\main\java\com\rspllib\android\utils\FileUpload\CustomMultiPartEntity.java:3: error: package android.util does not exist import android.util.Log; ^ D:\MonkeyTalk\MonkeyStudioWorkspace\BootStarp1\Base-App\src\main\java\com\rspllib\android\utils\FileUpload\CustomMultiPartEntity.java:18: error: cannot access HttpEntity public class CustomMultiPartEntity extends MultipartEntity ^ class file for org.apache.http.HttpEntity not found D:\MonkeyTalk\MonkeyStudioWorkspace\BootStarp1\Base- App\src\main\java\com\rspllib\android\utils\FileUpload\FileUploading.java:3: error: package android.util does not exist import android.util.Log; ^

Kafka – 经纪人:集团协调员不可用

我有以下结构: zookeeper: 3.4.12 kafka: kafka_2.11-1.1.0 server1: zookeeper + kafka server2: zookeeper + kafka server3: zookeeper + kafka 使用kafka-topics shell脚本创建具有复制因子3和分区3的主题。 ./kafka-topics.sh –create –zookeeper localhost:2181 –topic test-flow –partitions 3 –replication-factor 3 并使用group localConsumers。 当领导没事的时候它工作正常。 ./kafka-topics.sh –describe –zookeeper localhost:2181 –topic test-flow Topic:test-flow PartitionCount:3 ReplicationFactor:3 Configs: Topic: test-flow Partition: 0 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1 Topic: test-flow Partition: […]

Java / .NET中的RSA加密和.NET中的解密

我的应用程序有Java和.NET客户端,我的应用程序是.NET。 我的客户将发送一个使用RSA公钥加密的XML文件,我需要使用.NET解密它 对于字符串说“Achinth Anand Gurkhi”,Java RSA加密方法生成以下加密字符串: e8s2Ap3R1AwoaKB7OPCwkf0vhAVGaQisdoq2Yo0BvwcQ7v3oVtMOVc5wsnIyNVOSZV543imwIiBer0HSXRe8PoBD4jj0tTxtLA+bdoR40oQJD2UmZ4OpAH3g92wLXYd4bVvjllcCPPc0tSr/nzEKeZHcnhf6cGpuwfKyFNbXW2vtlEfmRd+LGqlixPRlx1OnsSMNNw+u/5IBs8MauY4Uwq1Lovlgd9f/8WTOvq9ityr84vGLMRGs4wpC7+fFNk8jGuNZgoCDLZw2RqrUd8FBFvN2wCRZXnS7Wg4QjiBdmnq0OsAwK9OFwqnil7DNnDnlytlecR5oYkDhO2fC4FzFiA== 对于相同的字符串,.NET RSA加密方法使用Java程序使用的相同公钥生成以下加密字符串: iJO4hwhXGX27jzK87X9gxzzbKpgf7FKhe6UcY7eoiCpLskOatgCMZTm0aTDuwRZGJGbZCIZt+JI9X8LxwOLmIbv5LGyDq+a8jkrPu+pDRvg2uRuKeQj2yBRcp36X+xFf61ux24NaX2RTCY9YfJcUis9NjEkL0eQ3gC79xO0vuBjaUA2oYOt0Mlr7DmKE+b0lz25J/WJuSW83g2oZOlvJ4RnsrFChu0vHnkHCQo9JVjhMc+Onj7+lbI1CDgGq4XigZrHt+j564y3sc3z0oQYfdZkF3yUZrzd3sJjd9KmryHf52eVb9/qgL2/Za1jUwTzKIOvtG/bQpR2ka7Qu1ZqbxQ== 但是我使用匹配私钥的.NET解密方法能够将两者解密回相同的字符串“Achinth Anand Gurkhi”。 不同的加密字符串如何返回相同的值?