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包源代碼分析