首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >servlet与角4之间的通信

servlet与角4之间的通信
EN

Stack Overflow用户
提问于 2020-04-03 09:57:20
回答 1查看 337关注 0票数 1

我正在创建一个java web应用程序,使用控制器侧的servlet和前端的角.这个应用程序使用javamail从电子邮件帐户(如gmail)获取电子邮件,然后以json格式返回它们。这些都是我做的..。我可以用servlet以json格式返回电子邮件,但我的问题是我不能用角显示它们。我试着用这个网站"http://jsonplaceholder.typicode.com/users“测试我的代码,用json测试我的角度,它带来了所有的数据,但是当我修改它,用我的应用程序尝试它时,它没有带来任何东西。下面是我的应用程序中json数据的一个例子。

这就是打印这些数据的servlet代码:

代码语言:javascript
复制
        // TODO Auto-generated method stub
        doGet(request, response);
        EmailAccount emailaccount= new EmailAccount("myemail@gmail.com","HardPas$$word!@");
        EmailServices read = new EmailServices();
        ArrayList<Email> emails = new ArrayList<Email>();
        emails = read.readEmail(emailaccount);      

        String json = new Gson().toJson(emails.get(2));
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(json);
        } 

这是角度上的代码来获取json数据并显示出来:

html

代码语言:javascript
复制
<form action="http://127.0.0.1:8080/oneBox/ReadEmail" method="POST" (submit)="onSubmit()">
    <input type="submit" value="submit">
</form>
        <ul >
            <li>
                {{users.id}}
            </li>
            <li>
                {{users.title}}  ---- {{users.from}}
            </li>
            <li>
                {{users.to}}
            </li>
        </ul>   

构成部分:

代码语言:javascript
复制
import { Component, OnInit } from '@angular/core';
import { MyServiceService } from '../../services/my-service.service';
import {EmailModel} from '../../models/user.model'




@Component({
  selector: 'app-my-compo',
  templateUrl: './my-compo.component.html',
  styleUrls: ['./my-compo.component.css']
})
export class MyCompoComponent implements OnInit {

users:EmailModel;

  constructor(public service:MyServiceService) {



   }

   onSubmit(){
    this.service.getUsers().subscribe(

      users => {this.users=users;});
   }

  ngOnInit(): void {
  }

}

我的服务代码是:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';

import {map, catchError} from "rxjs/operators";

import { Observable, throwError } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class MyServiceService {


url="http://127.0.0.1:8080/oneBox/ReadEmail";

getUsers():Observable<any>{

    return this.http.get(this.url)
           .pipe(map(res => res.json()));

            }

  constructor(public http: Http) { }
}

因此,我的问题是,我如何从本地服务器获取这些json数据,并使用角打印它?

EN

回答 1

Stack Overflow用户

发布于 2020-04-03 11:15:47

您的后端似乎运行良好,因为您从Java端获得了正确的JSON响应。

在您的服务类中尝试以下操作:

代码语言:javascript
复制
getUsers(): Observable<any>{
   return this.http.get<any>(this.url); 
}

在组件控制器中添加错误回调并记录两个字段的结果,然后在注释中提供结果:

代码语言:javascript
复制
onSubmit(){
  this.service.getUsers().subscribe(
    users => {
        console.log(users);
        this.users=users;
    }, 
    error => {
       console.log(error);
    });
}

此外,我认为在POST和GET请求之间存在一种误解,因为我在您的形式中看到了这一点。删除表单中的methodaction属性,因为在角度上这不会产生任何影响。您可以使用(submit)事件提交表单,这样就足够了。

最后但并非最不重要的是,你在后台考虑过CORS政策吗?这是前端/后端分离的问题,因为后端只允许来自同一个IP和端口的请求,因此不允许您的角度前端请求。这可能对你有帮助:https://howtodoinjava.com/servlets/java-cors-filter-example/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61009295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档