在Struts 2中使用WebSocket API

时间:2013-12-25 16:24:32

标签: java spring struts2 websocket tomcat7

我有一个在Tomcat 7.0.43上运行的Struts2 Web应用程序,它使用Rest和Convention插件来映射所有请求。 Struts尝试自己映射所有请求。

JSR 356使用

等注释定义服务器端点
@ServerEndpoint(value = "/websocket/chat")

现在,当broswer尝试连接到ws:/127.0.0.1:8080/websocket/chat时,请求失败,因为Struts映射器拦截了请求。

我可以在XML文件中指定任何内容,以便请求到达正确的位置吗?

修改

根据建议,我添加了

<constant name="struts.action.excludePattern" value="/websocket.*?" />

到我的Struts配置,之后URL / websocket / chat开始达到404错误。

后来我了解到我需要配置ServerApplicationConfig实现。在这之后,websocket开始正常工作但我的应用程序的其余部分无法加载给出错误:

SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

这是我的班级:

public class Socket implements ServerApplicationConfig {

    @Override
    public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> scanned) {

        Set<ServerEndpointConfig> result = new HashSet<ServerEndpointConfig>();

        return result;
    }

    @Override
    public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scanned) {

        Set<Class<?>> results = new HashSet<Class<?>>();
        for (Class<?> clazz : scanned) {
            results.add(clazz);
        }
        return results;
    }
}

我怎样才能让所有事情在和谐中共同发挥作用?

注意:我使用Struts Spring Plugin进行Spring Security的依赖注入。

1 个答案:

答案 0 :(得分:4)

您可以配置Struts过滤器以通过正则表达式模式排除某些URL。您应该在struts.xml

中添加常量
<constant name="struts.action.excludePattern" value="^ws://.+$"/>