2014-06-16 32 views
0

因此,我有一個包含客戶端應用程序的spring rest項目。 我可以在本地tomcat上運行該服務,並獲取查詢「http://:8080/books」的響應。 我可以設置應用程序的Apache服務器,並轉到「http://」看到我的客戶端應用程序(apache的htdocs目錄指向項目客戶端應用程序目錄)。與客戶端在角js的春天休息項目 - 如何通過ajax接近其餘服務

我無法做的事情是發送阿賈克斯休息查詢的服務。 我使用角度js,因此它看起來像: $ http.get(「http://:8080/books」).success(...)。error(...); 並且它總是進入錯誤回調方法。

在調試器/網絡選項卡中,我看到請求狀態爲「取消」。查看請求的詳細信息,我在「請求標題」標題旁邊看到消息:「小心:顯示臨時標題」。

這裏是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     version="3.0"> 

    <display-name>Library Application</display-name> 

    <context-param> 
     <param-name>contextClass</param-name> 
     <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
    </context-param> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>com.library.application</param-value> 
    </context-param> 
    <context-param> 
     <param-name>spring.profiles.active</param-name> 
     <param-value>prod</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- Processes application requests --> 
    <servlet> 
     <servlet-name>BooksServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 

     <init-param> 
      <param-name>contextClass</param-name> 
      <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
     </init-param> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>com.library.service.config.ControllerConfig</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>BooksServlet</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

我的項目結構爲:

  • SRC
    • 主要
      • 的Java
      • 資源
      • Web應用程序
        • 資源
        • WEB-INF
    • 測試

是因爲產地的不同(主要是端口)? 我應該添加一些代碼到我的web.xml通過tomcat爲客戶端提供服務嗎?如果是這樣如何?

謝謝。

+0

請注意,Tomcat也是一個Apache項目,你是說你正在運行Apache Web服務器和Apache Tomcat兩者? – Philipp

回答

0

Angular http使用相對URL。

例如使用:www.stackoverflow.com

而且

$http.get('/api/search?' 

會打電話:www.stackoverflow.com/api/search

您可以使用瀏覽器獲得請求測試您的REST API,併爲後期的諸多插件之一/把/刪除。

(順便說一句,他們是僅僅指剛由URL)的

1

我想你有跨域請求一個問題(是的,不同的端口是瀏覽器的另一個域,將取消爲安全起見,如果請求服務器將不包含跨域標頭)。試試這個頭文件添加到您的REST響應:

responseHeaders.add("Access-Control-Allow-Origin", "*"); 

,如果你需要的cookie,你可能需要這個,以及:

responseHeaders.add("Access-Control-Allow-Credentials", "true"); 

在第二種情況下,你必須設置一個原點,「*」會here

0

發現它在這種情況下

更多信息無法正常工作。 感謝所有的答案,我一直在尋找春季解決方案。 +1 JohnnyAW爲您解答。

在我的控制器配置類,我延長WebMvcConfigurerAdapter和覆蓋的addResourceHandlers方法指着我的客戶端的web應用程序目錄:

@Configuration 
@EnableWebMvc 
@ComponentScan("com.library.service") 
public class ControllerConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 
} 

請注意,它的作品,因爲配置與@EnableWebMvc註解。

相關問題