The Java project generates code for static pages

  • 2020-05-09 19:03:22
  • OfStack

There are no more than the following factors:
1. From the perspective of page loading time: static pages do not need to establish a connection with the database, especially for pages with large amount of data, most of which need to look up many result sets. Therefore, the establishment of connection times will increase and the time is not considerable, while static pages will save the time.
2, in terms of search engine grab: static web pages, search engines prefer static pages compared with dynamic web pages, search engines prefer quiet, easier to grab, SEO search engine rankings are more likely to improve, some large portal page 1 mostly adopts the static or pseudo static web pages to display, more convenient to search engines crawl and ranking.
3, from the security point of view: static web pages should not be attacked by hackers, because hackers do not know your website background, website using procedures, the address of the database.
4, from the point of view of stability: which day the database server hung, dynamic web page on the bye! If you want to run a static web publisher, you know the configuration isn't too high, right? Ha ha.

Therefore, I believe that generating static pages is feasible.

So how do you take code from a dynamic web page and generate a static web page? Where does it exist? The principle is actually quite simple.
1, use Freemark template to generate static pages, search the Internet 1 under a large number of code you choose, I will not be verbose here.
I really hate this way, because it is too much work for a page with a large amount of data, to write templates, the syntax is weird, not popular!
2. It comes to mind once in a while. Use URLConnection in Java to grab the source code of an URL web page (this is the core principle) to generate html files, it is as simple as that! That's it!

Code on!

1), the following is to capture the source code of the web page:

import java.io.BufferedReader; 
import java.io.File; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import org.apache.commons.io.FileUtils; 
import org.apache.commons.lang.StringUtils; 

/** 
* @author Xing,XiuDong 
*/ 
public class HTMLGenerator { 

    public static final String generate(final String url) { 
        if (StringUtils.isBlank(url)) { 
            return null; 
        } 

        Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+"); 
        Matcher matcher = pattern.matcher(url); 
        if (!matcher.find()) { 
            return null; 
        } 

        StringBuffer sb = new StringBuffer(); 

        try { 
            URL _url = new URL(url); 
            URLConnection urlConnection = _url.openConnection(); 
            BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 

            String inputLine; 
            while ((inputLine = in.readLine()) != null) { 
                sb.append(inputLine); 
            } 
        } catch (MalformedURLException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 

        return sb.toString(); 
    } 

    /** 
     * Test Code 
     * Target : http://www.google.cn/ 
     */ 
    public static void main(String[] args) throws IOException { 
        String src = HTMLGenerator.generate("http://www.google.cn/"); 

        File file = new File("C:" + File.separator + "index.html"); 
        FileUtils.writeStringToFile(file, src, "UTF-8"); 
    } 

}

2) write the source code into the Html file, which needs to be based on the needs of users. I wrote the following code according to the situations encountered in my project:

    /** 
     * generite html source code 
     * 
     * @author Xing,XiuDong 
     * @date 2009.06.22 
     * @param request 
     * @param url 
     * @param toWebRoot 
     * @param encoding 
     * @throws IOException 
     */ 
    public void genHtml(HttpServletRequest request, String url, boolean toWebRoot, String encoding) throws IOException { 

        if (null == url) { 
            url = request.getRequestURL().toString(); 
        } 

        String contextPath = request.getContextPath(); 
        String seq = StringUtils.substring(String.valueOf(new Date().getTime()), -6); 

        String ctxPath = super.getServlet().getServletContext().getRealPath(File.separator); 
        if (!ctxPath.endsWith(File.separator)) { 
            ctxPath += File.separator; 
        } 

        String filePath = StringUtils.substringAfter(url, contextPath); 
        filePath = filePath.replaceAll("\\.(do|jsp|html|shtml)$", ".html"); 

        String savePath = ""; 
        String autoCreatedDateDir = ""; 
        if (!toWebRoot) { 
            savePath = StringUtils.join(new String[] { "files", "history", "" }, File.separator); 

            String[] folderPatterns = new String[] { "yyyy", "MM", "dd", "" }; 
            autoCreatedDateDir = DateFormatUtils.format(new Date(), StringUtils.join(folderPatterns, File.separator)); 

            filePath = StringUtils.substringBefore(filePath, ".html") + "-" + seq + ".html"; 
        } 

        File file = new File(ctxPath + savePath + autoCreatedDateDir + filePath); 
        FileUtils.writeStringToFile(file, HTMLGenerator.generate(url), encoding); 
    }

Source: http: / / blog. csdn. net/xxd851116

Related articles: