2016-06-09 37 views
0

使用的doGet在碼頭9另一個HTML頁面,我想發送一些數據使用的Javascript服務器:錯誤而轉發到在碼頭9

var logInBtn = new sap.ui.commons.Button({text: "LogIn", press:function(){ 

     // Retrieve the information from the text fields 
     var oParameters = { 
       "userIDInput" : sap.ui.getCore().getElementById('userIDInput').getValue(), 
       "passwordInput" : sap.ui.getCore().getElementById('passwordInput').getValue() 
     }; 

     var oModel = new sap.ui.model.json.JSONModel(); 
     //console.log(oParameters); 
     // Post data to the server 
     oModel.loadData("10.161.34.8:8080", oParameters, true, 'GET'); 
     } 
    }); 

然後,我要轉發的當前頁面基於這些數據。我可以收到數據,但我無法轉發該網頁。 這是的servlet的doGet方法:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
//***I have tried the relative address as well*** 
     request.getRequestDispatcher("http://10.161.34.8:8080/UserAccount.html").forward(request, response); 
    } 

這是我處理

Server server = new Server(8080); 

    ServletHandler ServHandler = new ServletHandler(); 
    ServHandler.addServletWithMapping(Servlet.class, "/*"); 

    FilterHolder cors = new FilterHolder(CrossOriginFilter.class); 
    cors.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*"); 
    cors.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "*"); 
    cors.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,HEAD"); 
    cors.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "X-Requested-With,Content-Type,Accept,Origin"); 
    cors.setName("cross-origin"); 
    FilterMapping fm = new FilterMapping(); 
    fm.setFilterName("cross-origin"); 
    fm.setPathSpec("*"); 
    ServHandler.addFilter(cors, fm); 

    ResourceHandler resource_handler1 = new ResourceHandler(); 
    resource_handler1.setDirectoriesListed(true); 
    resource_handler1.setWelcomeFiles(new String[]{ "index.html"});//webpage to show up 
    resource_handler1.setResourceBase("../../Documents/GitHub/ProjectASB/WebContent/");//The address of the content(. must be there) 
    ContextHandler contextHandler1= new ContextHandler("/"); 
    contextHandler1.setHandler(resource_handler1); 

    HandlerList handlers = new HandlerList(); 
    handlers.setHandlers(new Handler[] { contextHandler1, ServHandler, new DefaultHandler() }); 
    server.setHandler(handlers); 

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

,但我得到這個錯誤

2016-06-09 13:48:51.629:INFO:oejs.Server:main: jetty-9.1.1.v20140108 
2016-06-09 13:48:51.640:INFO:oejsh.ContextHandler:main: Started [email protected]{/,null,AVAILABLE} 
2016-06-09 13:48:51.714:INFO:oejs.ServerConnector:main: Started [email protected]{HTTP/1.1}{0.0.0.0:8080} 
2016-06-09 13:48:59.919:WARN:oejur.FileResource:qtp400136488-28: bad alias for C:\Users\i853260\Documents\GitHub\ProjectASB\WebContent\10.161.34.8:8080: java.io.IOException: The filename, directory name, or volume label syntax is incorrect (path C:\Users\i853260\Documents\GitHub\ProjectASB\WebContent\10.161.34.8:8080, working dir C:\Users\i853260\hdbstudio_rev\NoiseServer) 
2016-06-09 13:48:59.926:WARN:oejs.ServletHandler:qtp400136488-28: /10.161.34.8:8080 
java.lang.NullPointerException: while trying to invoke the method javax.servlet.RequestDispatcher.forward(javax.servlet.ServletRequest, javax.servlet.ServletResponse) of a null object returned from javax.servlet.http.HttpServletRequest.getRequestDispatcher(java.lang.String) 
    at servletPackage.Servlet.doGet(Servlet.java:35) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:717) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1644) 
    at org.eclipse.jetty.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:248) 
    at org.eclipse.jetty.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:211) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1615) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:550) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:481) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
    at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
    at org.eclipse.jetty.server.Server.handle(Server.java:459) 
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281) 
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232) 
    at org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536) 
    at java.lang.Thread.run(Thread.java:812) 

回答

1

HttpServletRequest.getRequestDispatcher(String)需要一條路徑。

相對於當前servlet的路徑,而不是完整的URL。

您可能還希望由於您使用getRequestDispatcher()必須使用一個ServletContextHandler試圖使用就可以了.forward()

//更新

之前測試上的getRequestDispatcher(String)返回空(或更好,例如WebAppContext),因爲getRequestDispatcher()需要有效的ServletContext才能運行。

使用原始ServletHandler是不是你一個不錯的選擇(您的需求已經超越階級)

ServletHandler真的是更大的內部類來ServletContextHandler無論如何,用來將ServletContext綁定到列表Servlet以及任何你所擁有的過濾器的調用鏈。

注:

  • 請勿混用ResourceHandlerServletContextHandler,他們做同樣的事情,反而會互相爭鬥。
  • ServletContextHandlerbaseResource定義ServletContext基礎資源,並使用由DefaultServlet爲靜態文件,以及被用於上下文具體配置/資源查找
  • 使用DefaultServlet,其光年更好然後原始的ResourceHandler和更多的可配置。
  • 請勿將servlets映射到/*,否則您將負責提供來自服務器的所有內容,不允許Jetty通過ServletContextHandler行爲提供靜態內容。
public static void main(String args[]) throws Exception { 
    Server server = new Server(8080); 

    File webroot = new File("Documents/Project/WebContent"); 
    if (!webroot.exists()) 
     throw new FileNotFoundException("Unable to find webroot: " + webroot); 

    ServletContextHandler context = new ServletContextHandler(); 
    context.setContextPath("/"); 
    context.setBaseResource(Resource.newResource(webroot)); 
    context.setWelcomeFiles(new String[] {"index.html"}); 

    context.addServlet(DummyServlet.class, "/dummy/"); 

    FilterHolder cors = new FilterHolder(CrossOriginFilter.class); 
    cors.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*"); 
    cors.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "*"); 
    cors.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,HEAD"); 
    cors.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, 
     "X-Requested-With,Content-Type,Accept,Origin"); 
    context.addFilter(cors, "/dummy/*", EnumSet.of(DispatcherType.REQUEST)); 

    // Lastly, the default servlet for root content 
    // It is important that this is last. 
    ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class); 
    holderPwd.setInitParameter("dirAllowed", "true"); 
    context.addServlet(holderPwd, "/"); 

    HandlerCollection handlers = new HandlerCollection(); 
    handlers.addHandler(context); 
    handlers.addHandler(new DefaultHandler()); 

    server.setHandler(handlers); 

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

謝謝Joakim,我嘗試了相對地址的真實性,沒有任何工作。我需要在JavaScript端添加一些東西嗎? –

+0

哦,我看你沒有使用'ServletContextHandler',但是你直接使用內部的'ServletHandler'類(不是最好的選擇)。讓我看看我是否可以重做你的例子... –

+0

哦,謝謝你正在幫助整個團隊! –