[Java] 在JSP中讀取POST的JSON數據


jsp是開發bs的利器。在jsp中我們可以很方便的使用JSON來開發一個數據接口。

今天我想實現的例子是:

  1. 接收客戶端(瀏覽器、APP)通過POST方式提交的JSON數據。
  2. 解析接收到數據,如果存在”username”則返回用戶名,否則返回一個錯誤。

我使用java-ee作為開發環境,項目結構如下:

 

 

在本例中,我們用到了 json-lib,  下載地址:

http://files.cnblogs.com/java-pan/lib.rar

提供了除JSONObject的jar之外依賴的其他6個jar包,一共7個jar文件說明:

因為工作中項目用到的版本是1.1的對應jdk1.3的版本,故本篇博客是基於1.1版本介紹的。

對應此版本的javadoc下載路徑如下:http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-1.1/

目前最新的版本為2.4,其他版本下載地址為 http://sourceforge.net/projects/json-lib/files/json-lib/

 

下載完成后,添加到上圖所示的位置,然后點開工程屬性,全部加入到Libraries中,這樣我們就可以使用JSONObject了。

 

jsp中的request本身不能直接返回字符串形式的post數據,所以先寫一個getPostData函數:

package com.http;

import java.io.IOException;
import java.io.InputStream;


public class Common {
    
    public static String getPostData(InputStream in, int size, String charset) {
        if (in != null && size > 0) {
            byte[] buf = new byte[size];
            try {
                in.read(buf);
                if (charset == null || charset.length() == 0)
                    return new String(buf);
                else {
                    return new String(buf, charset);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    } 
}

 

然后我們新建一個 test.jsp 文件。在頭部添加引用上面的類,以及json庫。

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="java.io.*"
    import="com.http.*"
    import="net.sf.json.*"
    pageEncoding="UTF-8"%>

然后寫處理代碼:

<%
 String postdata = Common.getPostData(request.getInputStream(), request.getContentLength(), null);
 //out.println(postdata); 
 
 if (postdata != null) {
  JSONObject json = JSONObject.fromObject(postdata);
  if (json != null) {
   out.println("{\"result\": 1, \"username\": \"" + json.getString("username") + "\"}" );
  } else
   out.println("{\"result\": 0, \"errmsg\": \"無效的請求\"}");
 } else 
  out.println("{\"result\": 0, \"errmsg\": \"無效的請求\"}");
%>
</body>

這樣就OK了,配置tomcat就可以運行測試了。

直接運行的時候,會返回 :

{“result”: 0, “errmsg”: “無效的請求”}

提交一個測試串

POST /JSPTest/test.jsp HTTP/1.1
Host: localhost:8080
Accept: */*
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0)
Content-Type: text/xml
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Content-Length: 60

{"bgcolor": "red", "username": "test", "password": "123456"}

 

返回:

{“result”: 1, “username”: “test”}

 

 好了。今天的例子就此結束。在弄這個代碼的時候,一開始搞lib放錯地方了,老是報錯,浪費了1個多小時后,總算解決了。(主要是之前開發android時,都是自己建個libs文件夾放進去再引用就好了,沒想到jsp是固定的地方,鬧笑話了。。。)

SVN:  https://github.com/yangyxd/JSP_JSON_POST_Demo

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM