首页 \ 问答 \ 从servlet生成JSON(Generating JSON from servlet)

从servlet生成JSON(Generating JSON from servlet)

在我的Android应用程序中,我使用以下代码复制特定表中的整个数据。 但是当我检查servlet输出时,似乎生成了重复的值。 您可以通过运行以下代码来验证这一点。 我不知道为什么会这样。 我需要将值从servlet传递给我的应用程序作为JSON对象..

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;

public class vlgmas extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        // TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet vlgmas</title>");  
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet vlgmas at " + request.getContextPath () + "</h1>");
        out.println("</body>");
        out.println("</html>");

    } finally {            
        out.close();
    }
}


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
     try {

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet Pickvalue</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet Pick at " + request.getContextPath () + "</h1>");
        doPost(request,response);
        out.println("</body>");
        out.println("</html>");

    } finally
    {
        out.close();
    }
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //processRequest(request, response);
    String vname = null,vcode=null,divsec=null;
    JSONObject obj = new JSONObject();
    List list = new ArrayList();
    JSONObject obj2 = new JSONObject();
    PrintWriter out = response.getWriter();
    String vn[]=new String[2000],vc[]=new String[2000],ds[]=new String[2000];
    int t,r1=0,r2=0,r3=0;
    try
    {
        Class.forName("oracle.jdbc.driver.OracleDriver");
    java.sql.Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.200:1521:pdsm", "test", "test");
    Statement stmt=conn.createStatement();

        {
        ResultSet rs = stmt.executeQuery("select * from cn_vlgmas");
        while(rs.next())
        {
            //vn[r1++]=rs.getString ("vlgname");
            //vc[r2++]=rs.getString("vlgcode");
            //ds[r3++]=rs.getString("divsec");
            vname=rs.getString ("vlgname");
            vcode=rs.getString("vlgcode");
            divsec=rs.getString("divsec");
            obj.put("vname",vname);
            obj.put("vcode",vcode);
            obj.put("divsec",divsec);
            list.add(obj);
            obj2.accumulate("get", list);
            out.println(obj2);
        }
       /*for(t=0;t<r1;t++)
           {
            //out.println(vn[t]+","+vc[t]+","+ds[t]+" ");
            obj.put("vname",vn[t]);
            obj.put("vcode",vc[t]);
            obj.put("divsec",ds[t]);
            list.add(obj);
            //obj.append("rec", obj);
            //out.println(list);
            //obj.accumulate("get", list);
            //out.println(obj);
            obj2.accumulate("get", obj);
            //out.println(obj2);
            }*/


        }

    }catch(Exception e)
    {
        out.println("error"+e.toString());
    }
}


@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>
}

任何人都可以帮助我。


in my android application I'm using the following code to copy the entire data in a particular table. But It seems to be generate duplicate values when I check with servlet output. You can verify this by running the following code. I don't know why this happened. I need to pass the values from servlet to my application as JSON Object..

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;

public class vlgmas extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        // TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet vlgmas</title>");  
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet vlgmas at " + request.getContextPath () + "</h1>");
        out.println("</body>");
        out.println("</html>");

    } finally {            
        out.close();
    }
}


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
     try {

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet Pickvalue</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet Pick at " + request.getContextPath () + "</h1>");
        doPost(request,response);
        out.println("</body>");
        out.println("</html>");

    } finally
    {
        out.close();
    }
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //processRequest(request, response);
    String vname = null,vcode=null,divsec=null;
    JSONObject obj = new JSONObject();
    List list = new ArrayList();
    JSONObject obj2 = new JSONObject();
    PrintWriter out = response.getWriter();
    String vn[]=new String[2000],vc[]=new String[2000],ds[]=new String[2000];
    int t,r1=0,r2=0,r3=0;
    try
    {
        Class.forName("oracle.jdbc.driver.OracleDriver");
    java.sql.Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.200:1521:pdsm", "test", "test");
    Statement stmt=conn.createStatement();

        {
        ResultSet rs = stmt.executeQuery("select * from cn_vlgmas");
        while(rs.next())
        {
            //vn[r1++]=rs.getString ("vlgname");
            //vc[r2++]=rs.getString("vlgcode");
            //ds[r3++]=rs.getString("divsec");
            vname=rs.getString ("vlgname");
            vcode=rs.getString("vlgcode");
            divsec=rs.getString("divsec");
            obj.put("vname",vname);
            obj.put("vcode",vcode);
            obj.put("divsec",divsec);
            list.add(obj);
            obj2.accumulate("get", list);
            out.println(obj2);
        }
       /*for(t=0;t<r1;t++)
           {
            //out.println(vn[t]+","+vc[t]+","+ds[t]+" ");
            obj.put("vname",vn[t]);
            obj.put("vcode",vc[t]);
            obj.put("divsec",ds[t]);
            list.add(obj);
            //obj.append("rec", obj);
            //out.println(list);
            //obj.accumulate("get", list);
            //out.println(obj);
            obj2.accumulate("get", obj);
            //out.println(obj2);
            }*/


        }

    }catch(Exception e)
    {
        out.println("error"+e.toString());
    }
}


@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>
}

Can anyone help me please.


原文:https://stackoverflow.com/questions/14621600
更新时间:2022-11-17 08:11

最满意答案

至少ndb数据存储区缓存包括memcache

您观察到的模式可以在本节中解释:

