failed: Error during WebSocket handshake: Unexpected response code: 200
2015-10-15 14:08
405 查看
websocket 注解方式实现(详细见上篇)
web平台 struts2 + spring4 jdk8 tomcat8
配置完成之后发现无法访问,前端访问代码:
浏览器运行console报错
failed: Error during WebSocket handshake: Unexpected response code: 200
网上搜索说是 struts过滤器原因,但是未详细解释如何处理,
test为工程名, /log/view 为websocket注解 url
struts 和 websocket 是2条处理请求的路,被struts 匹配上了 ,自然就到不了 websocket的处理逻辑。
解决办法:
让struts的过滤器不过滤websocket的请求
在struts.xml 中加上例如:
这个struts常量的作用就是针对正则表达式所匹配到的路径,
1.struts解析xml时,不会把这些路径放到ActionMapping中;
2.请求时也不用去struts的ActionMapping中进行匹配,执行。
3.而是直接跳过此过滤器进入下一个过滤器。
特别要注意的是:struts.action.excludePattern的值是用逗号(,)隔开的正则表达式,写2行,前面一行不生效,后面才生效,貌似被最后一行覆盖。
比如:/res/.* 表示以/res/为开头的路径。
.* 表示零个或多个任意字符
web平台 struts2 + spring4 jdk8 tomcat8
配置完成之后发现无法访问,前端访问代码:
<html> <head> <meta charset="UTF-8" /> <title>Viewer</title> <script type="text/javascript" charset="utf-8" src="js/jquery-1.11.3.min.js"></script> <link type="text/css" rel="stylesheet" href="css/style.css" /> <script type="text/javascript"> function getUrlParameter(name) { return decodeURIComponent((RegExp(name + '=' + '([^&]*)(&|$)').exec( location.search) || [ , null ])[1]); } function escapeHtml(unsafe) { return unsafe .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } $(function() { var text = $('#messages'); var keepScrolling = true; var ws = new WebSocket("ws://192.168.1.251/test/log/view"); ws.onopen = function(event) { }; ws.onmessage = function(event) { setTimeout(function() { text.append(escapeHtml(event.data + "\n")); if (keepScrolling) window.scrollBy(0, 100000000000000000); },0); } ws.onclose = function(event) { } $(document).bind("keydown", function(event){ if (event.keyCode == 32) setTimeout(function() { keepScrolling = !keepScrolling; },0); }); }); </script> </head> <body> <pre id="messages"></pre> </body> </html>
浏览器运行console报错
failed: Error during WebSocket handshake: Unexpected response code: 200
网上搜索说是 struts过滤器原因,但是未详细解释如何处理,
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>以上是struts web.xml里面默认过滤以工程目录开头的所有请求 , 而websocket 请求也能被struts匹配。
test为工程名, /log/view 为websocket注解 url
ws://192.168.1.251/test/log/view
struts 和 websocket 是2条处理请求的路,被struts 匹配上了 ,自然就到不了 websocket的处理逻辑。
解决办法:
让struts的过滤器不过滤websocket的请求
在struts.xml 中加上例如:
<constant name="struts.action.excludePattern" value="/log/tail,/log/view"></constant>
这个struts常量的作用就是针对正则表达式所匹配到的路径,
1.struts解析xml时,不会把这些路径放到ActionMapping中;
2.请求时也不用去struts的ActionMapping中进行匹配,执行。
3.而是直接跳过此过滤器进入下一个过滤器。
特别要注意的是:struts.action.excludePattern的值是用逗号(,)隔开的正则表达式,写2行,前面一行不生效,后面才生效,貌似被最后一行覆盖。
比如:/res/.* 表示以/res/为开头的路径。
.* 表示零个或多个任意字符
相关文章推荐
- 11g RAC TAF 实现 Failover Connect 理解Time Connection Failover/Runtime Connection Failover
- async and await 操作实例
- UVALive 4264 Message(Regionals 2008 :: Asia - Taipei+模拟)
- 17.2.1 Replication Implementation Details 复制实施细节
- jraiser小结
- setContentView(R.layout.activity_main)无法正常引用
- 使用SVN clang: error: linker command failed with exit code 1 (use -v to see invocation)
- <LeetCode><Easy> 219 ContainDuplicate 2
- NSSearchPathForDirectoriesInDomains用法,关于沙盒路径
- <LeetCode><Easy> 217 ContainsDuplicate
- 【转】nonatomic, retain,weak,strong用法详解
- jraiser
- OpenCV中的HOG+SVM物体分类 hog->compute(trainImg, descriptors,Size(1,1), Size(0,0))出现bug
- CF 585B Phillip and Trains(预处理+BFS)
- 【DP】BZOJ 1260: [CQOI2007]涂色paint
- mailto在网页中链接Email地址
- Git Https server certificate verification failed.
- git clone操作出现fatal:index-pack failed错误解决方案
- 使用Thumbnailtor实现图片的裁剪,缩放
- saiku - 集成单点登录