| 知乎專欄 | 多維度架構 | | | 微信號 netkiller-ebook | | | QQ群:128659835 請註明“讀者” |
Struts 配置檔案
<package name="information" extends="main" namespace="/inf"> <action name="Information" class="com.example.action.Infomation"> <result type="tiles">information</result> </action> </package>
Action 檔案
package cn.netkiller.action;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class Infomation extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private JsonObject jsonObject = null;
private String jsonString = "";
@Override
public String execute() throws IOException {
String URL = "http://inf.example.com/list/json/93/20/0.html";
System.out.printf("%s Requeted URL is %s", this.getClass().getName(), URL);
StringBuilder sb = new StringBuilder();
URLConnection urlConn = null;
InputStreamReader in = null;
try {
URL url = new URL(URL);
urlConn = url.openConnection();
if (urlConn != null)
urlConn.setReadTimeout(60 * 1000);
if (urlConn != null && urlConn.getInputStream() != null) {
in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset());
BufferedReader bufferedReader = new BufferedReader(in);
if (bufferedReader != null) {
int cp;
while ((cp = bufferedReader.read()) != -1) {
sb.append((char) cp);
}
bufferedReader.close();
}
}
in.close();
jsonString = sb.toString();
System.out.println(jsonString);
JsonReader reader = Json.createReader(new StringReader(jsonString));
JsonObject jsonObject = reader.readObject();
this.setJsonObject(jsonObject);
reader.close();
// System.out.println(jsonObject.size());
/*for (int i = 0; i < jsonObject.size() - 2; i++) {
JsonObject rowObject = jsonObject.getJsonObject(Integer.toString(i));
// System.out.println(rowObject.toString());
System.out.printf("%s\t%s\t%s\n", rowObject.getJsonString("id"), rowObject.getJsonString("title"),
rowObject.getJsonString("ctime"));
}*/
} catch (Exception e) {
throw new RuntimeException("Exception while calling URL:" + URL, e);
}
return Action.SUCCESS;
}
public JsonObject getJsonObject() {
return jsonObject;
}
public void setJsonObject(JsonObject jsonObject) {
this.jsonObject = jsonObject;
}
public String getJsonString() {
return jsonString;
}
public void setJsonString(String jsonString) {
this.jsonString = jsonString;
}
}
JSP 檔案
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<table>
<c:forEach items="${jsonObject.entrySet()}" var="json"
varStatus="status">
<c:if test="${not status.last}">
<tr>
<td>${json.key+1}</td>
<td>${json.value.getJsonString("id")}</td>
<td>${json.value.getJsonString("title")}</td>
<td>${json.value.getJsonString("ctime")}</td>
</tr>
</c:if>
</c:forEach>
</table>
===================
<c:forEach items="${jsonObject.entrySet()}" var="json">
${json.value.toString()}
</c:forEach>
===========
<s:property value="jsonString" />
解決雙引號問題
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<table>
<c:forEach items="${jsonObject.entrySet()}" var="json"
varStatus="status">
<c:if test="${not status.last}">
<c:set var="id"
value="${fn:replace(json.value.getJsonString('id'),'\"', '')}" />
<c:set var="title" value="${fn:replace(json.value.getJsonString('title'),'\"', '')}" />
<c:set var="ctime"
value="${fn:replace(json.value.getJsonString('ctime'),'\"', '')}" />
<tr>
<td><c:out value="${status.count}" /></td>
<td><a href="/inf/Detail.do?id=<c:out value="${id}"/>"><c:out
value="${title}" /></a></td>
<td><c:out value="${ctime}" /></td>
</tr>
</c:if>
</c:forEach>
</table>
<c:set var="pages" value="${jsonObject.getJsonObject('pages')}" />
<a href="${pages.first}">首頁</a>
<a href="${pages.before}">上一頁</a>
<a href="${pages.next}">下一頁</a>
<a href="${pages.last}">尾頁</a>
<span>Count: ${pages.count}, Total: ${pages.total}</span>
@JSON(serialize = false)
public String getDatas() {
return datas;
}
使用 excludeProperties 在 Action 中排除
<action name="withdraw" class="cn.netkiller.api.action.Report" method="getHistory"> <interceptor-ref name="defaultStack" /> <interceptor-ref name="json"> <param name="enableSMD">true</param> </interceptor-ref> <result name="success" type="json"> <param name="enableGZIP">true</param> <param name="excludeProperties">.*direction</param> </result> </action>