webapi 无法访问已释放的对象_webapi释放 - CSDN
精华内容
参与话题
  • java web api接口调用

    万次阅读 2017-08-17 13:27:27
    Web Services 被W3C进行了标准化定义。 Web Services 发布到网上,可以公布到某个全局注册表,自动提供服务URL,服务描述、接口调用要求、参数说明以及返回值说明。比如中国气象局可以发布天气预报服务。所有其它...

    Web Services 被W3C进行了标准化定义。

    Web Services 发布到网上,可以公布到某个全局注册表,自动提供服务URL,服务描述、接口调用要求、参数说明以及返回值说明。比如中国气象局可以发布天气预报服务。所有其它网站或手机App如果需要集成天气预报功能,都可以访问该Web Service获取数据。

    Web Services 主要设计目标是提供公共服务。

    Web Services 全部基于XML。按照W3C标准来描述服务的各个方面(参数、参数传递、返回值及服务发布发现等)。要描述清楚Web Services标准的各个方面,可能需要2000页的文档。
    Web Services 还有标准的身份验证方式(非公共服务时验证使用者身份)。

    轻量化的Web API

    公司内部使用的私有服务,我们知道它的接口Url,因此不需要自动发现它。我们有它的服务接口文档,因此也不需要自动描述和自动调用。
    即使Web Services的特性 官网:www.fhadmin.org(自动发现、自动学会调用方式)很美好,但私有服务往往不需要这些。

    Web API一般基于HTTP/REST来实现,什么都不需要定义,参数(输入的数据)可以是JSON, XML或者简单文本,响应(输出数据)一般是JSON或XML。它不提供服务调用标准和服务发现标准。可以按你服务的特点来写一些简单的使用说明给使用者。

    获取远程数据的方式正在从Web Services向Web API转变。

    Web Services的架构要比Web API臃肿得多,它的每个请求都需要封装成XML并在服务端解封。因此它不易开发且吃更多的资源(内存、带宽)。性能也不如Web API。

       

      /**
         * 根据指定url,编码获得字符串 官网:www.fhadmin.org
         * 
         * @param address
         * @param Charset
         * @return
         */
        public static String getStringByConAndCharset(String address, String Charset) {

            StringBuffer sb;
            try {
                URL url = new URL(address);

                URLConnection con = url.openConnection();
                BufferedReader bw = new BufferedReader(new InputStreamReader(con.getInputStream(), Charset));
                String line;
                sb = new StringBuffer();
                while ((line = bw.readLine()) != null) {
                    sb.append(line + "\n");
                }
                bw.close();
            } catch (Exception e) {
                e.printStackTrace();
                sb = new StringBuffer();
            }

            return sb.toString();
        }

        /**
         * 通过post方式获取页面源码
         * 
         * @param urlString
         *            url地址
         * @param paramContent
         *            需要post的参数
         * @param chartSet
         *            字符编码(默认为ISO-8859-1)
         * @return
         * @throws IOException
         */
        public static String postUrl(String urlString, String paramContent, String chartSet, String contentType) {
            long beginTime = System.currentTimeMillis();
            if (chartSet == null || "".equals(chartSet)) {
                chartSet = "ISO-8859-1";
            }

            StringBuffer result = new StringBuffer();
            BufferedReader in = null;

            try {
                URL url = new URL((urlString));
                URLConnection con = url.openConnection();

                // 设置链接超时
                con.setConnectTimeout(3000);
                // 设置读取超时
                con.setReadTimeout(3000);
                // 设置参数
                con.setDoOutput(true);
                if (contentType != null && !"".equals(contentType)) {
                    con.setRequestProperty("Content-type", contentType);
                }

                OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream(), chartSet);
                writer.write(paramContent);
                writer.flush();
                writer.close();
                in = new BufferedReader(new InputStreamReader(con.getInputStream(), chartSet));
                String line = null;
                while ((line = in.readLine()) != null) {
                    result.append(line + "\r\n");
                }
                in.close();
            } catch (MalformedURLException e) {
                logger.error("Unable to connect to URL: " + urlString, e);
            } catch (SocketTimeoutException e) {
                logger.error("Timeout Exception when connecting to URL: " + urlString, e);
            } catch (IOException e) {
                logger.error("IOException when connecting to URL: " + urlString, e);
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (Exception ex) {
                        logger.error("Exception throws at finally close reader when connecting to URL: " + urlString, ex);
                    }
                }
                long endTime = System.currentTimeMillis();
                logger.info("post用时:" + (endTime - beginTime) + "ms");
            }
            return result.toString();
        }

        /**
         * 发送https请求 官网:www.fhadmin.org
         * @param requestUrl  请求地址
         * @param requestMethod  请求方式(GET、POST)
         * @param outputStr  提交的数据
         * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
         * @throws NoSuchProviderException 
         * @throws NoSuchAlgorithmException 
         */
        public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) throws Exception {
            JSONObject json = null;
            // 创建SSLContext对象,并使用我们指定的信任管理器初始化
            TrustManager[] tm = { new MyX509TrustManager() };
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
            // 从上述SSLContext对象中得到SSLSocketFactory对象
            SSLSocketFactory ssf = sslContext.getSocketFactory();

            URL url = new URL(requestUrl);
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(ssf);

            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            // 设置请求方式(GET/POST)
            conn.setRequestMethod(requestMethod);

            // 当outputStr不为null时向输出流写数据
            if (null != outputStr) {
                OutputStream outputStream = conn.getOutputStream();
                // 注意编码格式
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.close();
            }

            // 从输入流读取返回内容
            InputStream inputStream = conn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String str = null;
            StringBuffer buffer = new StringBuffer();
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }

            // 释放资源
            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();
            inputStream = null;
            conn.disconnect();
            json = JSON.parseObject(buffer.toString());
            String errcode = json.getString("errcode");
            if (!StringUtil.isBlank(errcode) && !errcode.equals("0")) {
                logger.error(json.toString());
                throw new SysException("ERRCODE:"+ errcode);
            }
            return json;
        }

    }

    展开全文
  • Java Web----Java Web的数据库操作(一)

    万次阅读 多人点赞 2013-08-06 17:07:36
    Java Web的数据库操作 一、JDBC技术 1、JDBC简介  JDBC是Java程序与数据库系统通信的标准API,它定义在JDK的API中,通过JDBC技术,Java程序可以非常方便地与各种数据库交互,JDBC在Java程序与数据库系统之间假期了...

    Java Web的数据库操作

    一、JDBC技术

    1、JDBC简介

           JDBC是Java程序与数据库系统通信的标准API,它定义在JDK的API中,通过JDBC技术,Java程序可以非常方便地与各种数据库交互,JDBC在Java程序与数据库系统之间假期了一座桥梁。

           JDBC由一组用Java语言编写的类和接口组成,它对数据库的操作提供了基本方法,但由于数据库种类跟多且多有不同,所以对数据库的细节操作由数据库厂商进行实现,且厂商需要提供数据库的驱动程序,下图为Java程序与数据库相交互的示意图:

    2、JDBC连接数据库的过程

    l  下载驱动包

          在JDK中,不包含数据库的驱动程序,使用JDBC操作数据库需要实现下载数据库厂商提供的驱动包,并导入到开发环境中。

    l  注册数据库驱动

          连接数据库前,需要将数据库厂商提供的数据库驱动注册到JDBC的驱动管理器中,一般是通过将数据库驱动类加载到JVM来实现的,例如连接MYSQL数据库:

                  Class.forName(“com.mysql.jdbc.Driver”);

    l  构建数据库连接URL

          URL由数据库厂商制定,不同数据库它的URL有所区别,但都符合一个基本的格式,即“JDBC协议+IP地址或域名+端口+数据库名称”,例如MYSQL数据库为”jdbc:mysql://localhost:8080/test”。

          前两步中不同数据库有所差别,不同数据库连接请参考这篇文章:

          http://blog.csdn.net/zhai56565/article/details/8959184

    l  获取Connection对象

          通过驱动管理器获得数据库的连接Connection,只有创建此对象后才可以对数据库进行操作,方法如下:

          DriverManager.getConnection(url , username , password);

           下面是一个完整的连接数据库的例子:

     try {
    
                         //加载数据库驱动,注册到去送管理器
    
                         Class.forName("com.mysql.jdbc.Driver");
    
                         String url = "jdbc:mysql://localhost:8080/test";
    
                         String username = "admin";
    
                         String password = "123456";
    
                         Connection conn = DriverManager.getConnection(url , username , password);
    
                         if (conn != null) 
    
                                System.out.println("数据库连接成功!");
    
                         else
    
                                System.out.println("数据库连接失败!");
    
                         //完成后记得关闭数据库连接
    
                         conn.close();
    
                  } catch (ClassNotFoundException e) {
    
                         e.printStackTrace();
    
                  } catch (SQLException e) {
    
                         e.printStackTrace();
    
                  }
    
    


     

    二、JDBC API

           JDBC是Java程序操作数据库的标准,它由一组用Java语言编写的类和接口组成,Java通过JDBC可以对多种关系数据库进行统一访问。下面介绍主要类和接口的作用,详细方法请参考J2SE的API。

    1、 Connection接口

           与特定数据库的连接会话,只有获得特定数据库的连接对象才能访问数据库,操作数据库中的数据表、视图和存储过程等。

    方法声明

    说明

    Close()

    立即释放Connection对象的数据库连接占用的JDBC资源

    Commit()

    提交事务,并释放Connection对象当前持有的所有数据库锁

    createStatement()

    创建Statement对象来将SQL语句发送到数据库

    PreparedStatement

    将参数化的SQL语句预编译并存储在PreparedStatement对象中

     

    2、DriverManager类

           主要作用与用户及驱动程序之间,它是JDBC中的管理层,通过它可以管理数据库厂商提供的驱动程序,并建立应用程序与数据库之间的连接。

    方法声明

    说明

    getConnection(String url)

    根据指定数据库连接URL,建立Connection

    getConnection(String url , Properties info)

    根据指定数据库连接URL及数据库连接属性信息建立数据库连接Connection,参数info为数据库连接属性

    getConnection(url,un,pwd)

    根据指定数据库连接URL,用户名和密码连接数据库

    getDrivers()

    获取当前DriverManager中已加载的所有驱动程序

    3、 Statement接口

          Statement接口封装了执行SQL语句和获取查询接口的基本方法。

    方法声明

    说明

    AddBatch(String sql)

    将SQL语句添加到Statement对象的当前命令列表中,用于SQL命令的批处理

    clearBatch()

    清空Statement对喜爱那个的命令列表

    Close()

    立即释放Statement对象的数据库和JDBC资源,而不是等待该对象自动关闭时执行

    Execute(String sql)

    执行指定的SQL语句,若SQL返回结果,该方法返回true,否则返回false

    executeBatch()

    将一批SQL命令提交给数据库执行,返回更新计数组成的数据

    executeQuery(String sql)

    执行查询类型的sql语句,该方法返回查询所获取的结果集ResultSet

    executeUpdate(String sql)

    执行SQL语句中DML类型(insert、update、delete)的SQL语句,返回更新所影响的行数

    getConnection()

    获取生成Statement对喜爱那个的Connection对象

    4、PreparedStatement接口

           Statement接口封装了JDBC执行SQL语句的方法,但在实际开发过程中,SQL语句往往需要将程序中的变量做查询条件参数等。使用Statement接口进行操作过于繁琐且存在安全缺陷。而PreparedStatement接口继承与Statement接口,且对带有参数SQL语句的执行操作进行了扩展。应用于PreparedStatement接口中的SQL语句可以使用占位符”?”来代替SQL语句中的参数,然后再对其进行赋值。

    方法声明

    说明

    setBinaryStream(int x , InputStream s)

    将输入流s作为SQL语句中的参数值,x为参数位置索引

    setBoolean(int x , Boolean b)

    将布尔值b作为SQL语句中的参数值,x为参数位置索引

    SetByte

    ……

    setInt

    ……

    等等。。。。。。

    ……

    5、ResultSet接口

           ResultSet对象封装了数据查询的结果集,它包含了符合SQL语句的所有行,针对Java中的数据类型提供了一套getXXX()的方法,通过这些方法可以获取每一行中的数据。ResultSet还提供了光标的功能,通过光标可以自由定位到某一行中的数据。

    方法声明

    说明

    Absolute(int row)

    光标移动到ReulstSet对象的给定行编号

    afterLast()

    光标移动到最后一行后,如果结果集中不包含任何行,则该方法无效

    beforFirst()

    立即释放ResultSet对喜爱那个的数据库和JDBC资源

    deleteRow()

    删除当前行

    First()

    光标移动到第一行

    getString(String columnLable)

    以String的方式获取ResultSet对象当前行中指定列的值,参数为列名称

    getBinaryStream(String colunmLable)

    你懂得

    getInt(String columnLable)

    你懂得

    isClosed()

    判断ResultSet对喜爱那个是否已关闭

    Last()

    移动到最后一行

    Next()

    移动到下一行,若新行无效则返回false

    Previous()

    移动到上一行,若新行无效则返回false

     

    展开全文
  • ServletContext作用功能详解

    万次阅读 多人点赞 2009-10-13 17:01:00
    ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高...

    ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。

    换一种方式说吧,运行在JAVA虚拟机中的每一个Web应用程序都有一个与之相关的Servlet上下文。ServletContext对象是Web服务器中的一个已知路径的根,Servlet上下文被定位于http://localhost:8080/项目名.以 /项目名 请求路径(称为上下文路径)开始的所有请求被发送到与此ServletContext关联的Web应用程序。一个ServletContext对象表示了一个Web应用程序的上下文。

    Servlet上下文:Servlet上下文提供对应用程序中所有Servlet所共有的各种资源和功能的访问。Servlet上下文API用于设置应用程序中所有Servlet共有的信息。Servlet可能需要共享他们之间的共有信息。运行于同一服务器的Servlet有时会共享资源,如JSP页面、文件和其他Servlet。

    举例:

    如,做一个购物类的网站,要从数据库中提取物品信息,如果用session保存这些物品信息,每个用户都访问一便数据库,效率就太低了;所以要用来Servlet上下文来保存,在服务器开始时,就访问数据库,将物品信息存入Servlet上下文中,这样,每个用户只用从上下文中读入物品信息就行了。

     

    3.1 ServletContext接口简介

    ServletContext接口定义了运行servlet的web应用的servlet视图。容器供应商负责提供servlet容器内ServletContext接口的实现。使用ServletContext对象,servlet可以记录事件日志,获取资源的URL地址,并且设置和保存上下文内可以访问的其他servlet的属性。

    ServletContext以web的已知路径为根路径。比如,假定一个servlet上下文位于http://www.mycorp.com/catalog。以/catalog请求路径开头的所有请求,已知为上下文路径,被路由到和该ServletContext关联的web应用。

    3.2 ServletContext接口作用域

    容器中部署的每一个web应用都有一个ServletContext接口的实例对象与之关联。如果容器被分布在多个虚拟机上,一个web应用将在每一个VM中有一个ServletContext实例。

    不作为web应用一部分部署的容器中的servlet默认是“默认”web应用的一部分,有一个默认的ServletContext。在分布式容器中。默认ServletContext是非分布式的,并且必须只存在于一个VM中。

    3.3 初始化参数

    ServletContext接口的初始化参数允许servlet访问与web应用相关的上下文初始化参数,这些由应用开发人员在部署描述符中指定:

    getInitParameter

    getInitParameterNames

    应用开发人员利用初始化参数传送配置信息。典型的例子是web管理员的e-mail地址或者一个持有关键数据的系统名称。

    3.4 上下文属性

    servlet可以通过名称将对象属性绑定到上下文。任何绑定到上下文的属性可以被同一个web应用的其他servlet使用。ServletContext接口的下列方法允许访问这种功能:

    setAttribute

    getAttribute

    getAttributeNames

    removeAttribute

    3.4.1 分布式容器中的上下文属性

    上下文属性对于创建它们的VM来说是本地的。这防止ServletContext属性存储于分布式容器的共享内存中。当信息需要在运行于分布式环境中的servlet之间共享时,信息被放入会话中(参见第7章“会话”),存储于数据库中,或者存储于EJB组件中。

    3.5 资源

    ServletContext接口通过下列方法提供对web应用组成的静态内容文档层级的直接访问,包括HTML,GIF和JPEG文件:

    getResource

    getResourceAsStream

    getResource和getResourceAsStream方法以“/”开头的字符串为参数,它指定上下文根路径的资源相对路径。文档的层级可能存在于服务器的文件系统,war文件,远程服务器或者在一些其它位置中。

    这些方法不用来获取动态内容。比如,在一个支持JSP规范1的容器中,getResource("/index.jsp")这种形式的方法调用将返回JSP源代码,而不是处理后的输出。关于访问动态内容的更多信息参见第8章“转发请求”。

    Web应用资源的完整列表可以使用getResourcePaths(String path)方法访问。该方法语义的完整信息可以在本规范的API文档中找到。

    3.6 多个主机和ServletContext

    Web服务器可能支持一个服务器上多个逻辑主机共享一个IP地址。这功能有时被称为“虚拟主机”。这种情况下,每一个逻辑主机必须有它自己的servlet上下文或者servlet上下文组。Servlet上下文不可以被多个虚拟主机共享。

    3.7 重载考虑

    尽管容器供应商因为对于易于开发而实现的类加载不做要求,但是任何那样的实现必须确保所有它们可能使用2的所有servlet和类,被加载在单个类加载器作用域内。必须保证应用应该如开发人员预想的那样运转。作为开发辅助,绑定监听器的会话通知的完整语义应当由容器支持,在类加载上会话终止的监听上使用。

    上一代的容器创建新的类加载器以加载servlet,这和用来加载servlet上下文中使用的其他servlet或者类的类加载器不同。这可能造成servlet上下文内的对象引用指向一个意想不到的类或对象,造成意想不到的行为。需要阻止由新一代类加载器所引发的问题。

    3.7.1 临时工作目录

    每一个servlet上下文都需要一个临时存储目录。Servlet容器必须为每一个servlet上下文提供一个私有的临时目录,并且使它可以通过javax.servlet.context.tempdir上下文属性可用。这些属性关联的对象必须是java.io.File类型。

    这项需求认可了很多servlet引擎实现中提供的常见便利。容器不需要在servlet重启时维持临时目录的内容,但是需要确保一个servlet上下文的临时目录的内容对于该servlet容器上运行的其他web应用的servlet上下文不可见。

    展开全文
  • pb调用http的简单方法

    万次阅读 2019-06-10 20:34:20
    pb调用http,一直以来是个麻烦的问题,于是用c++写了一个调用http的... ... 申明函数 ...Function ulong SATHTTP_Create() library "satrda.dll" ... * 释放Http对象 * @http http对象指针 */ Subroutine SATHTTP_De...

    pb调用http,一直以来是个麻烦的问题,于是用c++写了一个调用http的dll,

    可以方便的进行http调用。

    申明函数

     

    /*
    * 创建Http对象
    */
    Function ulong SATHTTP_Create() library "satrda.dll"
    
    /*
     *	释放Http对象
     * @http  http对象指针
     */
    Subroutine SATHTTP_Destroy(ulong http) library "satrda.dll"
    
    /*
     *	设置Header键值  
     *    如SATHTTP_SetHeader("Accept-Encoding","gzip")表示使用gzip压缩 
     * @http  http对象指针
     * @key	 header 键
     * @value header 值
     */
    Subroutine SATHTTP_SetHeader(ulong http, string key, string value) library "satrda.dll"
    
    /*
     *	清除Header
     * @http  http对象指针
     */
    Subroutine SATHTTP_ClearHeader(ulong http) library "satrda.dll" 
    
    /*
     *	是否使用gzip压缩,设置true时,相当于SATHTTP_SetHeader("Accept-Encoding","gzip")
     * @http  http对象指针
     * @value true-是  false-否
     */
     Subroutine SATHTTP_UseGZIP(ulong http, boolean value) library "satrda.dll"
    
    /*
     *	得到Post或Get返回的数据
     *
     * @return Buffer
     */
    Function long SATHTTP_GetBuffer(ulong http) library "satrda.dll"
    
    /*
     *	发起Get请求
     * @http   http对象指针
     * @url    url地址
     */
    Function long SATHTTP_Get(ulong http, string url) library "satrda.dll"
    
    /*
     *	发起Post请求
     * @http   http对象指针
     * @url    url地址
     * @data   数据内容
     * @length 数据长度
     */
    Function long SATHTTP_Post(ulong http, string url, ulong data, ulong length) library "satrda.dll"
    
    /*
    *	添加表单内容
    *  @http   http对象指针
    *  @name	   名称
    *  @content   内容
    */
    Subroutine SATHTTP_AddFormData(ulong http,string name, string content ) library "satrda.dll"
    
    /*
     *	添加表单文件
     *  @http   http对象指针
     *  @filepath  需要上传的文件路径
     *  @filename  远程的文件名称,可以带路径 如 path/f.txt
     */
    Subroutine SATHTTP_AddFormFile(ulong http,string filepath, string filename ) library "satrda.dll"
    
    /*
     *	提交表单
     * @http   http对象指针
     * @url    url地址
     */
    Function long SATHTTP_PostForm(ulong http, string url) library "satrda.dll"
    
    /*
     *	提交表单
     * @http   http对象指针
     * @url    url地址
     * @filepath  文件保存地址
     */
    Function long SATHTTP_GetFile(ulong http, string url, string filepath) library "satrda.dll"

     

     

    上传文件

     

    long ll_rtn,ll_http
    String ls_path
    blob lb_filename,lb_key
    blob{1} lb_null
    String ls_filekey,ls_md5
    
    
    ls_path = "d:/111.txt"
    lb_filename = n_api.of_toutf8("file/中文名.jpg")
    ll_http = n_api.SATHTTP_Create()
    
    lb_filename = lb_filename + lb_null
    n_api.SATHTTP_AddFormFile( ll_http,ls_path, lb_filename)
    ll_rtn = n_api.SATHTTP_PostForm(ll_http,"http://127.0.0.1:5555/upload/file.go")
    n_api.SATHTTP_Destroy(ll_http)
    
    if ll_rtn = 200 then
    	messagebox("","成功!")
    else
    	messagebox("",ll_rtn)
    end if

     

     

     

    
     

    下载文件

     

     

    long ll_rtn,ll_http
    String ls_rfile,ls_filename
    blob lb_b
    
    lb_b = n_api.of_toutf8( "中文名.jpg")
    ls_filename = n_api.SATHTTP_UrlEncode( lb_b, len(lb_b))
    ls_rfile = "http://127.0.0.1:5555/file/" + ls_filename
    
    ll_http = n_api.SATHTTP_Create()
    ll_rtn = n_api.SATHTTP_GetFile(ll_http,ls_rfile,"d:/11.jpg")
    n_api.SATHTTP_Destroy(ll_http)
    
    if ll_rtn = 200 then
    	messagebox("","成功!")
    else
    	messagebox("",ll_rtn)
    end if
    

     

     

     

    Http Post得到Json

    long ll_rtn,ll_http,ll_len
    ulong ll_data,ll_buffer
    String ls_json,ls_null,ls_key
    long ll_start
    blob lb_data
    
    ls_key = "SATRDAGREATWORKS"
    ls_null = ""
    
    ls_json = '{ "db":"mycon5","function":"sp_fun_test", "in1":10.1,"in2":"就是这么简单" }'
    
    //pb10以上请参考of_toUTF8的注释修改
    lb_data = n_api.of_toUTF8(ls_json)
    
    ll_start = cpu()
    
    ll_data = n_api.BlobToPtr(lb_data)
    ll_http = n_api.SATHTTP_Create()
    n_api.SATHTTP_UseGZIP( ll_http, true)
    ll_rtn = n_api.SATHTTP_Post(ll_http,"http://127.0.0.1:5555/restful/rpc",ll_data, len(lb_data))
    
    
    
    if ll_rtn <> 200 then
    	messagebox("","失败," + string(ll_rtn))
    else
    	//得到Post返回数据
    	ll_buffer = n_api.SATHTTP_GetBuffer(ll_http)
    	
    	//String以0结尾,插入1个0
    	n_api.Buffer_Append(ll_buffer,n_api.StringToPtr(ls_null),1)
    	ll_data = n_api.Buffer_Data(ll_buffer)
    	
    	ll_len =  n_api.Buffer_Size(ll_buffer)
    	
    	messagebox("数据长:" + string(ll_len),"时间:" + string(cpu() - ll_start))
    	
    	ls_json = n_api.of_utf8tostring(ll_data)
    	Messagebox("",ls_json)
    end if
    
    
    
    n_api.SATHTTP_Destroy(ll_http)
    


    最新版本可以通过QQ群:345559891 下载

     

    展开全文
  • Java ServletContext 详解

    万次阅读 2010-01-19 22:44:00
    ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高...
  • Gitlab的API调用

    万次阅读 热门讨论 2017-09-27 20:10:44
    1.概述Gitlab作为一个开源、强大的分布式版本控制系统,已经成为互联网公司、软件开发公司的主流版本管理工具。使用过Gitlab的都知道,想要提交一段代码,可以通过git push提交到远程仓库,也可以直接在Gitlab平台上...
  • Servlet规范

    千次阅读 2011-06-02 22:11:00
    也可以说,Servlet是Java组件,部署在Web服务器上,能在请求/响应通信模式下有效地工作。 GenericServlet是独立于协议的Servlet。因此按照需要扩展GenericServlet后也可以实现与协议相关的Se
  • 而出于安全原因,只有IE才提供访问文件的API;但随着HTML5的到来,其他浏览器也纷纷支持了。 首先说读取文件。W3C提供了一些FileAPI,其中最重要的是FileReader这个类。 先列出需要用到的HTML标签:
  • Java Servlet API 类和方法提供了一种轻量级的框架用于过滤动态和静态内容。 还描述了如何在 Web 应用配置 filter,以及它们实现的约定和语义。 什么是过滤器 过滤器是一种代码重用的技术,它可以转换 HTTP 请求的...
  • Servlet规范总结

    万次阅读 2016-10-08 10:34:31
    Servlet规范的核心接口即是Servlet接口,它是所有Servlet类必须实现的接口,在Java Servelt API中已经提供了两个抽象类方便开发者实现Servlet类,分别是GenericServlet 和 HttpServlet,GenericServlet定义了一个...
  • Content-Type: application/x-www-form-urlencoded;charset=utf-8  这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 ...    curl 测试接口地址是否通不通,这个命令和postm...
  • Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。...
  • Servlet的工作原理及生命周期 (一)Tomcat容器模型 Servlet的运行离不开Tomcat,那我们先弄清楚Tomcat的容器模型。 由上图可以看出,在Tomcat下有一个Container容器,这个容器有什么作用?它装载了我们所有的...
  • 在计算机网络日益普及的今天,计算机安全不但要求防治计算机病毒,而且要提高系统抵抗...C/C++程序还可能产生另一个指针问题:丢失对分配内存的引用。当内存是在子程序中被分 配时,通常会出现这种问题,其结果是程
  • Java教程 实战JMS

    万次阅读 热门讨论 2007-04-19 09:31:00
    这是一个MIS系统的一部分,用于计算最后的收费金额,由于计算过程及其复杂,要求实现不影响用户接口...JMS API在进行系统设计之前我们先回头熟悉一下JMS的一些概念。JMS源于企业应用对于消息中间件的需求,使应用程序可
  • Web站点崩溃最常见的七大原因

    千次阅读 2016-12-07 11:41:38
    导致系统无法正常运行的最可能的原因是磁盘满。一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带)。 日志文件会很快用光所有的磁盘空间。...
  • J2EE与.NET技术架构的比较

    万次阅读 2014-06-04 19:37:47
    一、J2EE简介 J2EE体系结构图:   1.组件-容器模型 J2EE是一个基于组件-容器...组件是一个可以部署的程序单元,它以某种方式运行在容器中,容器封装了J2EE底层的API,为组件提供事务处理、数据访问、安全性、持久
  • Android WebView 开发详解(三)

    万次阅读 2014-10-21 13:35:10
    介绍Android WebView 开发的WebSetting,详解settings当中困惑的地方以及对开发的提醒。并且分析Android 4.0以上版本针对WebSettings这一部分的具体实现。
  • EntityManager 详解

    千次阅读 2017-02-22 09:55:13
    (1)Web容器:只运行Web应用的容器,例如Tomcat就是开源的Web容器,它可以运行JSP、Servlet等。 (2)EJB容器:运行在EJB组件的容器,提供EJB组件的状态管理、事务管理、线程管理、远程数据资源访问、连接管理和...
  • 16、Kubernetes 存储 Persistent Volume

    万次阅读 2020-03-18 20:01:05
    概念 PersistentVolume(PV) 是由管理员设置的存储,它是群集的一部分。...此 API 对象包含存储实现的细节,即 NFS、iSCSI 或特定于云供应商的存储系统 PersistentVolumeClaim(PVC) 是用户存储的请求。它与 Pod ...
1 2 3 4 5 ... 20
收藏数 47,269
精华内容 18,907
关键字:

webapi 无法访问已释放的对象