无法从angular 6 httpclient向java servlet发送请求
如何从Angular连接到Javaservlet? 这是我的角度服务代码无法从angular 6 httpclient向java servlet发送请求,java,angular,servlets,Java,Angular,Servlets,如何从Angular连接到Javaservlet? 这是我的角度服务代码 import { Injectable } from "@angular/core"; import { HttpClient } from "@angular/common/http"; import { Observable } from "rxjs"; @Injectable({ providedIn: "root" }) export class UploadService { url: string;
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs";
@Injectable({ providedIn: "root" })
export class UploadService {
url: string;
constructor(private http: HttpClient) {
this.url = "http://localhost:8081/ServletSample/";
}
uploadFile(data): Observable<any> {
return this.http.post(this.url, data);
}
sendData(data): Observable<any> {
return this.http.post(this.url + "DataServlet", data);
}
}
下面是Javaservlet代码
package com.test.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DataServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 548987777;
public DataServlet() {
super();
System.out.println("DataServlet constructor called");
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
System.out.println("DataServlet \"Init\" method called"+ config.toString());
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
System.out.println("DataServlet \"Destroy\" method called");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
{
System.out.println("DataServlet doGet method called"+ request);
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("DataServlet doPost method called");
}
}
但当我在浏览器控制台中发送请求时出错
CORS策略已阻止从源站“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源站”标头。
从您得到的错误判断,您必须在servlet上启用CORS以允许接受来自其他来源的调用 只需创建一个
private
方法,并从发送实际响应的方法调用它。您可以在此方法中设置标题。大概是这样的:
private void setAccessControlHeaders(HttpServletResponse resp) {
resp.setHeader("Access-Control-Allow-Origin", "http://localhost:9000");
resp.setHeader("Access-Control-Allow-Methods", "GET");
}
资料来源:
您能用您尝试过的更新代码更新问题吗?我还建议你把源文章通读一遍。
package com.test.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DataServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 548987777;
public DataServlet() {
super();
System.out.println("DataServlet constructor called");
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
System.out.println("DataServlet \"Init\" method called"+ config.toString());
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
System.out.println("DataServlet \"Destroy\" method called");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
{
System.out.println("DataServlet doGet method called"+ request);
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("DataServlet doPost method called");
}
}
private void setAccessControlHeaders(HttpServletResponse resp) {
resp.setHeader("Access-Control-Allow-Origin", "http://localhost:9000");
resp.setHeader("Access-Control-Allow-Methods", "GET");
}