gpt4 book ai didi

java - 是否可以在没有 web.xml 文件的情况下在 jetty 上运行 servlet?

转载 作者:行者123 更新时间:2023-12-01 12:46:43 24 4
gpt4 key购买 nike

我正在使用 Jetty 运行 servlet,但只能使用 java 代码(嵌入式 jetty)。这是我的两个类(class):

示例服务器.java:

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.servlet.ServletContextHandler;

/**
* Created by Administrator on 7/8/14.
*/
public class ExampleServer {

public static void main(String[] args) throws Exception {
Server server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(8080);

server.setConnectors(new Connector[]{connector});

ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/hello");
context.addServlet(HelloServlet.class, "/");

HandlerCollection handlers = new HandlerCollection();
handlers.setHandlers(new Handler[]{context, new DefaultHandler()});
server.setHandler(handlers);

server.start();
server.join();
}
}

HelloServlet.java:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* Created by Administrator on 7/8/14.
*/
public class HelloServlet extends HttpServlet{

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("<h1>Hello from HelloServlet</h1>");
response.getWriter().println("session=" + request.getSession(true).getId());
}
}

现在,当我尝试访问 http://localhost:8080/hello 时,出现以下错误:

HTTP 错误:500

访问/hello/时出现问题。原因:

java.lang.IllegalStateException: No SessionManager

关于如何解决这个问题有什么想法吗?谢谢。

最佳答案

你似乎错过了一步,

context.addServlet(HelloServlet.class, "/");
context.setSessionHandler(new org.eclipse.jetty.server.session.SessionHandler());

通常,配置文件用于默认设置(或对集群使用 JDBCSessionManager)。另外,您只需要这个,因为您调用了 request.getSession(true).getId()

关于java - 是否可以在没有 web.xml 文件的情况下在 jetty 上运行 servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24633117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com