使用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”导致无法访问,需要把前后缀过滤注释掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值