Sto lavorando su un progetto e sto cercando di creare un server in ascolto l'indirizzo localhost sulla porta 8082 (ho già 8081 riservata con un altro server)Jetty Server tornando sempre 404 con Handler
public class Class2HTTPServer {
public static void main(String[] args) {
Class1 object1= new Class1 (300);// parameter I need for other stuff
Class2 object2= new Class2 (300,object1,5); // parameters for other unrelated stuff
int listen_on_port = 8082;
Class2HTTPMessageHandler handler = new Class2HTTPMessageHandler (
object2);
String server_port_string = System.getProperty(SystemConstants.PROPERTY_KEY_SERVER_PORT);
if(server_port_string != null) {
try {
listen_on_port = Integer.parseInt(server_port_string);
listen_on_portfs = Integer.parseInt(server_port_string);
} catch(NumberFormatException ex) {
System.err.println(ex);
}
}
ComponentHTTPServerUtility.createServer(listen_on_port, handler);
}
}
Questo è la classe ComponentHTTPServerUtility:
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
public class ComponentHTTPServerUtility {
/**
* Creates a server on the port and blocks the calling thread
* @param port
* @param handler
* @return
*/
public static boolean createServer(int port, AbstractHandler handler) {
Server server = new Server(port);
if (handler != null) {
server.setHandler(handler);
}
try {
server.start();
server.join();
} catch (Exception ex) {
ex.printStackTrace();
}
return true;
}
/**
* Creates a server on the InetAddress and blocks the calling thread
* @param ipAddress
* @param port
* @param handler
* @return
*/
public static boolean createServer(String ipAddress, int port,
AbstractHandler handler) {
InetAddress inetIpAddress;
InetSocketAddress address;
Server server;
if (ipAddress == null)
return false;
try {
inetIpAddress = InetAddress.getByName(ipAddress);
address = new InetSocketAddress(inetIpAddress, port);
} catch (UnknownHostException ex) {
ex.printStackTrace();
return false;
}
server = new Server(address);
if (handler != null) {
server.setHandler(handler);
}
try {
server.start();
server.join();
} catch (Exception ex) {
ex.printStackTrace();
}
return true;
}
}
Quando eseguo Server ricevo il seguente messaggio nella console:
2015-01-19 13:13:49.451:INFO:oejs.Server:jetty-8.1.13.v20130916
2015-01-19 13:13:49.501:INFO:oejs.AbstractConnector:Started [email protected]:8082
.210
ma se vado con il mio browser per: http://localhost:8082/
ottengo l'errore 404. Tuttavia, se faccio lo stesso con l'altro server (porta 8081) ottengo una pagina vuota che indica che il server è in esecuzione.
Siamo spiacenti ma non riesco a entrare in uno specifico. Qualsiasi pensiero o suggerimento sarebbe molto apprezzato. Sono rimasto bloccato per ore.
Grazie
EDIT:
Questi sono i risultati che si ottengono per i server dopo l'inserimento della linea:
System.err.println (server.dump());
lavoro uno:
2015-01-19 15:37:05.600:INFO:oejs.Server:jetty-8.1.13.v20130916
2015-01-19 15:37:05.651:INFO:oejs.AbstractConnector:Started [email protected]:8081
[email protected] - STARTED
+- [email protected] - STARTED
|
+- qtp831407528{8<=6<=8/254,0} - STARTED
| +- 10 qtp831407528-10 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
| +- 11 qtp831407528-11 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
| +- 12 qtp831407528-12 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
| +- 13 qtp831407528-13 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
| +- 14 qtp831407528-14 Acceptor0 [email protected]:8081 RUNNABLE @ sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
| +- 15 qtp831407528-15 Selector0 RUNNABLE @ sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
| +- 16 qtp831407528-16 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
| +- 17 qtp831407528-17 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
|
+- [email protected]:8081 - STARTED
+- PooledBuffers [0/[email protected],0/[email protected],0/[email protected]]/PooledBuffers [0/[email protected],0/[email protected],0/[email protected]] - STARTED
+- org.eclipse.j[email protected]42557280 - STARTED
| +- [email protected] keys=0 selected=0 id=0
| +- org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:569)
| +- [email protected] keys=0
+- sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:8081]
+- qtp831407528{8<=6<=8/254,0} - STARTED
e questi sono da non lavorare uno:
2015-01-19 15:37:23.231:INFO:oejs.Server:jetty-8.1.13.v20130916
2015-01-19 15:37:23.280:INFO:oejs.AbstractConnector:Started [email protected]:8082
[email protected] - STARTED
+- [email protected] - STARTED
|
+- qtp597321988{8<=6<=8/254,0} - STARTED
| +- 10 qtp597321988-10 Selector0 RUNNABLE @ sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
| +- 11 qtp597321988-11 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
| +- 12 qtp597321988-12 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
| +- 13 qtp597321988-13 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
| +- 14 qtp597321988-14 Acceptor0 [email protected]:8082 RUNNABLE @ sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
| +- 15 qtp597321988-15 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
| +- 16 qtp597321988-16 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
| +- 17 qtp597321988-17 TIMED_WAITING @ sun.misc.Unsafe.park(Native Method) IDLE
|
+- [email protected]:8082 - STARTED
+- PooledBuffers [0/[email protected],0/[email protected],0/[email protected]]/PooledBuffers [0/[email protected],0/[email protected],0/[email protected]] - STARTED
+- org.eclipse.j[email protected]7f39425c - STARTED
| +- [email protected] keys=0 selected=0 id=0
| +- org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:569)
| +- [email protected] keys=0
+- sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:8082]
+- qtp597321988{8<=6<=8/254,0} - STARTED
La dichiarazione del gestore di base:
public class Class2HTTPMessageHandler extends AbstractHandler{
private Class2 object= null;
public Class2HTTPMessageHandler(Class2 obj){
object= obj;
}
@SuppressWarnings("unchecked")
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
MessageTag messageTag;
String requestURI;
Response fieldResponse = null;
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
requestURI = request.getRequestURI();
if (!ComponentUtility.isEmpty(requestURI)
&& requestURI.toLowerCase().startsWith("/stock")) {
messageTag = ComponentUtility.convertURItoMessageTag(requestURI
.substring(6)); // the request is from store
// manager, more
// sophisticated security
// features could be added
// here
} else {
messageTag = ComponentUtility.convertURItoMessageTag(requestURI);
}
// the RequestURI before the switch
if (messageTag == null) {
System.out.println("Unknown message tag");
} else {
switch (messageTag) {
// handling of various messages
}
}
}
}
Sto cercando di inviare al server un tag messaggio e questa è l'eccezione che ottengo:
2015-01-19 18:16:43.739:WARN:oejs.AbstractHttpConnection:/MESSAGETAG
java.lang.NullPointerException
at com.project.business.Class2.functionFoo(Class2.java:98)
at com.project.server.Class2HTTPMessageHandler.handle(Class2HTTPMessageHandler.java:69)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:370)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:745)
aggiungi dopo il 'server.start();' la riga 'System.err.println (server.dump());' e segnala i risultati. (È probabile che il gestore non sia stato impostato sul server). Includere anche il sorgente per 'Class2HTTPMessageHandler' (poiché esistono modi per codificare il gestore in modo che si verifichi ancora un 404) –
@JoakimErdfelt ha appena aggiunto i risultati alla domanda – sokras
Sembra che il gestore sia presente e avviato. (strano che tu abbia un gestore diverso nel primo contro il secondo). Cosa fa l'implementazione del gestore? Puoi includere la fonte per il gestore? (interessato alla dichiarazione e a tutte le manipolazioni delle varie manipolazioni di richieste, comprese le eventuali dichiarazioni di stato handle (d | r)) –