使用FreeMaker机制实现高并发优化

在实际开发项目过程中,经常会使用Redis缓存机制减轻数据库的访问压力,其实还有一个方案可以实现数据库的访问优化。就是使用FreeMaker机制。当访问一次数据库后把数据封装到静态html页面上,以后再访问相同网站时就不需要再次查询数据,直接加载显示html页面。

下面做了一个实例优化,代码如下:

@Controller
public class FreeMakerController {

    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

    @RequestMapping("/genhtml")
    public String genHtml(HttpServletRequest request, HttpServletResponse response)throws Exception {
        //1、从spring容器中获得FreeMarkerConfigurer对象。
        //2、从FreeMarkerConfigurer对象中获得Configuration对象。
        Configuration configuration = freeMarkerConfigurer.getConfiguration();
        //3、使用Configuration对象获得Template对象。相应的ftl模板我已经放到项目工程中去了,此项目我放在/WEB-INF/ftl目录下
        Template template = configuration.getTemplate("hello.ftl");
        //4、创建数据集
        Map dataModel = new HashMap<>();
        //需要把数据放到Map集合中去
        dataModel.put("hello", "1000");
        //5、创建输出文件的Writer对象,创建HTML文件
        File file = new File(request.getServletContext().getRealPath("/WEB-INF/html") + "/html","hello.html");

        File dir = file.getParentFile();  
        if (!dir.exists()) {  
            dir.mkdirs();  
        }
        try {
            if (!file.exists()) {
                file.createNewFile();  
            }
        } catch (IOException e) {  
            e.printStackTrace();  
        }

        Writer out = new FileWriter(file);
        //6、调用模板对象的process方法,数据封装到文件中去。
        template.process(dataModel, out);
        //7、关闭流。
        out.close();
        //直接显示已加载好数据的HTML文件,而不是jsp文件
        return "/html/hello.html";
    }
}

属性配置:

<mvc:resources location="/WEB-INF/html/html/" mapping="/html/*.html"/>
<mvc:resources location="/WEB-INF/jsp/" mapping="/jsp/*.html"/>
<bean id="freemarkerConfig"
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
        <property name="defaultEncoding" value="UTF-8" />
</bean>

在实践过程我也遇到一些问题:
1)一开始在Springmvc.xml中配置jsp过滤属性

<!-- 配置视图解析器 作用:在controller中指定页面路径的时候就不用写页面的完整路径名称了,可以直接写页面去掉扩展名的名称-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--真正的页面路径 =  前缀 + 去掉后缀名的页面名称 + 后缀
        前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!--后缀-->
        <property name="suffix" value=".jsp"></property>
</bean>

但是我又配置了

<mvc:resources location="/WEB-INF/html/html/" mapping="/html/*.html"/>
<mvc:resources location="/WEB-INF/jsp/" mapping="/jsp/*.html"/>

无法正常访问网页,原来会优先进行前后缀的过滤,比如我返回的值是/html/hello.html,返回网址是”/WEB-INF/html/html/hello.html”,但是实际访问的网址是”/WEB-INF/jsp/html/hello.html.jsp”导致无法访问,需要把前后缀过滤注释掉。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电商项目中,秒杀属于技术挑战难度很大的业务。后台可以发布秒杀商品后或者将现有商品列入秒杀商品,热点分析系统会对商品进行分析,对热点商品做特殊处理。商城会员可以在秒杀活动开始的时间内进行抢购,抢购后可以在线进行支付,支付完成的订单由平台工作人员发货,超时未支付订单会自动取消。 秒杀系统中一共涉及到管理员后台、搜索系统、秒杀系统、抢单流程系统、热点数据发现系统等等。B2B 、B2C商城秒杀商品数据一般都是非常庞大,流量特别高,尤其是双十一等节日,所以设计秒杀系统,既要考虑系统抗压能力,也要考虑系统数据存储和处理能力。秒杀系统虽然流量特别高,但往往高流量抢购的商品为数不多,因此我们系统还需要对抢购热门的商品进行有效识别。 那秒杀系统里面需要解决的问题有哪些呢?1、如何应对海量商品访问?2、热点分析系统该如何设计,实现普通商品和热点商品的实时转换?3、普通商品和热点商品的抢单该如何设计和实现?4、面对海量的订单,我们该如何实现订单生成?5、面对用户超时未支付的订单,我们该如何设计和处理,包括订单信息变更和库存变更等。等等的问题? 本课程将从实战角度带你构建秒杀系统,解决以上我们关注的问题,同时结合实战讲解技术点,让大家在实战中掌握知识点。课程包含JavaEE、微服务、Linux、任务调度、大数据等综合性知识,让大家成为一个综合人才,提高自己的竞争力,为以后跳槽涨薪做好重复准备,机遇来了就能抓住。 课程所用的开发环境为:window10 开发工具:IDEA本课程用到技术:SpringBootSpringCloudMyBatisMySQLFreemark模板引擎BinlogCanalXXL-JOB分布式任务调度NginxLua轻量级脚本语言Flink实时分析KafkaZookeeperRedisOpenrestyMaven等等

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值