我尝试用JSF 2.3.3(Glassfish实现)测试新的WebSocket功能。我使用 Tomcat 9.0.1 作为 Web 服务器并遵循本指南(https://javaserverfaces.github.io/whats-new-in-jsf23.html)
我创建了一个托管bean:
@Named
@ApplicationScoped
public class Controller {
@Inject @Push
private PushContext cityChannel;
public void send() {
cityChannel.send("test");
}
}
更新的index.xhtml:
<f:websocket channel="cityChannel"
onmessage="function(message){alert(message)}" />
并更新了web.xml:
<context-param>
<param-name>javax.faces.ENABLE_CDI_RESOLVER_CHAIN</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.ENABLE_WEBSOCKET_ENDPOINT</param-name>
<param-value>true</param-value>
</context-param>
不幸的是,Tomcat加载应用程序失败,出现错误:
SEVERE [main] com.sun.faces.config.ConfigureListener.contextInitialized Critical error during deployment:
javax.websocket.DeploymentException: Multiple Endpoints may not be deployed to the same path [/javax.faces.push/{channel}] : existing endpoint was [class com.sun.faces.push.WebsocketEndpoint] and new endpoint is [class com.sun.faces.push.WebsocketEndpoint]
at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:169)
如果我删除上下文参数javax.faces.ENABLE_WEBSOCKET_ENDPOINT那么JSF运行时会在我点击index.xhtml时引发错误:
Caused by: java.lang.IllegalStateException: f:websocket endpoint is not enabled. You need to set web.xml context param 'javax.faces.ENABLE_WEBSOCKET_ENDPOINT' with value 'true'.
请指教。
javax.websocket.部署异常:多个endpoint可能无法部署到同一路径[/javax.faces.push/{通道}]:现有endpoint是[类com.sun.faces.push.WebSocketEndpoint],新endpoint是org.apache.tomcat.websocket.server.WsServerContainer.addendpoint(WsServerContainer.java:169)I的[类com.sun.faces.push.WebSocketEndpoint]
当运行时类路径被多个Mojarra实现污染时,就会发生这种情况。例如,一个来自< code>jsf-impl.jar文件,另一个来自< code>javax.faces.jar文件。或者甚至可能是多个不同版本。
您需要确保运行时类路径中只有一个版本的库。这并不特别适用于Mojarra,而是适用于每个基于Java的库。
Mojarra的安装说明可以在其自述文件中找到。
我正在尝试使用NetBeans(或任何IDE)开发JavaFX应用程序,但我无法正确安装JDK和JavaFX。 对于上下文,我使用Ubuntu 18.04 LTS,并遵循本指南。目前,当运行时,我得到以下输出: 这不是我想要使用的JDK。我已经从这个网站下载了JDK15,打开了tar。gz文件,并将其放入名为的文件夹中的。提取文件夹后,我将JDK添加到我的系统路径变量中: 然后是系统重启。在Net
尝试在使用Spring cloud Gateway代理soap服务时记录请求和响应。下面是代码段...它引发IllegalStateException。 IllegalStateException:只允许一个连接接收订阅服务器。在reactor.netty.channel.fluxreceive.startreceive(fluxreceive.java:271)[reactor-nety.cha
问题内容: 以下是我运行时遇到的错误: 问题答案: 在没有空格的路径中创建您的virtualenv环境。这就是为什么它发生的原因: 创建环境时,它会建立一个目录。在该目录中是与环境有关的所有可执行文件。有些是脚本。如您所知,hashbang用来告诉系统使用什么解释程序来运行脚本。您可能经常在脚本顶部看到此信息: 如果脚本位于,则告诉系统运行以下命令来执行脚本: 就您而言,virtualenv正在创
我有一个maven项目。它是用Java 16编写的。我安装了Java 16 JDK。 当我用dockerfile构建它时,一切都正常,但当我运行docker并转到我的项目url时,我得到了一个“不受支持的类文件主版本60”。 可以在tomcat或其他东西上运行java 16项目吗? 这是我的一些文件: DockerFile文件: 还有我的pom。xml: Tomcat日志: docker执行后从a
问题内容: 我有一个由某些客户端提供的基于Java的应用程序。当我尝试运行该应用程序时,我遇到错误,当我联系客户端时,他们只是要求用8更新JCE , 我做了以下步骤 从Oracle JCE下载站点下载软件。 解压缩该软件包并将文件local_policy.jar和US_export_policy.jar复制到JRE安全库中。 JRE-C:\ Program Files \ Java \ jre1.
如何将Tomcat9的内部日志记录(catalina和localhost)重定向到log4j2? 虽然Tomcat和Log4j的旧版本有很多指南,但我找不到任何关于Tomcat 9和Log4J2的“完整”指南;Apache Tomcat 9文档指向“替代日志框架提供的说明”,Apache Log4j文档说明(2.更正的jar名称): Log4j可以用作Apache Tomcat的日志记录框架。这种