FastJSON ใช้เพื่อแยกวิเคราะห์การกำหนดค่า
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ saleandbuy.freemodule.web.filter;
นำเข้า java.io.ioException;
นำเข้า java.io.printwriter;
นำเข้า java.io.stringWriter;
นำเข้า Java.util.Arrays;
นำเข้า java.util.hashmap;
นำเข้า java.util.list;
นำเข้า java.util.map;
นำเข้า Javax.servlet.filterchain;
นำเข้า javax.servlet.servletexception;
นำเข้า Javax.servlet.http.httpservletRequest;
นำเข้า Javax.servlet.http.httpservletResponse;
นำเข้า javax.servlet.http.htttservletResponSewrapper;
นำเข้า com.alibaba.fastjson.json;
นำเข้า com.alibaba.fastjson.jsonarray;
นำเข้า com.alibaba.fastjson.jsonobject;
Cacheresp ชั้นเรียนสาธารณะ {
Waittime ยาวส่วนตัว = 1,000*3;
แผนที่คงที่ส่วนตัว <สตริง, cacheinfo> cfgmap = new hashmap <string, cacheresp.cacheinfo> ();
สาธารณะคงที่สตริงสุดท้าย query_strings = "querystrings";
สตริงสุดท้ายคงที่สาธารณะ cached_time = "cachedtime";
สตริงสุดท้ายคงที่ cache_config = "cacheconfig";
การกำหนดค่าโมฆะแบบคงที่สาธารณะ (สตริง cfgjson) {
jsonObject cfg = json.parseObject (cfgjson);
สำหรับ (map.entry <String, Object> รายการ: cfg.entryset ()) {
สตริงคีย์ = entry.getKey ();
แผนที่ <string, object> value = (แผนที่ <string, object>) entry.getValue ();
รายการ queryStrings = (jsonArray) value.get (query_strings);
จำนวนเต็ม cachedtime = (จำนวนเต็ม) value.get (cached_time);
CACHEINFO CACHEINFO = ใหม่ CACHEINFO (QUERYSTRINGS, CACHEDTIME);
cfgmap.put (คีย์, cacheinfo);
-
-
โมฆะคงที่สาธารณะ cacheddo (คำขอ httpservletrequest, httpservletResponse, การตอบสนอง, ห่วงโซ่ฟิลเตอร์เชน) พ่น IOException, servletexception {
cacheinfo cacheinfo = getCacheInfo (คำขอ);
String queryString = request.getQueryString ();
// ถ้า cacheinfo ว่างเปล่าไม่จำเป็นต้องมีแคช
if (cacheinfo! = null) {
Long Now = System.currentTimeMillis ();
ซิงโครไนซ์ (cacheresp.class) {
if (now-cacheinfo.lastupdatetime> cacheinfo.cachedtime) {
System.out.println ("ไม่ใช้แคช:");
Proxyresponse proxyresponse = new proxyresponse (การตอบสนอง);
chain.dofilter (คำขอ, proxyresponse);
cacheinfo.cachemap.put (QueryString, proxyresponse.getBuffer ());
CACHEINFO.LASTUPDATETIME = ตอนนี้;
}อื่น {
System.out.println ("ใช้แคช");
-
-
String cachestr = cacheinfo.cachemap.get (QueryString) .toString ();
Response.getWriter (). เขียน (cachestr);
}อื่น {
chain.dofilter (คำขอ, การตอบกลับ);
-
-
cacheinfo ส่วนตัว getCacheInfo (คำขอ httpservletrequest) {
String key = request.getRequesturi (). แทนที่ (request.getContextPath (), "");
cacheinfo cacheinfo = cfgmap.get (คีย์);
ถ้า (cacheinfo! = null &&
cacheinfo.needcache (request.getQueryString ())) {
ส่งคืน cacheinfo;
-
คืนค่า null;
-
คลาสสแตติกสาธารณะ cacheinfo {
รายการสาธารณะ querystrings = array.aslist (สตริงใหม่ [] {"รายการ", "ดัชนี"});
Cachedtime ยาวสาธารณะ = 1,000;
LANG LANTUPDATETIME = 0;
แผนที่สาธารณะ <String, StringBuffer> cachemap = new hashmap <string, stringbuffer> ();
Public CacheInfo (รายการ QueryStrings, Integer Cachedtime) {
super ();
if (cachedtime! = null) {
this.cachedtime = cachedtime;
-
this.querystrings = querystrings;
-
-
-
* @param querystrings request.getQueryString
* @กลับ
-
Public Boolean NeedCache (String QueryStrings) {
if (querystrings == null) {// เมื่อ querystrings ว่างเปล่าแบบสอบถามทั้งหมดจะถูกแคชโดยค่าเริ่มต้น
กลับมาจริง;
-
return querystrings.contains (QueryStrings);
-
-
Proxyresponse คลาสส่วนตัวแบบคงที่ขยาย HttpServletResponSewrapper {
Private StringWriter SW = ใหม่ StringWriter ();
// ส่วนตัว byteArrayOutputStream baos = ใหม่ byteArrayOutputStream ();
proxyresponse สาธารณะ (การตอบสนอง httpservletResponse) {
super (ตอบสนอง);
-
@Override
Public Printwriter getWriter () พ่น IOException {
ส่งคืน PrintWriter ใหม่ (SW);
-
Public StringBuffer GetBuffer () {
กลับ sw.getBuffer ();
-
-
-