我输入地址:http://localhost/ctc-emassh (其中ctc-emassh是项目名称,这是一个基于ssh框架开发的程序)
Problem accessing /ctc-emassh. Reason:
Service Unavailable
Powered by Jetty://
但是我写一个简单的servlet应用:login程序,程序正常执行。
//嵌入的jetty web容器程序
public class JettyWebContainer {
public Server server;
@Inject
ILog logger;
@Inject
ResourceLocator rs;
private ContextHandlerCollection handlers = new ContextHandlerCollection();
public WebAppContext newAppContext(File file) {
String appname = file.getName();
String dir = file.getAbsolutePath();
final WebAppContext context = new WebAppContext();
context.setDescriptor(dir + "/WEB-INF/web.xml");
context.setResourceBase(dir);
context.setContextPath("/" + appname);
context.setParentLoaderPriority(true);//是否与java2兼容
return context;
}
private static File[] loadAppList(File appDir) {
return appDir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
}
@Start
public void start() throws Exception {
int port = 80;
logger.info("port:" + port);
server = new Server(port);
for (File appf : loadAppList(rs.getFile("webapp"))) {
addHandler(newAppContext(appf));
}
server.setHandler(handlers);
try {
server.start();
logger.info("server start ok!");
} catch (Exception e) {
logger.error(e, "server start failed!");
throw e;
}
}
@Stop
public void stop() throws Exception {
try {
server.stop();
logger.info("stop JettyWebContainer ok!");
} catch (Exception e) {
logger.error(e, "未成功关闭server");
throw e;
}
}
public void addHandler(Handler handler) {
logger.info("JettyWebContainer add handler %s", handler);
handlers.addHandler(handler);
}
public void removeHandler(Handler handler) {
logger.info("JettyWebContainer remove handler %s", handler);
handlers.removeHandler(handler);
}
}
小弟,遇到这问题迟迟不能解决,待解决!
[code="java"]
FAILED org.eclipse.jetty.security.ConstraintSecurityHandler@17ec9f7: java.lang.IllegalStateException: No LoginService for
[/code]
问题在这里。你可以试试下面的代码:
[code="java"]
Server server = new Server();
SocketConnector connector = new SocketConnector();
// Set some timeout options to make debugging easier.
connector.setMaxIdleTime(1000 * 60 * 60);
connector.setSoLingerTime(-1);
connector.setPort(PORT);
server.addConnector(connector);
WebAppContext webAppCtx = new WebAppContext();
webAppCtx.setServer(server);
webAppCtx.setContextPath("/");
webAppCtx.setWar("src/main/webapp");
HashLoginService dummyLoginService = new HashLoginService(
"TEST-SECURITY-REALM");
webAppCtx.getSecurityHandler().setLoginService(dummyLoginService);
server.setHandler(webAppCtx);
try {
server.start();
System.in.read();
server.stop();
server.join();
} catch (Exception e) {
e.printStackTrace();
System.exit(100);
}
[/code]
你写一个嵌入式Jetty容器干嘛,你的ssh应用也是运行在嵌入式jetty容器里面的吗?既然“Service Unavailable ”,说明你的ssh应用有问题,启动过程可能就有错误了,把日志级别调高,看看启动过程有什么错误。
[quote]我在tomcat下运行ssh应用是没有问题的,但不知道为什么在Jetty下报这个错![/quote]
你调高日志级别,看看什么错误!
启动路径和tomcat是不同的 这个你得仔细检查一下
我觉得应该你在启动的时候是不是调用了什么方法 是多次调用的。
比如在我曾经在jsp里面两次调用response.sendRedirct。
或则你调用了 response.getOutputStream()然后又调用response.getWriter(),也会出现这中情况 lz细心看一下。