public class PageRender implements ResponseRender
package cn.ubibi.jettyboot.demotest.controller.render; import cn.ubibi.jettyboot.framework.commons.StringUtils;
import cn.ubibi.jettyboot.framework.commons.SystemUtils;
import cn.ubibi.jettyboot.framework.rest.ifs.ResponseRender;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.WebContext;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import org.thymeleaf.templateresolver.FileTemplateResolver;
import org.thymeleaf.templateresolver.ITemplateResolver; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class PageRender implements ResponseRender { private static TemplateEngine templateEngine = null; static {
init();
} public static void init() {
if (templateEngine == null) {
templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(getTemplateResolver());
}
} private static ITemplateResolver getTemplateResolver() {
if (SystemUtils.isMavenDevMode()) {
return getFileTemplateResolver();
}
return getClassLoaderTemplateResolver();
} private static FileTemplateResolver getFileTemplateResolver() { URL classLoaderResource = PageRender.class.getClassLoader().getResource("");
String classPath = StringUtils.appendIfNotEnd(classLoaderResource.getPath(), File.separator);
String srcResPath = classPath + ("../../src/main/resources".replace("/", File.separator)); FileTemplateResolver templateResolver = new FileTemplateResolver(); templateResolver.setSuffix(".html");
templateResolver.setPrefix(srcResPath + "/templates/");
templateResolver.setCacheTTLMs(3600000L);
templateResolver.setCacheable(false);
return templateResolver;
} private static ClassLoaderTemplateResolver getClassLoaderTemplateResolver() { ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(PageRender.class.getClassLoader()); templateResolver.setSuffix(".html");
templateResolver.setPrefix("/templates/");
templateResolver.setCacheTTLMs(3600000L);
templateResolver.setCacheable(true); return templateResolver;
} private static Map<String, Object> objectToMap(Object obj) {
if (obj == null) {
return null;
} if (obj instanceof Map) {
return (Map<String, Object>) obj;
} Map<String, Object> map = new HashMap<String, Object>(); Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
try {
map.put(field.getName(), field.get(obj));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} return map;
} private String template;
private Object pageData; public PageRender(String template, Object pageData) {
this.pageData = pageData;
this.template = template;
} @Override
public void doRender(HttpServletRequest request, HttpServletResponse response) throws IOException { ServletContext servletContext = request.getServletContext();
WebContext ctx = new WebContext(request, response, servletContext, request.getLocale()); Map<String, Object> variables = objectToMap(this.pageData);
ctx.setVariables(variables); response.setCharacterEncoding("utf-8");
templateEngine.process(this.template, ctx, response.getWriter());
} }
public class PageRender implements ResponseRender的更多相关文章
- Android对象类系列化public class User implements Parcelable
package com.gaojinhua.android.activitymsg; import android.os.Parcel; import android.os.Parcelable; / ...
- (1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积。int getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的double型变量x,
package com.hanqi.test; //创建接口 public interface ShapePara { //获取面积的方法 double getArea(); //获取周长的方法 do ...
- JAVA中extends 与implements区别
JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extend ...
- (1)定义一个接口CanFly,描述会飞的方法public void fly(); (2)分别定义类飞机和鸟,实现CanFly接口。 (3)定义一个测试类,测试飞机和鸟,在main方法中创建飞机对象和鸟对象, 再定义一个makeFly()方法,其中让会飞的事物飞。并在main方法中调用该方法, 让飞机和鸟起飞。
package b; public interface CanFly { public void fly(); } package b; public class FeiJi implements C ...
- (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) (4)设计一个测试类
package b; public interface Computer { int computer(int n,int m); } package b; public class Jia impl ...
- 利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) 此方法要求能够:1.用传递过来的对象调用compute
package com.homework5; public interface Compute { //声明抽象方法 int computer(int n,int m); } package com. ...
- 1.(1)编写一个接口ShapePara,要求: 接口中的方法: double getArea():获得图形的面积。double getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的dou
package jiekou1; public interface ShapePara { //定义常量PI final double PI=3.14; //定义抽象方法 //获得图形面积 doubl ...
- class ResultServletContextListener implements ServletContextListener
package com.management.spring; import java.io.BufferedReader; import java.io.IOException; import jav ...
- 抽象(abstract)升级版变接口(interface) 继承(extends)升级版叫实现(implements) 升级版啊升级版 接口可以多继承
Client --------------------------------------------------- public class Client{ public static void m ...
随机推荐
- QComboBox样式
https://blog.csdn.net/lys211/article/details/43956979https://blog.csdn.net/x_nazgul/article/details/ ...
- Mybatis 搭建遇到的坑
1. <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC " ...
- git 操作规范
分支描述 长期存在 online 主分支,负责记录上线版本的迭代,该分支代码与线上代码是完全一致的. dev 开发分支,该分支记录相对稳定的版本,所有的feature分支都从该分支创建. 多套开发环境 ...
- JavaWeb基础-过滤器监听器
过滤器 1定义:过滤器是一个服务器的组件,他可以截取用户端的请求与响应信息,并对这些信息进行过滤;过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 2过滤器的工作原理: 3过滤器 ...
- IDE Fix Pack 6.4.2 released (bugfix release)
IDE Fix Pack 6.4.2 addresses two bugs. It fixes an issue with the TCustomListBox.ResetContent patch ...
- alias-unalias
一.用一条命令完成创建目录/data/test,即在/目录下创建/data目录,及其子目录/data/test 解答:mkdir -p /data/test 实践过程: 二.已知/tmp目录下已经存在 ...
- VBA定时执行某程序
OnTime 方法参阅应用于示例特性安排一个过程在将来的特定时间运行(既可以是具体指定的某个时间,也可以是指定的一段时间之后). expression.OnTime(EarliestTime, Pro ...
- L2-024. 部落(并查集)*
L2-024. 部落 参考博客 #include<cstdio> #include<iostream> #include<set> #include<algo ...
- CentOS版Linux系统上运行ASP.NET应用
一.安装: 1. 安装Apache Http Server yum install httpd2. 安装Mono yum install mono3. 安装Mono插件,用来处理ASP.NET请求 y ...
- BZOJ1800:fly 飞行棋 (双指针 组合数)
pro: 给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列. 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形. N<20; sol:很可能被 ...