我正在尝试在运行 Java8 的 Linux 机器上在 Jetty 9.2.3 上设置持久会话。我已将 jetty-web.xml 文件添加到 ${jetty.home}/webapps/app/WEB-INF/ 下的应用程序,内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="sessionHandler">
<New class="org.eclipse.jetty.servlet.SessionHandler">
<Arg>
<New class="org.eclipse.jetty.servlet.HashSessionManager">
<Set name="storeDirectory">/var/sessions</Set>
</New>
</Arg>
</New>
</Set>
</Configure>
但是当我尝试启动 Jetty 时,出现以下错误:
2014-09-29 13:08:12.989:WARN:oejw.JettyWebXmlConfiguration:main: Unable to process jetty-web.xml
java.lang.ClassNotFoundException: org.eclipse.jetty.servlet.SessionHandler
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:450)
...
任何帮助将不胜感激。
答案1
嗯,看起来 Jetty9 文档解释如何设置持久会话完全是错误的。当我将路径从 org.eclipse.jetty.servlet.* 更改为 org.eclipse.jetty.server.session.* 时,一切都运行正常。
最终配置如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="sessionHandler">
<New class="org.eclipse.jetty.server.session.SessionHandler">
<Arg>
<New class="org.eclipse.jetty.server.session.HashSessionManager">
<Set name="storeDirectory">/var/sessions</Set>
</New>
</Arg>
</New>
</Set>
</Configure>