我刚开始使用嵌入式码头。我遇到了一些错误信息。这是简单而直接的几行代码,我在网上找到并希望测试。
import org.jaxen.Context;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.ServletHolder;
public class Main {
public static void main(String[] args) throws Exception {
ServletHolder sh = new ServletHolder(ServletContainer.class);
sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass", "com.sun.jersey.api.core.PackagesResourceConfig");
sh.setInitParameter("com.sun.jersey.config.property.packages", "jerseyplusjetty");
Server server = new Server(80);
ServletContextHandler sch = new ServletContextHandler(server, "/");
sch.addServlet(sh, "/*");
server.start();
server.join();
}
}
我在java构建路径中拥有所有的Jetty jar。但我不断收到错误:构造函数ServletHolder(Class)未定义,构造函数Server(int)未定义,ServletContextHandler无法解析为类型。 如果我删除ServletHolder和Server中的参数,它会停止抱怨。例如如果我有:ServletHolder sh = new ServletHolder(); Server server = new Server(); 但那不对。我读了Jetty文档和ServletHolder类可以参数。我在这里错过了什么吗?
答案 0 :(得分:4)
仅仅是关于嵌入式Jetty的FYI ...我已经创建了一个github项目,我谦虚地提交可以涵盖大多数不断出现的嵌入式码头问题。
我有AbstractHandlers,Servlets,Jersey Servlets,静态文件,webapps以及没有的例子。仍在研究RoR和Sinatra,但会到达那里。
有关详细信息,请参阅https://github.com/ZenGirl/EmbeddedJettyRepository。 任何人都想贡献,只要问。
答案 1 :(得分:1)
ServletHolder的版本我在构造函数中使用了String或servlet。所以不要做
new ServletHolder(ServletContainer.class)
您应该new ServletHolder(ServletContainer.class.getCanonicalName())
或new ServletHolder(new ServletContainer())
。
ServletContainer是servlet的一个奇怪名称,请确保它实际上是一个servlet。
另外,请注意有许多不同版本的Jetty(你使用旧版本,因为在新版本中所有类都在org.eclipse.jetty包中),并且很容易获取示例代码指的是与你所拥有的版本不同的版本。我会从maven获得jetty 7.2.2并使用示例代码here。