有没有实现页面静态化(非伪静态)简单的方法

发布于 2021-11-27 11:04:23 字数 42 浏览 885 评论 8

有没有实现页面静态化(非伪静态)简单的方法,比如说使用什么工具,配置或加注解一下即可

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

英雄似剑 2021-11-27 16:42:11

nginx处理最佳,用Java处理也可,可你段我以前写的代码

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import freemarker.ext.servlet.FreemarkerServlet;
import freemarker.template.Configuration;
import freemarker.template.Template;
@WebServlet(
		urlPatterns = {"*.tpl"}, // 需要定义Freemarker解析的页面后缀类型
		asyncSupported = false, 
		loadOnStartup = 0, 
		name = "templateController", 
		displayName = "TemplateController", 
		initParams = {
			@WebInitParam(name = "TemplatePath", value = "/"),
			@WebInitParam(name = "NoCache", value = "false"),//定义是否缓存
			@WebInitParam(name = "ContentType", value = "text/html; charset=UTF-8"),// 定义内容类型 
			@WebInitParam(name = "template_update_delay", value = "0"), // 开发环境中可设置为0
			@WebInitParam(name = "default_encoding", value = "UTF-8"),
			@WebInitParam(name = "number_format", value = "0.##")
		} 
)
public class TemplateController extends FreemarkerServlet {
	private static final long serialVersionUID = 1L;
	/**
	 * 生成HTML静态页
	 * @param context
	 * @param data
	 * @param templatePath
	 * @param targetHtmlPath
	 */
	public static void crateHTML(ServletContext context,Map<String,Object> data,String templatePath,String targetHtmlPath){
        Configuration freemarkerCfg = new Configuration();
        //加载模版
        freemarkerCfg.setServletContextForTemplateLoading(context, "/");
        freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
        try {
            //指定模版路径
            Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8");
            template.setEncoding("UTF-8");
            //静态页面路径
            String htmlPath = context.getRealPath("")+targetHtmlPath;
            File htmlFile = new File(htmlPath);
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
            //处理模版  
            template.process(data, out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

辞别 2021-11-27 16:41:30

缓存

睫毛上残留的泪 2021-11-27 16:32:24

不知道nginx是不是可以配置某些Get请求可以缓存,这样就根本不需要你做任何开发相关的事情

背叛残局 2021-11-27 16:31:53

谢谢各位。

突然想到了一个思路,nginx是可以缓存的,nginx做方向代理,直接在nginx上配置即可。

感觉让它管理比自己写工具生成文件靠谱。

明媚如初 2021-11-27 16:20:17

引用来自“闲.大赋”的评论

整个页面静态化? 可以输出流成为文件而不是网络io就可以生成静态文件了。

猫九 2021-11-27 12:39:25

整个页面静态化? 可以输出流成为文件而不是网络io就可以生成静态文件了。

输什么也不输骨气 2021-11-27 12:00:48

主要是PHP可以非常方便地通过ob_start(), ob_end_flush(), ob_get_content(),file_put_contents()这些函数快速生成HTML到指定目录,就不知道Java怎么搞了.

乞讨 2021-11-27 11:25:04

有的,我学PHP的,但是我觉得流程差不多。

首选,你得写个URL重写规则,第一次访问那个链接的时候,静态文件是不存在的,这时候你要转发到你的JSP去,由JSP读取相应内容写入静态文本(文件名为请求的文件名)

举个例子

/news/1.html

第一次访问,news目录下是没有1.html这个文件的,这时候需要转发到jsp,JSP接收到请求之后,去数据库查找ID为1的记录,将结果与html模版整合之后写入news目录下的1.html,下次请求,由于文件存在就会直接显示静态网页了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文