Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven Jetty服务器&x27;s会话为空_Maven_Session_Jetty - Fatal编程技术网

Maven Jetty服务器&x27;s会话为空

Maven Jetty服务器&x27;s会话为空,maven,session,jetty,Maven,Session,Jetty,我正在尝试用一个servlet来实现hello world Jetty项目(使用Jetty 9.3.6.v20151106),该servlet查看会话。但是,当我的代码运行时,我无法看到会话或存储任何cookie。我研究了stackoverflow问题以帮助进行故障排除并实现了推荐的简单BaseServlet,但每次运行它时,BaseServlet都会输出“无会话”。我是否缺少一些配置 下面是我的HelloWorld.java类: package com.my.company; import

我正在尝试用一个servlet来实现hello world Jetty项目(使用Jetty 9.3.6.v20151106),该servlet查看会话。但是,当我的代码运行时,我无法看到会话或存储任何cookie。我研究了stackoverflow问题以帮助进行故障排除并实现了推荐的简单BaseServlet,但每次运行它时,BaseServlet都会输出“无会话”。我是否缺少一些配置

下面是我的HelloWorld.java类:

package com.my.company;

import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SessionManager;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.session.HashSessionIdManager;
import org.eclipse.jetty.server.session.HashSessionManager;
import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class HelloWorld {

public static void main(String[] args) throws Exception {
    //Create the server
    Server server = new Server();

    // Configure for Http
    HttpConfiguration http_config = new HttpConfiguration();
    http_config.setSecureScheme("https");
    http_config.setSecurePort(8443);
    http_config.setOutputBufferSize(32768);

    ServerConnector http = new ServerConnector(server,
            new HttpConnectionFactory(http_config));
    int http_port = 12043;
    http.setPort(http_port);
    http.setIdleTimeout(30000);
    server.addConnector(http);

    //Add ServletContextHandler
    ServletContextHandler servletContextHandler = new ServletContextHandler(
            ServletContextHandler.SESSIONS);
    servletContextHandler.setContextPath("/");

    SessionManager sessionManager = new HashSessionManager();
    sessionManager.setMaxInactiveInterval(60 * 15); //session time out of 15 minutes
    HashSessionIdManager idManager = new HashSessionIdManager();
    sessionManager.getSessionCookieConfig().setName("JSESSIONID_" + Integer.toString(http_port));
    sessionManager.setSessionIdManager(idManager);
    server.setSessionIdManager(idManager);
    SessionHandler sessionHandler = new SessionHandler(sessionManager);
    servletContextHandler.setSessionHandler(sessionHandler);
    server.setHandler(servletContextHandler);

    //Add BaseServlet
    ServletHolder holder = new ServletHolder(new BaseServlet());
    servletContextHandler.addServlet(holder, "/*");

    //Start the server
    server.start();
    System.out.println("SERVER DUMP AFTER START" + server.dump());

    // The use of server.join() the will make the current thread join and
    // wait until the server is done executing.
    // See http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()
    server.join();
  }
}
package com.my.company;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class BaseServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    boolean create = "true".equals(req.getParameter("create"));

    HttpSession session = req.getSession(create);
    if (create) {
        session.setAttribute("created", new Date());
    }

    PrintWriter pw = new PrintWriter(resp.getOutputStream());
    pw.println("Create = " + create);
    if (session == null) {
        pw.println("no session");
    } else {
        pw.println("Session = " + session.getId());
        pw.println("Created = " + session.getAttribute("created"));
    }

    pw.flush();
   }
}
下面是我的BaseServlet.java类:

package com.my.company;

