OA系统六:前期准备四:整合FreeMarker;引入Servlet3.1依赖;顺带设置下logback.xml日志;

因为,在当前工程中,web应用选择Servlet3.1和FreeMarker。所以,我们需要在当前项目中整合FreeMarker。(有关FreeMarker的内容可以参考FreeMarker一:什么是模板引擎;FreeMarker和JSP的比较;及邻近的几篇博客,快速浏览十几分钟就能OK啦)

目录

一:整个FreeMarker 

1.引入依赖

(1)引入FreeMarker依赖 

(2)引入Servlet依赖

2.FreeMarker配置:在web.xml中配置FreemarkerServlet

3.测试

(1)创建ftl文件

(2)创建Servlet

(3)发布前配置:设置IDEA发布中包括maven的jar包

(4)发布

二:最后一点额外的东西,设置下logback;


一:整个FreeMarker 

1.引入依赖

(1)引入FreeMarker依赖 

(2)引入Servlet依赖

说明:

(1)Servlet的版本四3.1.0,这是因为这个版本必须要和创建这个Maven web工程时所指定的版本一致;

(2)provided:因为web容器(比如Tomcat)本身就是一个Servlet容器,其自带了Servlet-apr.jar。所以,我们这儿引入的Servlet依赖只需要在程序编译的时候用到,并不需要将这个Servlet依赖发布到最终的运行环境中,因为Tomcat已经自带了。    

         ***可以帮助我们控制当前的依赖在哪个阶段参与。比如junit是个单元测试框架,在实际线上运行时是不需要这个依赖的,所以junit可以增加标签。

2.FreeMarker配置:在web.xml中配置FreemarkerServlet

在web.xml中配置FreeMarker。要想使freemarker在web项目中起作用,需要对freemarker.jar中的FreemarkerServlet的这个Servlet类进行配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>freemarker</servlet-name>
        <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
        <init-param>
            <param-name>TemplatePath</param-name>
            <param-value>/WEB-INF/ftl</param-value>
        </init-param>
        <init-param>
            <!--default_encoding:用于设置读取ftl文件时采用的字符集-->
            <param-name>default_encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>freemarker</servlet-name>
        <url-pattern>*.ftl</url-pattern>
    </servlet-mapping>
</web-app>

说明:

(1)这部分的内容可以对比参考FreeMarker七:FreeMarker与Servlet整合;(这篇博客是Freemarker部分的核心重点);很多内容都是都是重复的;这个参考文章十分重要!!!

(2)

default_encoding这是编码方式utf-8,是出于兼容性考虑。FreemarkerServlet需要去读取指定的ftl文件,再将这个ftl文件结合实际的数据产生最终的HTML,但是ftl文件是一个纯粹的文本文件,对于ftl这个文件本身来说其也是有字符集的。。。。。在绝大多数系统中,这个字符集默认都是utf-8,但是少数情况下ftl文件的字符集可能是其他的编码方式,因此这儿设置default_encoding,就是告诉FreemarkerServlet统一的按照utf-8的这种字符集格式来读取ftl文件。。。。。在大多数情况下,使用IDE创建的ftl文件的默认字符集都是utf-8格式,所以default_encoding不写也不会产生中文乱码,,,,这儿写default_encoding仅仅是以防万一。

但是,这样设置之后,只是FreemarkerServlet按照UTF-8的编码方式去解析jst文件,,,,,,,所以还需要确保ftl文件的编码方式是UTF-8.可以参考这篇文章:解决freemarker的ftl文件中文乱码问题

***********************************

最近使用freemarker模板引擎输出html时,发现java服务端返回的中文数据在ftl文件中显示正常,但是ftl文件写死的中文出现乱码的情况。
1.首页ftl文件设置了网页的编码如下:

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

2.spring-mvc关于freemarker的配置如下,需要在freemarker的配置里加上

<!-- freemarker的配置 -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">    
       <property name="templateLoaderPath">    
           <value>/WEB-INF/views/</value>
       </property>
       <!--设置编码 -->
      <property name="defaultEncoding" value="UTF-8" />
      <!-- 页面数值的显示格式,避免1000显示成1,000 -->
      <property name="freemarkerSettings">
          <props>
              <prop key="number_format">#</prop>
          </props>
      </property>
</bean>   
 
 <!--FreeMarker视图配置-->
<bean id="ftlviewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
       <property name="suffix" value=".ftl" />   
       <property name="order" value="0"/>
       <property name="contentType" value="text/html;charset=UTF-8"/>
       <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
      <!-- 方便页面获得项目的绝对路径 -->
       <property name="requestContextAttribute" value="request" />
 
</bean>

 这样就解决了乱码的问题。
原文作者技术博客:https://www.jianshu.com/u/ac4daaeecdfe

***********************************

3.测试

(1)创建ftl文件

(2)创建Servlet

(PS:右键没有Servlet的可以参考IntelliJ IDEA开发工具入门七:创建Web工程;启动Web应用;设置上下文路径;热部署设置;创建Servlet;项目打包(war)发布;【这篇博客十分重要!!!】

TestServlet:内容很简单

package com.imooc.oa.test;

import com.imooc.oa.utils.MybatisUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "TestServlet",urlPatterns = "/test")
public class TestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String resultehaha = (String) MybatisUtils.executeQuery(sqlSession -> sqlSession.selectOne("test.sample"));
        request.setAttribute("result", resultehaha);
        request.getRequestDispatcher("/test.ftl").forward(request,response);
    }
}

说明:

(1)只需要强调一点,以前使用Eclipse开发的时候:可以:

                 方式一:先新建一个类然后让这个类继承HTTPServlet类,然后如果采用注解形式的话,可以如下:(参见:Servlet入门十:Servlet的注解: @WebServlet(“/anno“)

                 方式二:右键直接新建一个Servlet,其注解中也只是有一个"/"

这与IDEA中自动创建的Servlet的注解中的内容还是有差别的。

(3)发布前配置:设置IDEA发布中包括maven的jar包

(4)发布

(在发布的时候,遇到了一个问题,参见:pom中的junit依赖的<scope>设置为了test → maven项目的test目录隐藏了 → 运行时报错org.junit没发现;;;maven中的scope属性;

至此,就说明在当前imooc-oa工程中,mybatis和FreeMarker就整合成功了。


二:最后一点额外的东西,设置下logback;

可以参考:MyBatis进阶一:MyBatis日志管理;(【如何输出日志到日志文件中】待补充……)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值