2017-03-21 64 views
0

我开发了SAPUI5应用程序并尝试使用servlet来实现某些服务器端功能。 我从这里得到了指导tutorial在SAPUI5应用程序中调用Servlet会显示404错误

我使用从SAPUI5控制器到Servlet的JQuery ajax调用,它可以在我的本地开发环境(即Eclipse Neon,localhost)上正常工作。

//Name of servlet is GetUserServlet , mapping defined in web.xml 

$.get('GetUserServlet', { 
          userName : "Hello World" 
         }, function(responseText) { 
          alert(responseText);  
    }); 

这Ajax调用成功调用的servlet(200种状态),当我在我的本地机器上运行这个从Eclipse中的Hello World的警告。基本上,我捕捉到的servlet参数的userName值,并发送回控制器js文件

string text = request.getParameter("username"); 
response.getWriter().write(text); 

但是,当这个应用程序部署到ABAP服务器的Ajax调用servlet的抛出404(未找到错误)所看到的网络Chrome开发人员工具的控制台。

是否有人在ABAP上部署了带有servlet功能的SAPUI5应用程序?

这是否是一些路径问题?

请指出错误原因或提示方向来解决此问题。

回答

4

你在混合一些东西。 UI5应用程序只是一个前端组件,在您的情况下,它与后端JEE应用程序(包含您的servlet)进行通信。我假设您正在本地部署您的servlet + UI5应用程序。一个Tomcat实例(或任何其他Web容器)。您无法将Java应用程序部署到BSP存储库。

从SCN链接的页面指的是旧的ABAP BSP功能(现在已经过时; BSP存储库仅用于存储UI5应用程序的静态文件)。

将JEE应用程序(例如WAR)部署到ABAP后端的唯一方法是后端实际上是ABAP+Java Netweaver installation。说实话,我从来没有见过这样的系统在使用。在这种情况下,您甚至不需要使用BSP存储库,您可以在服务器的JEE“引擎”内部署JEE后端(servlet以及其他任何东西)和静态资源(UI5应用程序)。

否则,如果你只有一个简单的ABAP系统,你有以下几种可能:

  • 变换你的servlet在ABAP REST Service或者一个Gateway Service(取决于你想要达到的目标)。
  • 将应用程序部署到某个外部Java Web容器或应用程序服务器。通过JCo (RFC)或通过其他一些机制(SOAP,REST等)与ABAP后端进行通信。
  • 将应用程序部署到SAP Cloud Platform并使用SAP Cloud Connector与ABAP后端进行通信。
+0

您好serban,该servlet用于连接到SQL Server并从中检索数据并显示在SAPUI5视图中,您认为我的方法一定是怎样的? –

+0

当后端是ABAP时正在使用OData服务,但如何连接到非SAP后端系统?问题是在ABAP服务器上部署,因为在本地,servlet是从SAPUI5控制器成功调用的,如上面发布的问题所述? –

+0

正确的meif我在下面的方法是错误的 - 我部署SAPUI5应用程序没有servlet - >我在另一台机器上安装TOmCat服务器和它的主机servlet - >从我的SAPUI5控制器js文件,我做POST ajax调用并提供参数给url(servlet) –

1

您得到404的原因是因为servlet未部署在SAP Server中。 您可以随时连接到从SAP UI5应用任何Servlet或者REST/Web服务API,但是你将有以下事情要照顾才能够访问这些服务:

  • 服务应正确部署在服务器上,如果它是一个 ODATA或Hana服务,那么它将很容易访问,因为它将在 相同的域中,并且可以部署在网关或HANA服务器中。

  • 如果该服务被部署这是一个 不同的域,那么你需要更新你的 的servelt /服务的响应头允许跨源接入,否则浏览器会 块,并给跨产地任何其他服务器上不允许错误。

的3个主要的反应,你将需要在这种情况下,标题是:

  • 访问控制允许来源:这可以是一个“*”或逗号分隔域你想允许访问的名称。

  • 访问控制允许的方法:GET,POST等

  • 访问控制允许报头:你可以告诉它的头部,你希望浏览器允许跨域服务,例如作为来源,内容类型,接受;

相关问题