Java HTTP 缓存实现: 提升网站性能的利器
{"title":"package Intent; \n\nimport java.io.BufferedReader; \nimport java.io.ByteArrayOutputStream; \nimport java.io.DataInputStream; \nimport java.io.DataOutputStream; \nimport java.io.File; \nimport java.io.FileInputStream; \nimport java.io.FileNotFoundException; \nimport java.io.FileOutputStream; \nimport java.io.IOException; \nimport java.io.InputStream; \nimport java.io.InputStreamReader; \nimport java.io.OutputStream; \nimport java.net.Socket; \nimport java.util.ArrayList; \nimport java.util.Objects; \n\nimport ui.MainFrame; \n\npublic class Cache { \n\tprivate Socket socket; \n\tprivate MainFrame mainFrame; \n\tprivate String CacheDir = null; \n\tfinal static String CRLF = "\r\n"; \n\tprivate String thefilename; \n\n\tpublic Cache(Socket socket, MainFrame mainFrame, String CacheDir) { \n\t\tthis.socket = socket; \n\t\tthis.mainFrame = mainFrame; \n\t\tthis.CacheDir = CacheDir + "\"; \n\t\tinit(); \n\t} \n\n\tvoid init() { \n\t\ttry { \n\t\t\tInputStream is = socket.getInputStream(); \n\t\t\tDataOutputStream os = new DataOutputStream(socket.getOutputStream()); \n\t\t\tBufferedReader br = new BufferedReader(new InputStreamReader(is)); \n\t\t\tString requestLine = br.readLine(); \n\t\t\tif(null==requestLine) { \n\t\t\t\treturn; \n\t\t\t} \n\n\t\t\t// Display the request line. \n\t\t\tmainFrame.Messageappend(" "); \n\t\t\tmainFrame.Messageappend(requestLine); \n\t\t\tString type = requestLine.split(" ")[0]; \n\t\t\tString url = requestLine.split(" ")[1]; \n\n\t\t\tSystem.out.println(type); \n\t\t\tSystem.out.println(url); \n\n\t\t\tswitch (type) { \n\t\t\tcase "GET": { \n\t\t\t\tSystem.out.println("GET"); \n\n\t\t\t\tif (!url.startsWith("http")) \n\t\t\t\t\turl = "http://" + url; \n\t\t\t\tif (fileIsNeedUpdate(url)) {//判断更新文件 条件get \n\t\t\t\t\tbyte[] filecon = WritetoFile(url); \n\t\t\t\t\tWriteToClient(is, os, filecon); \n\t\t\t\t} else { \n\t\t\t\t\tString web[] = getfilenameAndDirName(url); \n\t\t\t\t\tString webDirname = web[0]; \n\t\t\t\t\tString webfilename = web[1]; \n\t\t\t\t\tthefilename = webfilename; \n\t\t\t\t\tString filePath = CacheDir + webDirname + transferWebfilename(webfilename); \n\t\t\t\t\tSystem.out.println(filePath); \n\t\t\t\t\tWriteToClient(is, os, ReadFile(filePath)); \n\t\t\t\t} \n\n\t\t\t\tbreak; \n\t\t\t} \n\n\t\t\tdefault: \n\t\t\t\tbreak; \n\t\t\t} \n\t\t\tos.close(); \n\t\t\tbr.close(); \n\t\t\tsocket.close(); \n\n\t\t} catch (IOException e) { \n\n\t\t\te.printStackTrace(); \n\t\t} catch (Exception e) { \n\n\t\t\te.printStackTrace(); \n\t\t} \n\t} \n\n\tprivate String contentType(String fileName) { \n\t\tString defaultContentType = "text/html"; \n\t\tif(Objects.isNull(fileName)) { \n\t\t\treturn defaultContentType; \n\t\t} \n\t\tif (fileName.endsWith(".htm") || fileName.endsWith(".jsp") || fileName.endsWith(".php") \n\t\t\t\t\t|| fileName.endsWith(".aspx") || fileName.endsWith(".html")) { \n\t\t\treturn "text/html"; \n\t\t} \n\t\tif (fileName.endsWith(".css")) { \n\t\t\treturn "text/css"; \n\t\t} \n\t\tif (fileName.endsWith(".js")) { \n\t\t\treturn "application/x-javascript"; \n\t\t} \n\n\t\tif (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) { \n\t\t\treturn "image/jpeg"; \n\t\t} \n\t\tif (fileName.endsWith(".png")) { \n\t\t\treturn "image/png"; \n\t\t} \n\t\tif (fileName.endsWith(".ico")) { \n\t\t\treturn "image/x-icon"; \n\t\t} \n\t\tif (fileName.indexOf(".") == -1) { \n\t\t\treturn "text/html"; \n\t\t} \n\t\treturn defaultContentType; \n\t} \n\n\tprivate boolean fileIsNeedUpdate(String url) {//更新文件 \n\t\tString[] web = getfilenameAndDirName(url); \n\t\tString webfilename = CacheDir + web[0] + web[1]; \n\t\twebfilename = transferWebfilename(webfilename); \n\t\tSystem.out.println(webfilename + "_____________________________"); \n\t\tif (!(new File(webfilename).exists())) { \n\t\t\tSystem.out.println("本记录从缓存读取"); \n\t\t\treturn true; \n\t\t} else \n\t\t\treturn false; \n\t} \n\n\tprivate String[] getfilenameAndDirName(String url) { \n\t\t/** \n\t\t * 根据url返回要创建的文件名和目录名 \n\t\t */ \n\t\tString webName = url.split(":")[1]; \n\t\tString dirlist[] = webName.split("//"); \n\t\tString dd[] = dirlist[dirlist.length - 1].split("/"); \n\t\tString webfilename = dd[dd.length - 1]; \n\t\tif (webfilename.endsWith("/")) \n\t\t\twebfilename = webfilename.substring(0, webfilename.length() - 1); \n\t\tString webDirname = dirlist[1]; \n\t\tSystem.out.println(webDirname + "" + webfilename); \n\n\t\tif (webDirname.startsWith(webfilename) || !webfilename.contains(".")) \n\t\t\twebfilename = "index.html"; \n\t\telse { \n\t\t\twebDirname = webDirname.substring(0, webDirname.length() - webfilename.length()); \n\n\t\t} \n\t\tSystem.out.println(webDirname + "" + webfilename); \n\t\treturn new String[] { webDirname, webfilename }; \n\t} \n\n\tprivate byte[] ReadFile(String filepath) { \n\t\tArrayList404 Not Found
" \n\t\t\t\t\t+ "<p style="font-size:30px;">Sorry!
该请求没有找到页面, Please Check Your URL Input!
原文地址: https://www.cveoy.top/t/topic/pR47 著作权归作者所有。请勿转载和采集!