我正在使用嵌入式tomcat服務器版本7.我想以編程方式配置服務器與會話跟蹤模式(實際上我搜索一種方法來擺脫jsessionid,即既在餅乾或網址中)。 但是在org.apache.catalina.Context中沒有方法來簡單地配置這個屬性,就像在一個web.xml描述符文件中一樣(我不能使用這樣的文件)。 那麼最好的辦法是什麼?如何以編程方式配置Tomcat的會話跟蹤模式
我想上面的代碼
Context ctxt = tomcat.addWebapp(.......);
ctxt.getServletContext().setSessionTrackingModes(
my_modes);
但這種方法與錯誤
java.lang.IllegalStateException: The session tracking modes for context/cannot be set whilst the context is running
at org.apache.catalina.core.ApplicationContext.setSessionTrackingModes(ApplicationContext.java:1235)
at org.apache.catalina.core.ApplicationContextFacade.setSessionTrackingModes(ApplicationContextFacade.java:611)
我試圖用https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/Context.html#addApplicationListener(java.lang.String)失敗。在contextInitialized監聽器設置跟蹤模式
servletContextEvent.getServletContext().setSessionTrackingModes(
EnumSet.copyOf(sessionTrackingModes));
但我不知道如何與這個監聽器的實例,因爲最後的方法Context.addApplicationListener的方法需要監聽的類名配置Tomcat和當運行服務器發生故障實例我的聽衆,因爲沒有一個空的構造的(我的聽衆構造函數採用sessionTrackingMode名單..不能配置)
[read-1] ERROR Aug 18 19:10:03 - Error configuring application listener of class xx.xx.xx.SessionTrackingListener
java.lang.InstantiationException: xx.xx.xx.SessionTrackingListener
at java.lang.Class.newInstance(Class.java:427)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:125)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4715)
..............
Caused by: java.lang.NoSuchMethodException: xx.xx.xx.xx.SessionTrackingListener.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
所以,你的建議是一個更好的辦法來做到這一點
一般來說,請參閱https://tomcat.apache.org/tomcat-7.0-doc/config/listeners.html來設置偵聽器。我的問題是爲什麼你想擺脫jsessionid首先?這是跟蹤多個用戶發出的請求和容器需要該信息正常工作的一個不可或缺的方面。 – Alan
因爲在服務器端我使用的是自定義的內部會話實現,而不是HttpSession,並且還有另外一個cookie,所以我在請求之間添加了這個cutom會話。我沒有使用HttpSession – Jugu