Servlet,JDBC,JSONObject三者配和處理客戶端請求並返回正確的json數據


 

JSON簡介

  首先我們來理解json(JavaScript Object Notation),如果你熟悉python的字典結構和列表結構,其實json格式是非常容易理解的,當然不熟也不難理解,網上的資料很多。

  JSON格式包含有兩種結構: 

  json簡單說就是javascript中的對象和數組,所以這兩種結構就是對象和數組兩種結構,通過這兩種結構可以表示各種復雜的結構
  1、對象:對象在js中表示為“{}”括起來的內容引用了一個對象,數據結構為 {key:value,key:value,...}的鍵值對的結構,在面向對象的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為 對象.key 獲取屬性值,這個屬性值的類型可以是 數字、字符串、數組、對象幾種。
  2、數組:數組在js中是中括號“[]”括起來的內容引用了一個數組,數據結構為 ["java","javascript","vb",...],取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是 數字、字符串、數組、對象幾種。
  經過對象、數組2種結構就可以組合成復雜的數據結構了。

可以到http://www.json.org/java/index.html 下載解析我們要使用到的代碼,我們用這個包來封裝json格式的字符串,我們可以用toString()把這些對象裝換成字符串。

JSONObject

  注意它的使用和一個Map非常相似,因為JSONObject類對應的字符串實際上可以被認為是一個字典結構(正如python中打印出來的字典格式一樣)

使用put(string,string)或構造函數,在json中添加一個鍵值對

使用put(string, new string[]{})來添加一個鍵值對,值是一個數組

使用put(string, map)來添加一個鍵值對,值是一個滿足json格式的字符串

使用getString(key)來返回一個值,當然它被轉換稱字符串了

JSONArray

  它的用法和List相似,如果只需要返回一個[ ... ]形式的字符串,這個方法就很好。

使用靜態方法fromObject( new string[]{})或fromObject(list)來得到一個這個類的對象,對應一個數組字符串。

使用add(string)或add(index,string)添加元素

使用add(jsonobj)添加一個符合json格式的字符串

 

tips:添加很多嵌套雖然理論上可行,然而實際應用中完全沒有必要如此復雜,簡單容易被解釋就是最好的。

 

Servlet簡介

響應代碼的編程范式:

public class ServletTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();

        String persontype = request.getParameter("persontype");
        String name = request.getParameter("name");

        writer.println("this is html or json");

        writer.close();
    }
}

 

request對象的方法:

getHeaderNames(); 返回所有的報文頭的字段名字符串

getHeader(java.lang.String name) 返回某個字段名對應的字符串

Cookie[]   getCookies() ; 返回的是根據報文生成的cookie對象

Cookie[] getCookies() ; //獲取報文頭中的Cookie(讀取Cookie的報文頭屬性) 
java.util.Locale getLocale() //獲取客戶端本地化信息(讀取 Accept-Language 的報文頭屬性) 
int getContentLength();//獲取請求報文體的長度(讀取Content-Length的報文頭屬性) 

HttpSession getSession() 返回這個請求關聯的會話對象

 

response對象的方法:

void    setHeader(String name, String value);在報文頭增加一個字段

void addCookie(Cookie cookie) //添加Cookie報文頭屬性
void sendRedirect(String location) //不但會設置Location的響應報文頭,還會生成303的狀態碼

 

JDBC簡介

mysql或postgresql的jdbc編程范式:

public class JdbcTest {  
    public static final String url = "jdbc:mysql://127.0.0.1/emarket";  
    public static final String name = "com.mysql.jdbc.Driver";  
    public static final String user = "root";  
    public static final String password = "mysql";  
  
    public Connection conn = null;  
    public PreparedStatement pst = null;  
  
    public execute(String sql) {  
        try {  
            Class.forName(name);//指定連接類型  
            conn = DriverManager.getConnection(url, user, password);//獲取連接  
            pst = conn.prepareStatement(sql);//准備執行語句 
            ResultSet rs = pst.executeQuery();
            while (rs.next()) {
               System.out.println("@1");
               System.out.print(rs.getString(1));
               System.out.println(rs.getString(2));
            }
        } catch (Exception e) {  
            e.printStackTrace();  
        }  

    try {  
            this.conn.close();  //關閉數據庫鏈接,否則會導致連接數目過多
            this.pst.close();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }
    }  
}

 

 

完整的流程代碼

  web服務器把HTTP請求報文封裝成對象,並以此為參數執行我們的servlet代碼,那么我們的代碼要怎么樣寫呢?很自然,我們要用jdbc讀取數據,然后讓數據存儲在字典或者數組結構中,在借助json包構建JSONObect對象,然后把它裝換成字符串,寫入HTTP報文體中。現在給出數據庫中一個關系模式 item_homepage,我們要讀取它:

 

 

JSON包源代碼分析

  


免責聲明!

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



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