代码之家  ›  专栏  ›  技术社区  ›  Santhosh

无法从角6 HTTP客户端向Java Servlet发送请求

  •  -2
  • Santhosh  · 技术社区  · 6 年前

    如何从角度连接到Java servlet? 这是我的角度服务代码

    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);
      }
    }
    

    下面是AuthService

    import { Injectable } from "@angular/core";
    import { HttpEvent, HttpHandler, HttpInterceptor } from "@angular/common/http";
    import { HttpRequest } from "@angular/common/http";
    import { Observable } from "rxjs";
    
    @Injectable()
    export class AuthInterceptor implements HttpInterceptor {
      intercept(
        req: HttpRequest<any>,
        next: HttpHandler
      ): Observable<HttpEvent<any>> {
        const clonedRequest = req.clone({
          headers: req.headers.set("X-CustomAuthHeader", "aaaa")
        });
        console.log("req", req);
        console.log("new headers", clonedRequest.headers.keys());
    
        return next.handle(clonedRequest);
      }
    }
    

    JavaServlet在下面的端口运行

    http://localhost:8081/ServletSample/DataServlet
    

    下面是Java servlet代码

    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");
            }
    
    }
    

    但当我发送请求时,浏览器控制台出现以下错误

    访问位于' http://localhost:8081/ServletSample/DataServlet “起源” http://localhost:4201 '已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access control allow origin'头。

    1 回复  |  直到 6 年前
        1
  •  1
  •   SiddAjmera    6 年前

    从您得到的错误判断,您必须在servlet上启用cors以允许接受来自其他来源的调用。

    创建一个 private 方法并从发送实际响应的方法调用它。您可以设置 headers 在这种方法中。像这样:

    private void setAccessControlHeaders(HttpServletResponse resp) {
      resp.setHeader("Access-Control-Allow-Origin", "http://localhost:9000");
      resp.setHeader("Access-Control-Allow-Methods", "GET");
    }
    

    来源: Servlet - Cross-origin resource sharing (CORS)

    推荐文章