无法加载XMLHttpRequesthttp://localhost:8080/ScoSopService. 否';访问控制允许原点';使用angular 2和java
我收到此错误,XMLHttpRequest无法加载。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源代码“”。我的后端是用java编写的,前端是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
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服务吗?这就是它断裂的原因?