Tomcat下開發websocket進行二維碼掃碼登入
一、開發環境:
tomcat(apache-tomcat-7.0.64),Java API for WebSocket(JSR 356),ssh(struts2-2.3.36,spring-3.2.7.RELEASE, hibernate-3.6.10.Final)
1:Tomcat從7.0.27開始支援WebSocket,從7.0.47開始支援JSR-356。剛開始本想使用apache-tomcat-7.0.90.但是啟動後導致系統報錯:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC。經查詢發現是由於在tomcat 7.0.73新增對http請求url的規範限制,不允許使用包含未編碼的花括號的url進行請求。當然這個不是重點,重點是這個限制在tomcat 7.0.73中是必選的,這就導致一些現有網站要升級tomcat的時候出現嚴重的問題。所以在tomcat 7.0.73版本中,有人指出該限制做成必選屬於BUG。於是在7.0.73版本後,tomcat維護者把該限制做成可選的,這個修改體現在tomcat中的 catalina.properties 檔案中,該檔案新增一個屬性 tomcat.util.http.parser.HttpParser.requestTargetAllow=|。這個屬性是用來決定是否限制不經過編碼的花括號({})的,預設是注掉的,也就是說預設是限制的。但是把註釋去掉後還是報錯,所以選擇了apache-tomcat-7.0.64。
2:程式碼開發
pom中增加:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-websocket-api</artifactId>
<version>7.0.64</version>
<scope>provided</scope>
</dependency>
web程式碼:使用qrcode.js,瀏覽器自帶websocket。