日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

「Java Web」主页静态化的实现

發布時間:2025/3/15 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 「Java Web」主页静态化的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個站點的主頁一般不會頻繁變動,而大多數用戶在訪問站點時不過瀏覽一下主頁(未登陸)。然后就離開了。對于這類訪問請求。假設每次都要通過查詢數據庫來顯示主頁的話,顯然會給server帶來多余的壓力。

這時候我們能夠將主頁靜態化。在減輕數據庫server壓力的同一時候又能大大提高主頁高訪問速度。


對于Java來說,如今有非常多框架但是實現主頁的靜態化。事實上這并不難。我們也能夠自己手動實現。

思路例如以下:

首先編寫一個小程序模擬瀏覽器向webserver發送GET請求。得到主頁的HTML代碼后,將其保存到文件里。

然后寫一個過濾器攔截訪問請求。一旦發現訪問的是主頁。那么就直接將保存好的靜態HTML文件返回給client。這樣就避開了框架(如 Spring MVC),更避開了數據庫查詢。假設主頁內容發生了變化,我們能夠再執行一下小程序以得到最新的主頁HTML代碼。


編寫HTTPclient程序模擬瀏覽器

這里我使用 apache 的 HttpClient 庫編寫這個小程序。例如以下例。我們通過向 http://locahost:8080/codeschool/ 發送GET請求來得到server返回的HTML代碼: /*** 向localhost:8080發送GET請求,獲取返回的HTML代碼并保存到文件里* @author whf**/ public class Client {public static void main(String[] args) throws Exception {CloseableHttpClient httpclient = HttpClients.createDefault();try {HttpGet httpGet = new HttpGet("http://127.0.0.1:8080/codeschool");CloseableHttpResponse response = httpclient.execute(httpGet);try {System.out.println(response.getStatusLine());HttpEntity entity = response.getEntity();// entity封裝了server返回的數據String html = EntityUtils.toString(entity);// 將HTML代碼寫入到文件里saveContent(html, "/home/whf/workspace-sts/codeschool/home.html");EntityUtils.consume(entity);} finally {response.close();}} finally {httpclient.close();}}/*** 將HTML寫入到指定文件里* * @param html* @param path 文件路徑* @throws IOException*/private static void saveContent(String html, String path) throws IOException {FileOutputStream fos = new FileOutputStream(path);BufferedOutputStream bos = new BufferedOutputStream(fos);bos.write(html.getBytes());bos.close();}}
所需的 dependency 例如以下: <dependencies><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.3.4</version></dependency></dependencies>
運行一下該程序,就會得到 home.html 文件。

編寫過濾器

編寫一個 url-pattern 為 /* 的 Filter 過濾器,一旦發現用戶訪問的是主頁,則直接返回上面生成的 home.html 文件,關閉輸出流。代碼例如以下: public class SecureFilter implements Filter {private static final Logger logger = LoggerFactory.getLogger(SecureFilter.class);private ServletContext ctx;@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// 防止中文亂碼request.setCharacterEncoding("UTF-8");HttpServletRequest req = (HttpServletRequest) request;String path = req.getRequestURI();// 請求的是資源。跳過if (true == path.startsWith("/codeschool/resources")) {chain.doFilter(request, response);return;}// 用戶未登陸// 用戶訪問主頁// 返回靜態頁面if (path.equals("/codeschool/") || path.equals("/")) {writeStaticHomePage(req, (HttpServletResponse) response);return;}chain.doFilter(request, response);}/*** 將靜態主頁返回給client* * @param req* @param resp* @throws IOException*/private void writeStaticHomePage(HttpServletRequest req,HttpServletResponse resp) throws IOException {// 返回靜態化頁面// 得到home.html路徑String pagePath = (String) ctx.getInitParameter("HOME_PAGE_PATH");if (logger.isDebugEnabled()) {logger.debug("主頁靜態頁面路徑:{}", pagePath);}// 將homt.html返回給clientServletOutputStream out = resp.getOutputStream();FileInputStream pageInStream = new FileInputStream(pagePath);BufferedInputStream bufInStream = new BufferedInputStream(pageInStream);byte[] buf = new byte[2048];int len = 0;while ((len = bufInStream.read(buf)) != -1) {out.write(buf, 0, len);}bufInStream.close();out.close();}@Overridepublic void init(FilterConfig cfg) throws ServletException {this.ctx = cfg.getServletContext();}}
能夠在web.xml里配置 home.html 的路徑: <!-- 靜態主頁的路徑 --><context-param><param-name>HOME_PAGE_PATH</param-name><param-value>/home/whf/workspace-sts/codeschool/home.html</param-value></context-param>

這樣在我們在訪問主頁的時候就能明顯感覺到速度大大加快。

轉載于:https://www.cnblogs.com/llguanli/p/6731492.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的「Java Web」主页静态化的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。