精华内容
下载资源
问答
  • 详解AngularJS如何实现跨域请求发布于 2020-7-12|复制链接跨域请求一直是网页编程中的一个难题,在过去,绝大多数人都倾向于使用JSONP来解决这一问题。不过现在,我们可以考虑一下W3C中一项新的特性——CORS(Cross-...

    详解AngularJS如何实现跨域请求

    发布于 2020-7-12|

    复制链接

    跨域请求一直是网页编程中的一个难题,在过去,绝大多数人都倾向于使用JSONP来解决这一问题。不过现在,我们可以考虑一下W3C中一项新的特性——CORS(Cross-Origin Resource Sharing)了。

    跨域,前端开发中经常遇到的问题,AngularJS实现跨域方式类似于Ajax,使用CORS机制。下面阐述一下AngularJS中使用$http实现跨域请求数据。AngularJS XMLHttpRequest:$http用于读取远程服务器的数据

    ```javascript

    $http.post(url, data, [config]).success(function(){ ... });

    $http.get(url, [config]).success(function(){ ... });

    $http.get(url, [config]).success(function(){ ... });

    ```

    一、$http.jsonp【实现跨域】1.指定callback和回调函数名,函数名为JSON_CALLBACK时,会调用success回调函数,JSON_CALLBACK必须全为大写。2.指定其它回调函数,但必须是定义在window下的全局函数。url中必须加上callback。二、$http.get【实现跨域】1.在服务器端设置允许在其他域名下访问

    ```javascript

    response.setHeader("Access-Control-Allow-Origin", "*"); //允许所有域名访问

    response.setHeader("Access-Control-Allow-Origin", "http://www.123.com"); //允许www.123.com访问

    ```

    2.AngularJS端使用$http.get()三、$http.post【实现跨域】1.在服务器端设置允许在其他域名下访问,及响应类型、响应头设置

    ```javascript

    response.setHeader("Access-Control-Allow-Origin", "*");

    response.setHeader("Access-Control-Allow-Methods","POST");

    response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");

    ```

    2.AngularJS端使用$http.post() ,同时设置请求头信息

    ```javascript

    $http.post('http://localhost/ajax/getAllIndustryCategoty.pt',{languageColumn:'name_eu'},{'Content-Type':'application/x-www-form-urlencoded'}).success(function(data){

    $scope.industries = data;

    });

    ```

    四、实现方式跨域方式一【JSONP】:方法一:

    ```javascript

    $http.jsonp("http://localhost/sitesettings/getBadgeInfo.pt?jsonp=JSON_CALLBACK&siteid=137bd406").success(function(data){ ... });

    // The name of the callback should be the string JSON_CALLBACK.

    ```

    方法二【返回值,需要使用对应callback方法接收,但如何置于$scope?】:

    ```javascript

    $http.jsonp("http://localhost/sitesettings/getBadgeInfo.pt?jsonp=badgeabc&siteid=137bd406");

    function badgeabc(data){ ... }

    public String execute() throws Exception {

    String result = FAIL;

    response.setHeader("", "");

    SiteHandlerAction siteHandlerAction = (SiteHandlerAction)BeansFactory.getBean(SiteHandlerAction.class);

    BadgeHandlerAction badgeHandlerAction = (BadgeHandlerAction)BeansFactory.getBean(BadgeHandlerAction.class);

    if("".equals(siteid) || siteid == null || StringUtils.isBlank("jsonp")){

    result = FAIL;

    }else{

    Site site = siteHandlerAction.find(siteid);

    UserBadgeStatus userBadgeStatus = badgeHandlerAction.getUserBadgeStatus(site.getId());

    if(userBadgeStatus != null){

    result = "{\"t\":"+userBadgeStatus.getStyle()+",\"l\":"+userBadgeStatus.getSuspend_location()+",\"s\":"+site.getId()+"}";

    JSONObject jsonObj = JSONObject.fromObject(result);

    String json = jsonObj.toString();

    result = jsonp + "(" + json + ")";

    }

    }

    PrintWriter write = response.getWriter();

    write.print(result);

    write.flush();

    write.close();

    return NONE;

    }

    ```

    跨域方式二【$http.get() 】:

    ```javascript

    function getAdustryController($scope,$http){

    $http.get('http://localhost/ajax/getAllIndustryCategoty.pt?languageColumn=name_eu').success(function(data){

    $scope.industries = data;

    });

    }

    ```

    跨域方式三【$http.post()】:

    ```javascript

    function getAdustryController($scope,$http){

    $http.post('http://localhost/ajax/getAllIndustryCategoty.pt',{languageColumn:'name_eu'},{'Content-Type':'application/x-www-form-urlencoded'}).success(function(data){

    $scope.industries = data;

    });

    }

    // java端支持跨域请求

    public String execute(){

    response.setHeader("Access-Control-Allow-Origin", "*"); //允许哪些url可以跨域请求到本域

    response.setHeader("Access-Control-Allow-Methods","POST"); //允许的请求方法,一般是GET,POST,PUT,DELETE,OPTIONS

    response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type"); //允许哪些请求头

    ```

    可以跨域

    ```javascript

    SiteHandlerAction SiteHandler = (SiteHandlerAction) BeansFactory.getBean(SiteHandlerAction.class);

    List list = SiteHandler.getAllIndustryCategory(); //所有的分类集合

    JSONArray jsonArray = JSONArray.fromObject(list); //将list转为json

    String json = jsonArray.toString(); //转为json字符串

    try {

    PrintWriter write = response.getWriter();

    write.print(json);

    write.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    return NONE;

    }

    ```

    展开全文
  • Java后台如何实现跨域请求接口

    千次阅读 2017-09-22 15:38:24
    今天让新来的前端对接后台接口发现我定义的接口在他那边无法访问,后来搜索到的都是说的php如何解决,那么就写下java如何写吧 $.post("请求的url","请求的参数",function(data){ } 前端用ajax进行调用 @...

    今天让新来的前端对接后台接口发现我定义的接口在他那边无法访问,后来搜索到的都是说的php如何解决,那么就写下java如何写吧

    $.post("请求的url","请求的参数",function(data){
    
    }

    前端用ajax进行调用

    @RequestMapping("/queryGoodsInfo")
    public Map<String, Object> queryGoodsInfo(HttpServletRequest request,HttpServletResponse response) {
    		response.setHeader("Access-Control-Allow-Origin", "*");		
    }

    这里写的是通配*,特定的可以自己制定
    展开全文
  • 这里前端使用的是socket.io,后端是使用java的netty-socketio,这里是通过nginx设置头部来实现跨域,nginx实现cors 需要使用nginx判断method是因为浏览器第一次会发起一个options来检查服务器是否支持跨域访问 代码:...

    这里前端使用的是socket.io,后端是使用java的netty-socketio,这里是通过nginx设置头部来实现跨域,nginx实现cors
    需要使用nginx判断method是因为浏览器第一次会发起一个options来检查服务器是否支持跨域访问
    代码:
     

    if ($request_method = 'OPTIONS') {
    #注意 不需要添加Access-Control-Allow-Origin' 添加以后游览器会设置两个请求头导致报错
    #        add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            #
            # Custom headers and headers various browsers *should* be OK with but aren't
            #
            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
            #
            # Tell client that this pre-flight info is valid for 20 days
            #
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain; charset=utf-8';
            add_header 'Content-Length' 0;
            return 204;
         }

    java netty-socketio服务器代码:
            
     

    Configuration config = new Configuration();
            config.setHostname("192.168.3.74");
            config.setPort(26840);

    主要就是配置Hostname跟端口就可以


    js 前端代码:
        

    //直接使用域名进行访问不需要写端口
    socket = io.connect('ws://xxxxxxx.com/?token='+parmae);


        
    PS:防止连接错误以后一直在重新连接可以使用
        

    socket.on('connect_error', function (error) {
                    console.log(error);
    }); 

       

    PS2:项目放到服务器的时候需要使用内网ip否则会报Cannot assign requested address异常

    展开全文
  • 前面提到过要实现java安全跨域请求并交换数据的问题,这一篇博客我们就一起学习一下如何跨域访问资源并返回数据的问题。要实现跨域请求需要用到java的api,java.net.URL 和 java.net.URLConnection,先来简单的了解...

    前面提到过要实现java安全跨域请求并交换数据的问题,这一篇博客我们就一起学习一下如何跨域访问资源并返回数据的问题。

    要实现跨域请求需要用到java的api,java.net.URL 和 java.net.URLConnection,先来简单的了解一下java的这两个常用与网络编程的api。

    java.net.URL:

    认识IP、认识URL是进行网络编程的第一步。java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源。

    类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。

    简单的可以把URL理解为包含:协议、主机名、端口、路径、查询字符串和参数等对象。每一段可以独立设置。

    应用程序也可以指定一个“相对 URL”,它只包含到达相对于另一个 URL 的资源的足够信息。HTML 页面中经常使用相对 URL。

    相对 URL 不需要指定 URL 的所有组成部分。如果缺少协议、主机名称或端口号,这些值将从完整指定的 URL 中继承。

    由于 URL 不懂 URL 转义,所以它不会识别同一 URL 的对等编码和解码形式。

    注意,URI 类在某些特定情况下对其组成字段执行转义。建议使用 URI 管理 URL 的编码和解码,并使用 toURI() 和 URI.toURL() 实现这两个类之间的转换。也可以使用 URLEncoder 和 URLDecoder 类,但是只适用于 HTML 形式的编码,它与 RFC2396 中定义的编码机制不同。(以上介绍来自Java

    API doc)

    java.net.URLConnection:

    URLConnection类是一个抽象类,是实现应用程序和URL之间通信连接的所有类的超类,该类的实例可以用来读写URL所指的资源。在创建了URL对象之后,可以使用该URL对象的openConnection方法来创建URLConnection对象,之后就可以使用下面的方法完成各种各样的操作。

    abstract public void connect() throws IOException

    //打开与URL所指定资源的一个通信连接,如果调用该方法时连接已经打开,则忽略该调用。

    public URL getURL()

    //得到URLConnection对象的URL域。

    public int getContentLength()

    //得到content-type头域的值。

    public String getContentEncoding()

    //得到content-encoding头域的值。

    public long getDate()

    //得到date头域的值。

    public long getLastModified()

    //得到last-modified头域的值。

    public String getHeaderField(String name)

    //得到指定头域的名称。

    public Object getContent() throws IOException

    //得到URL连接的内容。该方法会先调用getContentType方法得到对象的内容类型,再做相应的处理。

    public InputStream getInputStream() throws IOException

    public OutputStream getOutputStream()throws IOException

    //得到URLConnection的输入或输出流。

    public void setDoInput(Boolean doinput)

    //设置URLConnection对象的doInput域的值。一个URL连接可以用于输入和(或)输出,如果准备将该URLConnection用于读取,可///以设置DoInput标志为true。默认即为true。

    public Boolean getDoInput()

    //得到DoInput标志的值。

    public void setDoOutput(Boolean dooutput)  //如果想通过URLConnection像服务端写东西,则设置为true,默认为false

    public Boolean getDoOutput()

    //设置或得到doOutput标志的值。

    public void setAllowUserInteracion(Boolean allowuserinteraction)

    public Boolean getAllowUserInteraction()

    //设置或得到allowUserInteraction域的值。

    public void setUseCaches(Boolean usecaches)

    public Boolean getUseCaches()

    //设置或得到useCaches域的值。

    public void setIfModifiedSince(long ifmodifiedsince)

    public long getIfModifiedSince()

    //设置或得到ifModifiedSince域的值。

    public void setRequestProperty(String key,String value)

    public String getRequestProperty(String key)

    //设置或得到普通的请求属性的值。Key为请求的关键字,例如:“accept”,value为与key相对应的值。

    ★注意:

    如果需要使用setDoOutput和setUseCaches等方法设置各种选项,必须是在URLConnection对象创建之后和连接之前。

    下面是一个测试实例:

    import java.io.BufferedReader;

    import java.io.BufferedWriter;

    import java.io.FileWriter;

    import java.io.InputStreamReader;

    import java.io.OutputStreamWriter;

    import java.net.URL;

    import java.net.URLConnection;

    import java.util.Map;

    import java.util.Set;

    /**

    * @version V1.0

    * @date: 2013-11-20 上午11:09:51

    */

    public class Test {

    public static String getDataFromURL(String strURL, Map param) throws Exception {

    URL url = new URL(strURL);

    URLConnection conn = url.openConnection();

    conn.setDoOutput(true);

    OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

    final StringBuilder sb;

    if (param != null) {

    sb = new StringBuilder(param.size() << 4);// 4次方

    final Set keys = param.keySet();

    for (final String key : keys) {

    final Object value = param.get(key);

    sb.append(key); // 不能包含特殊字符

    sb.append('=');

    sb.append(value);

    sb.append('&');

    }

    // 将最后的 '&' 去掉

    sb.deleteCharAt(sb.length() - 1);

    }else{

    sb = new StringBuilder(100 << 4);

    }

    // writer.write("email=fd3589@163.com&password=123");

    writer.write(sb.toString());

    writer.flush();

    writer.close();

    InputStreamReader reder = new InputStreamReader(conn.getInputStream(), "utf-8");

    BufferedReader breader = new BufferedReader(reder);

    BufferedWriter w = new BufferedWriter(new FileWriter("d:/1.txt"));//获取内容输出到指定文件

    String content = null;

    String result = null;

    while ((content = breader.readLine()) != null) {

    result += content;

    }

    w.write(result);

    w.flush();

    w.close();

    return result;

    }

    public static void main(String[] args) {

    String strURL = "http://www.baidu.com";

    try {

    String result = getDataFromURL(strURL, null);

    System.out.println(result);//输出获取到的内容,测试用

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    源代码下载:

    http://download.csdn.net/detail/smszhuang168/6700711

    展开全文
  • 2、js如何实现跨域? 一、JavaScript在发送AJAX请求时,URL的域名地址是使用绝对地址还是相对地址? 1、AJAX定义:        首先,题目中提及的AJAX定义如下:
  • 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的...
  • 前面提到过要实现java安全跨域请求并交换数据的问题,这一篇博客我们就一起学习一下如何跨域访问资源并返回数据的问题。要实现跨域请求需要用到java的api,java.net.URL和java.net.URLConnection,先来简单的了解...
  • 怎么实现在本地tomcat(localhost:8080)的情况下依然可以跨域访问获取数据? 准备工具,我们需要两个包: java-property-utils-1.9.1.jar 和 cors-filter-2.5.jar 对于一些新人来说,可能找包会比较麻烦,那么,我...
  • java使用代理解决跨域问题

    千次阅读 2017-11-26 20:29:47
    由于浏览器实现的同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源,所以AJAX是不允许跨域访问的。为了解决这一问题,我们使用java代码来访问服务。当javascript发出一个请求,首先访问...
  • 前面提到过要实现java安全跨域请求并交换数据的问题,这一篇博客我们就一起学习一下如何跨域访问资源并返回数据的问题。  要实现跨域请求需要用到java的api,java.net.URL 和 java.net.URLConnection,先来简单...
  • 前面提到过要实现java安全跨域请求并交换数据的问题,这一篇博客我们就一起学习一下如何跨域访问资源并返回数据的问题。 要实现跨域请求需要用到java的api,java.net.URL 和 java.net.URLConnection,先来简单的...
  • 以前也经常听到前端的同事说到跨域的问题,虽然明白是怎么一回事,但是没有具体研究过如何实现,如何通过ajax实现;最近因为工期紧张,所以我也被逼跟着做前台的东西,因为工作中遇到了跨域的问题,所以今天有时间...
  • 如何实现Ajax的跨域访问:以此记录我的实现过程 前端以Jsonp方法请求 后端java方法的实现 在此不多讲,直接上代码 html lang="en"> head> meta charset="UTF-8"> meta name="Generator" content="EditPlus®"> ...
  • Vue跨域问题如何配置

    2020-11-21 23:11:39
    如果要在vue项目中,通过axios访问Java后台的servelet,就必须解决跨域的问题,因为Java后端我们一般是部署在 tomcat服务器的,但是tomcat服务器所使用的端口一般为8080端口,然而vue项目由运行在另外的服务器上面,所有就...
  • 今天第一次做APP,我们实现了一个企业内部管理的APP系统,用Html5封装的,在前端ajax请求后台地址时,出现了跨域问题,导致访问失败。 后来经过一番研究,解决了。 我在后台的controller层加上了@CrossOrigin这个...
  • java问题

    2020-12-15 17:26:32
    什么是浏览器跨域访问操作,js如何实现? 浏览器从一个域名的网页去请求一个域名的资源时,域名、端口、协议任一不同,都是跨域。 三种方法实现js跨域访问: 1.基于iframe实现跨域。基于iframe跨域要求两个页面必须...
  • 试想,我正在开发一个 java应用,设置权限,对有些页面只有登录的人才允许访问,我们又知道 http 请求是无状态的,不会保留客户端信息,那我们如何实现这个功能呢,既然 请求是无状态的,也就是不能保留用户的登录...
  • 86. 如何实现跨域? 实现跨域有以下励方案: • 服务器端运行跨域设置CORS等于*; • 在单个接口使用注解@CrossOrigin运行跨域; • 使用jsonp跨域; 87. 说一下JSONP实现原理? jsonp:JSON with Padding,它...
  • Java】jsonp初学

    2019-01-29 11:28:06
    JavaScript为了安全有一个限制,不允许跨域访问数据(也就是不能访问服务端直接得到数据),但是可以跨域请求js片段 跨域: 两个url的域名不相同 url相同,但是端口不相同 ip不相同   2.如何实现jsonp 本质是...
  • Java客户端实现Kafka生产者与消费者实例 kafka的副本机制及选举原理剖析 基于kafka实现应用日志实时上报统计分析 RabbitMQ 初步认识RabbitMQ及高可用集群部署 详解RabbitMQ消息分发机制及主题消息分发 ...
  • Java Web开发技术大全

    2014-11-05 14:35:40
    3.5.3 实例:使用XMLHttpRequest跨域访问Web资源 3.5.4 实例:AJAX的3种交换数据方法 3.6 小结 第4章 Servlet技术 4.1 Servlet的Helloworld程序 4.1.1 实例:在My Eclipse中编写Helloworld程序 ...
  • java web开发技术大全

    热门讨论 2014-01-08 15:11:52
    3.5.3 实例:使用XMLHttpRequest跨域访问Web资源 3.5.4 实例:AJAX的3种交换数据方法 3.6 小结 第4章 Servlet技术 4.1 Servlet的Helloworld程序 4.1.1 实例:在My Eclipse中编写Helloworld程序 ...
  • java web技术开发大全(最全最新)

    千次下载 热门讨论 2012-10-10 07:21:38
    3.5.3 实例:使用XMLHttpRequest跨域访问Web资源 3.5.4 实例:AJAX的3种交换数据方法 3.6 小结 第4章 Servlet技术 4.1 Servlet的Helloworld程序 4.1.1 实例:在My Eclipse中编写Helloworld程序 4.1.2 ...
  • 如何获取SharePoint online(O365)的token

    千次阅读 2018-01-23 10:38:26
    尽管微软给我们提供了认证的API,不过在实际开发中,...这里我们可以用Java,C#,C/C++等一切语言来实现。JavaScript除外,因为涉及到跨域的问题。 一、获取Security Token。 通过post方式访问 [https://login.micro
  • (2)针对跨域数据交互问题,指出并分析了跨域缓存交互问题出现的原因,通过在HTML5存储技术的基础上,重写LocalStorage,用移动端本地的Sqlite进行数据维护,实现跨域数据交互。 (3)针对页面自适应问题,本文结合...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

java如何实现跨域访问

java 订阅