Memcache不支持事务。 因此,旨在应用于数据存储和内存缓存的更新可能只对两者中的一个进行。 为了在这种情况下保持一致性(可能以性能为代价),更新的实体将从内存缓存中删除,然后写入数据存储区。


At least the ndb datastore caches include memcache:

The pattern you observed could be explained in this section:

Memcache does not support transactions. Thus, an update meant to be applied to both the Datastore and memcache might be made to only one of the two. To maintain consistency in such cases (possibly at the expense of performance), the updated entity is deleted from memcache and then written to the Datastore.

相关问答

更多
  • 代码中的函数名称是: def set_up(self): ... def tear_down(self): ... 但是,根据Python unittest文档 ,正确的名称是setUp和tearDown (注意缺少下划线和camelCase)。 您可以在AppEngine Python本地单元测试文档中看到这些函数的类似用法。 The function names in your code are: def set_up(self): ... def tear_down(self) ...
  • GAE开发服务器几乎可模拟运行App的所有功能。 (有一些差异,包括本地服务器不会强制配额或超时的事实)。这包括memcache或至少某种模拟。 您无需连接Google的实际内存缓存服务器即可在本地进行测试。 (无论如何,没有办法做到这一点。) The GAE development server simulates almost every feature of running your App live. (With a few differences, including the fact that ...
  • 是; 请参阅有关ndb缓存的完整文档。 基本上,每个写入都在请求本地的上下文缓存和主memcached存储中缓存; 按键获取将首先在两个缓存中查找,然后再返回到真正的数据存储区。 编辑我无法理解为什么你认为你的例子会起作用。 您使用content属性定义了一个模型,但是尝试在其上设置name和value属性; 自然会失败。 您应该阅读ndb文档 ,该文档对使用模型类进行了很好的介绍。 Yes; see the full documentation on ndb caching. Basically, eve ...
  • 此解决方案不太可能按您希望的方式扩展。 查询@Cache实体默认为“混合”仅键查询(速度极快),然后是批量获取(相对较慢)。 如果缓存很热,这可以很好地执行,但可能不是你所说的规模。 最终,即使使用专用的内存缓存,缓存也会被重置 - 然后您的操作可能会超时并失败几次,直到缓存再次预热。 您可以禁用此混合功能: ofy().load().hybrid(false)或仅删除@Cache注释。 使用冷缓存,常规查询将显着提高性能。 您还可以尝试将chunk()大小更改为更大的大小。 默认值小到20。 通过标准AP ...
  • 这个问题只在本地复制,我也面对它。 我假设它是由dev服务器运行的本地memcached的错误配置引起的。 我会试着解释一下我的观点。 在我的情况下,第一个请求总是成功的。 因为在第一次请求的情况下,Apache HttpClient会打开一个新连接并将其放入池中。 有源代码https://github.com/GoogleCloudPlatform/appengine-java-vm-runtime/blob/master/appengine-managed-runtime/src/main/java/c ...
  • 我不知道你的问题的答案,但你会在MemcacheSerialization.java中的方法makePbKey中找到它的一部分。 这显示了Java如何获取一个Object并从中获取一个密钥。 同样,在文件appengine / memcache / memcache.go中,您可以看到AppEngine for Go如何从Item.Key(类型字符串)中生成密钥。 请参阅GetMulti,其中每个键通过简单的强制转换从字符串转换为[]字节。 所以,你的问题的最终答案取决于你找到通过mkPbKey和GetMu ...
  • 优化读取: 如果在查询中使用偏移量,则将偏移实体计为读数。 如果运行offset = 100的查询,数据存储区将检索并丢弃前100个实体,并为这些读取付费。 尽可能使用游标来减少读取操作。 游标也会导致更快的查询。 在运行查询时,NDB不一定会减少读取。 对数据存储区进行查询并返回实体,不会发生内存缓存交互。 如果要在查询的上下文中从memcache中检索实体,则需要运行keys_only查询,然后尝试从memcache中检索这些键。 然后,您需要转到数据存储区以查找任何缓存未命中的实体。 检索密钥是一个“ ...
  • memcache go代码列出了一个flush函数 ,该函数未在官方文档中列出。 我怀疑它有效并且没有记录。 The memcache go code lists a flush function, which is not listed in the official docs. I suspect it works and is just undocumented.
  • 要回答你的问题, 1)是的,由于共享网络,您可以预期远程呼叫的差异; 2)您将看到差异的最常见位置是数据存储区请求 - 请求越大/越远,您将看到的差异越大; 3)这里有一些选项: 看起来您正在尝试从数据存储区/内存缓存中获取大量数据。 您可能需要重新考虑查询和缓存,以便检索较小的数据块。 您的应用是否需要针对单个请求的所有数据? 如果应用程序确实需要在每个请求上处理所有数据,则另一个选项是使用后台任务(cron,任务队列等)对其进行预处理,并将结果放入内存缓存中。 提供页面的请求应该只是从内存缓存中选择正确 ...
  • 至少ndb数据存储区缓存包括memcache : 您观察到的模式可以在本节中解释: Memcache不支持事务。 因此,旨在应用于数据存储和内存缓存的更新可能只对两者中的一个进行。 为了在这种情况下保持一致性(可能以性能为代价),更新的实体将从内存缓存中删除,然后写入数据存储区。 At least the ndb datastore caches include memcache: The pattern you observed could be explained in this section: Me ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)