day12-FreeMarker

Visión general

FreeMarker es un motor de plantillas escrito en lenguaje Java, que genera y genera varios archivos basados ​​en plantillas. No solo se puede utilizar como tecnología de realización de la capa de presentación, sino que también se puede utilizar para generar XML, html o Java.

1.
Se establecen dos beans en el archivo de configuración del proceso de implementación de Freemarker
a) La ruta y el código del archivo de plantilla que se va a leer.
b) Tipo de página de salida (HTML), sufijo de lectura (.ftl) y código de salida

Los datos de back-end regresan a la página
a) El método del controlador de back-end agrega el parámetro Model
b) Completa los datos con el modelo
c) Devuelve la cadena de nombre de la página, de hecho, no le importa qué cadena se devuelva. Por ejemplo, la ruta de la solicitud es http://item.pinyougou.com/149187842867973.html, esta página está llena de datos y la URL sigue siendo esta dirección.

El proceso general: el
front-end solicita http://item.pinyougou.com/149187842867973.html, ingresa al back-end y obtiene la identificación detrás de la ruta, y establece un parámetro de modelo. Los datos se consultan por id y se guardan en el modelo, y los datos se completarán en la página cuando regrese a la página.
Tenga en cuenta que no se genera ningún archivo HTML específico para formar un estado estático. Aquí está la función, solo complete los datos de acuerdo con la plantilla

https://item.jd.com/5089253.html Solicitar URL con html como sufijo
Pseudoestático: optimización SEO, mejorar la clasificación del sitio web
Pseudoestático: https://item.jd.com/5089253.html -> tomcat- -> item.ftl es
realmente estático: https://item.jd.com/5089253.html -> nginx -> 5089253.html (página de inicio)

Integración de Freemarker en el proyecto (pseudoestático)

Aquí está la formación de pseudo-estática

confiar

Configuración de pinyougou-item-web / pom.xml:

<dependencies>
    <!-- freemarker -->
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
    </dependency>
</dependencies> 

Archivo de configuración

pinyougou-item-web / src / main / resources / springmvc.xml:

<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 开启MVC注解驱动 -->
    <mvc:annotation-driven/>
    <!-- 配置静态资源用WEB容器默认的servlet来处理 -->
    <mvc:default-servlet-handler/>

    
    
    <!-- FreeMarker配置开始 -->
    <!-- 配置FreeMarkerConfigurer -->
    <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <!-- 设置模板文件加载的基础路径 -->
        <property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
        <!-- 设置模板文件的默认编码 -->
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>
    <!-- 配置FreeMarker视图解析器 -->
    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <!-- 配置内容类型,指定模板文件的后缀名 这里是输出的文件的编码-->
        <property name="contentType" value="text/html;charset=UTF-8"/>
        <!-- 配置模板文件后缀名 -->
        <property name="suffix" value=".ftl"/>
    </bean>
    <!-- FreeMarker配置结束 -->

    
    
    
    <!-- ############## 配置dubbo服务消费者 ############## -->
    <!-- 配置当前应用的名称 -->
    <dubbo:application name="pinyougou-item-web"/>
    <!-- 配置zookeeper作为注册中心,注册服务地址 -->
    <dubbo:registry protocol="zookeeper" address="192.168.12.131:2181"/>
    <!-- 配置采用包扫描来引用服务,产生服务接口的代理对象 -->
    <dubbo:annotation package="com.pinyougou.item.controller"/>
</beans>

ruta ftl:

[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo de enlace anti-sanguijuela. Se recomienda guardar la imagen y subirla directamente (img-hMXP1DsT-1610073820093) (C: \ Users \ MT \ AppData \ Local \ Temp \ 1600101732550.png)]

capa de controlador

Cree ItemController.java en el paquete pinyougou-item-web / src / main / java / com.pinyougou.item.controller:

Tenga en cuenta que aquí no devuelve json para devolver la página, por lo que en lugar de usar la anotación @RestController, use la anotación @Controller

@Controller
public class ItemController {
    
    
    @Reference(timeout=10000)
    private GoodsService goodsService;
/**
     * 根据主键id获取商品信息
     * http://item.pinyougou.com/ 149187842867973.html
     * 149187842867973  -->  SPU商品表的主键id
     */
    @GetMapping("/{goodsId}")
    public String getGoods(@PathVariable("goodsId")Long goodsId, 
Model model){
    
    
// 使用视图解析器不一样,那model就不一样,这里的视图解析器是使用FreeMarker
// jsp : model中数据最后放到request
        // ftl : model中数据就是FreeMarker的数据模型
        Map<String, Object> data = goodsService.getGoods(goodsId);
        model.addAllAttributes(data);
        return "item";
    }
}

Desarrollo personal

接上面代码
// 基础使用是以下方式,这样在页面中可以直接通过${name}获取到后台数据
model.addAttribute("name","admin");
// 如果是使用Map方式,也可以通过key直接获取,这样页面也是可以使用${age}获取到数据
data.put("age", "12");
model.addAllAttributes(data);

capa de interfaz

pinyougou-interface / src / main / java / com.pinyougou.service / GoodsService.java método de aumento:

/** 获取商品信息 */
Map<String,Object> getGoods(Long goodsId);

Capa de realización empresarial

pinyougou-interface / src / main / java / com.pinyougou.service / GoodsService.java método de aumento:

/** 获取商品信息 */
public Map<String, Object> getGoods(Long goodsId){
    
    
   try{
    
    
      /** 定义数据模型 */
      Map<String, Object> dataModel = new HashMap<>();
      /** 加载商品SPU数据 */
      Goods goods = goodsMapper.selectByPrimaryKey(goodsId);
      dataModel.put("goods", goods);
      /** 加载商品描述数据 */
      GoodsDesc goodsDesc =goodsDescMapper.selectByPrimaryKey(goodsId);
      dataModel.put("goodsDesc", goodsDesc);
      return dataModel;
   }catch (Exception ex){
    
    
      throw new RuntimeException(ex);
   }
}

apper.selectByPrimaryKey (GoodsId);
dataModel.put ("goodsDesc", goodsDesc);
return dataModel;
} catch (Exception ex) { lanzar nueva RuntimeException (ex); } }



Supongo que te gusta

Origin blog.csdn.net/qq_45850872/article/details/112346966
Recomendado
Clasificación