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 ...
随机推荐
- 两个非空的<div>元素inline-block化后出现空白部分解决办法
在涉及到两个<div>元素并列显示的效果时,一般有两种方法: 1.使用float元素让元素并联显示: 2.将块状的<div>元素display设置为inline-block,使 ...
- [hdu P4114] Disney's FastPass
[hdu P4114] Disney's FastPass Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 ...
- SQL列转行用逗号隔开
declare @result varchar(255) set @result = ” select @result = @result + cast(F_IT_FWID as varchar( ...
- Linux 安装 ffmpeg
在安装ffmpeg之前,需要先安装一些必需组件.包括但不限于以下组件(有的系统里面可能已经安装过) 首先在根目录下创建:ffmpeg_sources 1.Yasm sudo apt-get insta ...
- 实现首字母或拼音检索-sql语句方式
create function [dbo].[fn_GetPY](@str nvarchar(max),@type int) returns nvarchar(max) as begin ) begi ...
- linux服务管理 服务管理
系统的运行级别 运行级别 0 关机(不能设置) 1 单用户模式,类似windows的安全模式 2 不完全的命令行模式,不含NFS服务(文件共享的服务) 3 完全的命令行模式,就是标准字符界面 4 系统 ...
- CodeForces - 1015 D.Walking Between Houses
Description Natasha is planning an expedition to Mars for nn people. One of the important tasks is t ...
- jdbc从基础到优化
package com.xk.demotest.tools; import java.io.IOException; import java.io.InputStream; import java.s ...
- linux——系统内核参数优化
vim /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 fs.file-max = 999999 net.ipv4.tcp_max_tw_buckets = ...
- Oracle创建视图的一个问题
问题: 在用户user1中创建视图,查询内容包含user2下的表数据, 创建视图的时候提示“权限不足”.执行如下语句: --为USER1授权 GRANT CREATE ANY TABLE TO USE ...