Jetty Server always returns 404 using Handler

I am working on a project and I am trying to create a server that listens for localhost address on port 8082 (I already have 8081 with another server)

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); } } 

This is the ComponentHTTPServerUtility class:

 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; } } 

When the server starts, I get the following message in the 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 SelectChannelConnector@0.0.0.0 :8082 

But if I go with my browser to: http: // localhost: 8082 /

I get Error 404. However, if I do the same with another server (port 8081), I get a blank page indicating that the server is running.

Sorry, but I canโ€™t fit in anymore. Any thoughts or suggestions would be greatly appreciated. I'm stuck in this for hours.

thanks

EDIT:

These are the results that I get for both servers after inserting a row:

System.err.println (server.dump ());

Working:

 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 SelectChannelConnector@0.0.0.0 :8081 org.eclipse.jetty.server.Server@2090b38d - STARTED +- com.project.server.Class1HTTPMessageHandler@35f3198f - 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 SelectChannelConnector@0.0.0.0 :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 | +- SelectChannelConnector@0.0.0.0 :8081 - STARTED +- PooledBuffers [0/ 1024@6144 ,0/ 1024@16384 ,0/ 1024@- ]/PooledBuffers [0/ 1024@6144 ,0/ 1024@32768 ,0/ 1024@- ] - STARTED +- org.eclipse.j etty.server.nio.SelectChannelConnector$ConnectorSelectorManager@ 42557280 - STARTED | +- org.eclipse.jetty.io.nio.SelectorManager$SelectSet@77d05385 keys=0 selected=0 id=0 | +- org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:569) | +- sun.nio.ch.WindowsSelectorImpl@4611dca9 keys=0 +- sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:8081] +- qtp831407528{8<=6<=8/254,0} - STARTED 

And this is from idle:

 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 SelectChannelConnector@0.0.0.0 :8082 org.eclipse.jetty.server.Server@183c97db - STARTED +- com.project.server.Class2HTTPMessageHandler@33767f84 - 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 SelectChannelConnector@0.0.0.0 :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 | +- SelectChannelConnector@0.0.0.0 :8082 - STARTED +- PooledBuffers [0/ 1024@6144 ,0/ 1024@16384 ,0/ 1024@- ]/PooledBuffers [0/ 1024@6144 ,0/ 1024@32768 ,0/ 1024@- ] - STARTED +- org.eclipse.j etty.server.nio.SelectChannelConnector$ConnectorSelectorManager@ 7f39425c - STARTED | +- org.eclipse.jetty.io.nio.SelectorManager$SelectSet@833e745 keys=0 selected=0 id=0 | +- org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:569) | +- sun.nio.ch.WindowsSelectorImpl@32787e9f keys=0 +- sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:8082] +- qtp597321988{8<=6<=8/254,0} - STARTED 

Primary Handler Declaration:

 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 } } } } 

I try to send a message tag to the server, and this exception I get:

  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) 
+6
source share
1 answer

When using Handlers, you must tell the server when the handler processed this request.

Remember to call baseRequest.setHandled(true);

Without this call, the handler terminates and then moves on to the next handler, which in your case will be the default handler that returns 404.

In addition, when working with Handlers, use the options that Handler gives you. The target parameter will have the path that was provided, as was seen on the raw request.

The behavior of request.getRequestURI() depends on various ServletContext information, and as such, the expected results are unlikely to be unless you use ServletContext .

Note. If you really want ServletContext and the normal servlet behavior to be able to be used using ServletContextHandler and real servlets, also in native mode. See the example of ManyServletContexts .

However, this situation is even easier to handle. Create a ContextHandlerCollection and set each handler to this collection using ContextHandler . See the ManyContexts example .

Example:

 ContextHandlerCollection contexts = new ContextHandlerCollection(); server.setHandler(contexts); ContextHandler stock = new ContextHandler("/stock"); stock.setHandler(new Class2HTTPMessageHandler()); contexts.add(stock); 

With this, you can skip all the validation of the requested URI and let Jetty handle it.

It should be noted that even Jetty uses the target a Handler parameter to execute this context logic.

+7
source

Source: https://habr.com/ru/post/981209/


All Articles