无法加载XMLHttpRequesthttp://localhost:8080/ScoSopService. 否';访问控制允许原点';使用angular 2和java

无法加载XMLHttpRequesthttp://localhost:8080/ScoSopService. 否';访问控制允许原点';使用angular 2和java,java,angular,typescript,Java,Angular,Typescript,我收到此错误,XMLHttpRequest无法加载。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源代码“”。我的后端是用java编写的,前端是angular 2应用程序。这是我的java代码 package com.walmart.ScoSopService; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import j

我收到此错误,XMLHttpRequest无法加载。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源代码“”。我的后端是用java编写的,前端是angular 2应用程序。这是我的java代码

 package com.walmart.ScoSopService;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.ws.rs.Consumes;
import javax.ws.rs.OPTIONS;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;


@Path("/ScoSopService")




public class ScoSopFileUpload {

private static final String strUploadFolder = "C:/uploadedFiles/"; 

public ScoSopFileUpload() {

}
@Context 
private UriInfo context; 

@OPTIONS
public Response options() {
    return Response.status(200)
        .header("Access-Control-Allow-Origin", "http://localhost:3000")
        .header("Access-Control-Allow-Methods", "OPTIONS, POST")
        .header("Access-Control-Allow-Headers", "X-Requested-With, Origin, Content-Type")
        .build();
}

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile (
                @FormDataParam("file") InputStream uploadedInputStream,
                @FormDataParam("file") FormDataContentDisposition fileDetail){
                //@FormDataParam("sopName") String strSopName){
    if(uploadedInputStream == null || fileDetail == null){
        return Response.status(400).entity("Invalid form data").build(); 
    }

    try {
        createFolderIfNotExists(strUploadFolder);
    }catch (SecurityException se){
        return Response.status(500).entity("Can not create destination folder on server").build(); 
    }

    String uploadedFileLocation = strUploadFolder + fileDetail.getFileName(); 

    try {
        saveToFile(uploadedInputStream,uploadedFileLocation); 
    } catch (IOException e){
        return Response.status(500).entity("Can not save file").build(); 
    }

    return Response.status(200)
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Methods", "OPTIONS, POST")
            .header("Access-Control-Allow-Headers", "X-Requested-With, Origin, Content-Type")
            .entity("File saved to " + uploadedFileLocation).build();



}

private void saveToFile(InputStream inStream, String target) throws IOException {
    OutputStream out = null; 
    int read = 0;
            byte[] bytes = new byte[1024]; 

            out = new FileOutputStream(new File(target)); 
            while ((read = inStream.read(bytes)) != -1){
                out.write(bytes, 0 , read); 
            }
            out.flush(); 
            out.close();

}

private void createFolderIfNotExists(String dirName) throws SecurityException {
    File theDir = new File(dirName); 
    if (!theDir.exists()){
        theDir.mkdir(); 
    }
}


  }
这是我的打字稿

upLoad() {
let strSopName : string = (<HTMLInputElement>document.getElementById("sopName")).value; 
if(strSopName == "" || strSopName == null || strSopName == "Error you must enter a sop name"){
    strSopName = "Error you must enter a sop name"
    return;
}

this.makeFileRequest("http://localhost:8080/ScoSopService", [], this.filesToUpload).then((result) => {
    console.log(result); 
}, (error) => {
    console.error(error);
}); 

}

makeFileRequest(url: string, params: Array<string>, files: Array<File>){
return new Promise((resolve, reject) => {
    var formData: any = new FormData(); 
    var xhr = new XMLHttpRequest(); 
    for(var i = 0; i < files.length; i++){
        formData.append("uploads[]", files[i], files[i].name); 
    }
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                resolve(JSON.parse(xhr.response));
            }else {
                reject(xhr.response); 
            }
        }
    }
    xhr.open("POST", url, true); 
    xhr.send(formData); 
})
}
upLoad(){
让strSopName:string=(document.getElementById(“sopName”).value;
如果(strSopName==“”| | strSopName==null | | strSopName==“错误,您必须输入sop名称”){
strSopName=“错误您必须输入sop名称”
返回;
}
此.makeFileRequest(“http://localhost:8080/ScoSopService,[],this.filesToUpload)。然后((结果)=>{
控制台日志(结果);
},(错误)=>{
控制台错误(error);
}); 
}
makeFileRequest(url:string,params:Array,files:Array){
返回新承诺((解决、拒绝)=>{
var formData:any=new formData();
var xhr=new XMLHttpRequest();
对于(var i=0;i
我已经搜索了这个网站,似乎我解决了这个问题,但我仍然得到那个错误。我的java代码经过编译,我在服务上得到了一个hello world。我不是一个很好的java程序员,所以这似乎是另一个错误,任何帮助都将不胜感激。我认为它在我的web.xml中,这就是我的web.xml中的内容

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

 <web-app>
  <display-name>Archetype Created Web Application</display-name>
 </web-app>

Web应用程序创建的原型

为了安全起见,授权服务器可以使用的最新数据之一。这称为跨源资源共享(CORS)。要执行此操作,请确保客户端(URL、IP…)未授权任何服务器。如果您使用Chrome浏览器,您可以安装扩展名“Allow Control Allow Origin:*”,并且可以正常工作。但是,还有其他方法……你是说我不能通过tomcat在本地主机上运行angular2应用程序,在本地主机上运行java web服务吗?这就是它中断的原因?为了安全起见,授权服务器可以使用的最新数据之一。这称为跨源资源共享(CORS)。要执行此操作,请确保客户端(URL、IP…)未授权任何服务器。如果您使用Chrome浏览器,您可以安装扩展名“Allow Control Allow Origin:*”,并且可以正常工作。但是,还有其他方法……你是说我不能通过tomcat在本地主机上运行angular2应用程序,在本地主机上运行java web服务吗?这就是它断裂的原因?