import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SessionManager;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.session.HashSessionIdManager;
import org.eclipse.jetty.server.session.HashSessionManager;
import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class HelloWorld {

public static void main(String[] args) throws Exception {
    //Create the server
    Server server = new Server();

    // Configure for Http
    HttpConfiguration http_config = new HttpConfiguration();
    http_config.setSecureScheme("https");
    http_config.setSecurePort(8443);
    http_config.setOutputBufferSize(32768);

    ServerConnector http = new ServerConnector(server,
            new HttpConnectionFactory(http_config));
    int http_port = 12043;
    http.setPort(http_port);
    http.setIdleTimeout(30000);
    server.addConnector(http);

    //Add ServletContextHandler
    ServletContextHandler servletContextHandler = new ServletContextHandler(
            ServletContextHandler.SESSIONS);
    servletContextHandler.setContextPath("/");

    SessionManager sessionManager = new HashSessionManager();
    sessionManager.setMaxInactiveInterval(60 * 15); //session time out of 15 minutes
    HashSessionIdManager idManager = new HashSessionIdManager();
    sessionManager.getSessionCookieConfig().setName("JSESSIONID_" + Integer.toString(http_port));
    sessionManager.setSessionIdManager(idManager);
    server.setSessionIdManager(idManager);
    SessionHandler sessionHandler = new SessionHandler(sessionManager);
    servletContextHandler.setSessionHandler(sessionHandler);
    server.setHandler(servletContextHandler);

    //Add BaseServlet
    ServletHolder holder = new ServletHolder(new BaseServlet());
    servletContextHandler.addServlet(holder, "/*");

    //Start the server
    server.start();
    System.out.println("SERVER DUMP AFTER START" + server.dump());

    // The use of server.join() the will make the current thread join and
    // wait until the server is done executing.
    // See http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()
    server.join();
  }
}
package com.my.company;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class BaseServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    boolean create = "true".equals(req.getParameter("create"));

    HttpSession session = req.getSession(create);
    if (create) {
        session.setAttribute("created", new Date());
    }

    PrintWriter pw = new PrintWriter(resp.getOutputStream());
    pw.println("Create = " + create);
    if (session == null) {
        pw.println("no session");
    } else {
        pw.println("Session = " + session.getId());
        pw.println("Created = " + session.getAttribute("created"));
    }

    pw.flush();
   }
}
这是我的pom.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>EmbeddJettyHelloWorld</groupId>
<artifactId>EmbeddJettyHelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>EmbeddJettyHelloWorld</name>

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.4.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.my.company.HelloWorld</mainClass>
                <classpathScope>test</classpathScope>
                <systemProperties>
                    <property>
                        <key>basedir</key>
                        <value>${basedir}</value>
                    </property>
                </systemProperties>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${jetty-version}</version>
            <configuration>
                <webAppConfig>
                    <contextPath>/</contextPath>
                </webAppConfig>
                <webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory>
                <webDefaultXml>${project.basedir}/conf/jetty/webdefault.xml</webDefaultXml>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>${jetty-version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>${jetty-version}</version>
    </dependency>
</dependencies>

<properties>
    <jetty-version>9.3.6.v20151106</jetty-version>
</properties>

4.0.0
EmbeddedjettyHelloWorld
EmbeddedjettyHelloWorld
0.0.1-快照
EmbeddedjettyHelloWorld
org.codehaus.mojo
execmaven插件
1.4.0
JAVA
com.my.company.HelloWorld
测试
巴塞迪尔
${basedir}
org.eclipse.jetty
jetty maven插件
${jetty版本}
/
target/${project.artifactId}-${project.version}
${project.basedir}/conf/jetty/webdefault.xml
org.eclipse.jetty
jetty服务器
${jetty版本}
org.eclipse.jetty
码头servlet
${jetty版本}
9.3.6.v20151106

以下是服务器转储的输出:

    SERVER DUMP AFTER STARTorg.eclipse.jetty.server.Server@71f2a7d5 - STARTED
     += qtp1149319664{STARTED,8<=8<=200,i=5,q=0} - STARTED
     |   +- 15 qtp1149319664-15 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
     |   +- 13 qtp1149319664-13-acceptor-0@4c170d5c-ServerConnector@326de728    {HTTP/1.1,[http/1.1]}{0.0.0.0:12043} RUNNABLE @ sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) prio=3
     |   +- 14 qtp1149319664-14 RUNNABLE @ sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
     |   +- 12 qtp1149319664-12 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
     |   +- 18 qtp1149319664-18 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
     |   +- 16 qtp1149319664-16 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
     |   +- 11 qtp1149319664-11 RUNNABLE @ sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
     |   +- 17 qtp1149319664-17 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
     += ServerConnector@326de728{HTTP/1.1,[http/1.1]}{0.0.0.0:12043} - STARTED
     |   +~ org.eclipse.jetty.server.Server@71f2a7d5 - STARTED
     |   +~ qtp1149319664{STARTED,8<=8<=200,i=5,q=0} - STARTED
     |   += org.eclipse.jetty.util.thread.ScheduledExecutorScheduler@1a6c5a9e - STARTED
     |   +- org.eclipse.jetty.io.ArrayByteBufferPool@2cfb4a64
     |   += HttpConnectionFactory@20ad9418[HTTP/1.1] - STARTED
     |   |   +- HttpConfiguration@5474c6c{32768/8192,8192/8192,https://:8443,[]}
     |   += org.eclipse.jetty.server.ServerConnector$ServerConnectorManager@4b6995df - STARTED
     |   |   +- org.eclipse.jetty.io.ManagedSelector@34033bd0 id=0 keys=0 selected=0 id=0
     |   |   |   +- sun.nio.ch.WindowsSelectorImpl@5200a403 keys=0
     |   |   +- org.eclipse.jetty.io.ManagedSelector@3aa9e816 id=1 keys=0 selected=0 id=1
     |   |       +- sun.nio.ch.WindowsSelectorImpl@33c7bf keys=0
     |   +- sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:12043]
     |   +- qtp1149319664-13-acceptor-0@4c170d5c-ServerConnector@326de728{HTTP/1.1,[http/1.1]}{0.0.0.0:12043}
 += org.eclipse.jetty.server.session.HashSessionIdManager@17d99928 - STARTED
 += o.e.j.s.ServletContextHandler@2e5c649{/,null,AVAILABLE} - STARTED
     |   += org.eclipse.jetty.server.session.SessionHandler@6fffcba5 - STARTED
     |   |   += org.eclipse.jetty.server.session.HashSessionManager@9e89d68 - STARTED
     |   |   |   +~ org.eclipse.jetty.server.session.HashSessionIdManager@17d99928 - STARTED
     |   |   |   += org.eclipse.jetty.util.thread.ScheduledExecutorScheduler@34340fab - STARTED
     |   |   |       +- sun.misc.Unsafe.park(Native Method)
     |   |   |       +- java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
     |   |   |       +- java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
     |   |   |       +- java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
     |   |   |       +- java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
     |   |   |       +- java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
     |   |   |       +- java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
     |   |   |       +- java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
     |   |   |       +- java.lang.Thread.run(Thread.java:745)
     |   |   += org.eclipse.jetty.servlet.ServletHandler@2aafb23c - STARTED
     |   |       += com.rtn.iaf.BaseServlet-484b61fc@3334c9b2==com.rtn.iaf.BaseServlet,-1,true - STARTED
     |   |       +- [/*]=>com.rtn.iaf.BaseServlet-484b61fc
     |   |       += org.eclipse.jetty.servlet.ServletHandler$Default404Servlet-7a7b0070@1d1bf782==org.eclipse.jetty.servlet.ServletHandler$Default404Servlet,-1,false - STARTED
     |   |       +- [/]=>org.eclipse.jetty.servlet.ServletHandler$Default404Servlet-7a7b0070
     |   |
     |   +> No ClassLoader
     |   +> Handler attributes o.e.j.s.ServletContextHandler@2e5c649{/,null,AVAILABLE}
     |   |   +- org.eclipse.jetty.server.Executor=qtp1149319664{STARTED,8<=8<=200,i=5,q=0}
     |   +> Context attributes o.e.j.s.ServletContextHandler@2e5c649{/,null,AVAILABLE}
     |   |   +-     org.eclipse.jetty.util.DecoratedObjectFactory=org.eclipse.jetty.util.DecoratedObjectFactory[decorators=0]
     |   +> Initparams o.e.j.s.ServletContextHandler@2e5c649{/,null,AVAILABLE}
     |
     +> sun.misc.Launcher$AppClassLoader@73d16e93
       +- file:/C:/Users/myUser/tutorialAndDemo_workspace/EmbeddJettyHelloWorld/target/classes/
       +- file:/C:/Users/myUser/tutorialAndDemo_workspace/.m2/repository1/org/eclipse/jetty/jetty-server/9.3.6.v20151106/jetty-server-9.3.6.v20151106.jar
       +- file:/C:/Users/myUser/tutorialAndDemo_workspace/.m2/repository1/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar
       +- file:/C:/Users/myUser/tutorialAndDemo_workspace/.m2/repository1/org/eclipse/jetty/jetty-http/9.3.6.v20151106/jetty-http-9.3.6.v20151106.jar
       +- file:/C:/Users/myUser/tutorialAndDemo_workspace/.m2/repository1/org/eclipse/jetty/jetty-util/9.3.6.v20151106/jetty-util-9.3.6.v20151106.jar
       +- file:/C:/Users/myUser/tutorialAndDemo_workspace/.m2/repository1/org/eclipse/jetty/jetty-io/9.3.6.v20151106/jetty-io-9.3.6.v20151106.jar
       +- file:/C:/Users/myUser/tutorialAndDemo_workspace/.m2/repository1/org/eclipse/jetty/jetty-servlet/9.3.6.v20151106/jetty-servlet-9.3.6.v20151106.jar
       +- file:/C:/Users/myUser/tutorialAndDemo_workspace/.m2/repository1/org/eclipse/jetty/jetty-security/9.3.6.v20151106/jetty-security-9.3.6.v20151106.jar
       +- sun.misc.Launcher$ExtClassLoader@2b80d80f
STARTorg.eclipse.jetty.SERVER之后的服务器转储。Server@71f2a7d5-开始
+=qtp1149319664{已启动,8个处理程序属性o.e.j.s。ServletContextHandler@2e5c649{/,空,可用}
||+-org.eclipse.jetty.server.Executor=qtp1149319664{STARTED,8 Initparams o.e.j.s。ServletContextHandler@2e5c649{/,空,可用}
|
+>sun.misc.Launcher$AppClassLoader@73d16e93
+-文件:/C:/Users/myUser/tutorialandemo_工作区/embeddedjettyHelloWorld/target/classes/
+-文件:/C:/Users/myUser/tutorialandemo_workspace/.m2/repository1/org/eclipse/jetty/jetty server/9.3.6.v20151106/jetty-server-9.3.6.v20151106.jar
+-文件:/C:/Users/myUser/tutorialandemo_workspace/.m2/repository1/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar
+-文件:/C:/Users/myUser/tutorialandemo_workspace/.m2/repository1/org/eclipse/jetty/jetty http/9.3.6.v20151106/jetty-http-9.3.6.v20151106.jar
+-文件:/C:/Users/myUser/tutorialandemo_workspace/.m2/repository1/org/eclipse/jetty/jetty util/9.3.6.v20151106/jetty-util-9.3.6.v20151106.jar
+-文件:/C:/Users/myUser/tutorialandemo_workspace/.m2/repository1/org/eclipse/jetty/jetty io/9.3.6.v20151106/jetty-io-9.3.6.v20151106.jar
+-文件:/C:/Users/myUser/tutorialandemo_workspace/.m2/repository1/org/eclipse/jetty/jetty servlet/9.3.6.v20151106/jetty-servlet-9.3.6.v20151106.jar
+-文件:/C:/Users/myUser/tutorialandemo_workspace/.m2/repository1/org/eclipse/jetty/jetty security/9.3.6.v20151106/jetty-security-9.3.6.v20151106.jar
+-sun.misc.Launcher$ExtClassLoader@2b80d80f

在与Jetty用户邮件列表上的人交谈后,我将代码修改为:

public static void main(String[] args) throws Exception {
// Create the server
Server server = new Server(12043);

// Add ServletContextHandler
ServletContextHandler servletContextHandler = new ServletContextHandler(
ServletContextHandler.SESSIONS);
servletContextHandler.setContextPath("/");

server.setHandler(servletContextHandler);

// Add BaseServlet
ServletHolder holder = new ServletHolder(new BaseServlet());
servletContextHandler.addServlet(holder, "/*");

// Start the server
server.start();
System.out.println("SERVER DUMP AFTER START" + server.dump());

server.join();

}
其中输出为:Request=Request(GET//localhost:12043/)@968bbe8 响应=HTTP/1.1200 日期:2016年6月2日星期四格林威治标准时间13:00:04 Create=false 没有会议

这是预期的,因为call request.getSession(false)不会创建会话。它仅在先前已创建会话时返回会话