由于公司业务面向的是非洲市场 那边有些国家智能机并未普及,像乌干达地区还是以功能机为主 为了支持功能机,需要新创一个 wap
网站用于支持功能机(天哪!)
由于功能机试不支持js的,前端使用vue不现实,只能通过模板的形式 可以使用jsp,freemarker,Thymeleaf等引擎,但最终选型 velocity
模板(老大用过罢了) 后端使用 springboot
#项目简单架构
#springboot整合velocity
选择spring-boot-starter-velocity,高版本的springboot不支持,只能选用低版本的1.4.7
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-velocity</artifactId> </dependency> 复制代码
server.port=2828 spring.velocity.cache=false spring.velocity.charset=UTF-8 spring.velocity.check-template-location=true spring.velocity.content-type=text/html spring.velocity.enabled=true spring.velocity.prefix=/templates/ spring.velocity.suffix=.vm 复制代码
@Controller @RequestMapping("/velocity") public class TestController { // demo测试 @RequestMapping("/demo") public String demo1(Map map) { map.put("message", "这是测试的内容。。。"); map.put("time", System.currentTimeMillis()); return "index"; } } 复制代码
<html> <body> $!{message} $!{time} </body> </html> 复制代码
http://localhost:2828/velocity/demo
ok,最简单的springboot整合velocity完毕
如何将时间戳自定义时间格式呢
内容如下
<?xml version="1.0" encoding="UTF-8"?> <toolbox> <tool> <key>DateTool</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.DateTool</class> </tool> </toolbox> 复制代码
当然,如果需要处理数字啥的,也可以引入一个tool即可
application.properties
添加spring.velocity.toolbox-config-location=/toolbox.xml
<h1>日期处理</h1> 处理前:$time <br> 处理后:$!DateTool.format($!time) 复制代码
新建VelocityExceptionHander
@ControllerAdvice public class VelocityExceptionHander { @ExceptionHandler(value = Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public String exceptionHandler(Exception e, HttpServletRequest request) { System.out.println("未知异常!原因是:" + e); request.setAttribute("msg", e); return "500"; } } 复制代码
新建500.vm模板页面
<html> <body> error <br> $!msg </body> </html> 复制代码
之后如果出现异常,会跳转到500页面。
// velocity常用语法汇总 @RequestMapping("/allDemo") public String demo3(Map map) { map.put("amount", 100); map.put("msg", "dahai"); map.put("sex", "man"); putString(map); putSportList(map); map.put("time", System.currentTimeMillis()); return "allDemo"; } private void putSportList(Map map) { List<Sport> sportList = new ArrayList<Sport>() {{ add(new Sport(1, "Football")); add(new Sport(2, "Basketball")); add(new Sport(3, "tennis")); add(new Sport(4, "rugby")); add(new Sport(5, "cricket")); }}; map.put("sportList", sportList); Map<Integer, Sport> sportMap = sportList.stream().collect(Collectors.toMap(Sport::getId, s -> s)); map.put("sportMap", sportMap); } private void putString(Map map) { List<String> strings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); map.put("strings", strings); } 复制代码
vm模板页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>velocity test</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body> <h1>字符串类型</h1> $!msg <h1>if标签</h1> #if($!sex == 'man') 男 #else 女 #end <h1>set操作(定义变量)</h1> #set($hw = 'ok') $hw <h1>普通for循环</h1> #foreach($!s in $!strings) $s #end <h1>对象for循环</h1> #foreach($!sport in $!sportList) $!sport.name #end <h1>map for循环</h1> #foreach($!sp in $!sportMap.keySet()) $sp $!sportMap.get($sp).name <br> #end <h1>日期处理</h1> 处理前:$time <br> 处理后:$!DateTool.format($!time) <h1>计算加减乘除</h1> #set($jia = $amount + 10) +10= $jia <br> #set($jian = $amount - 10) -10= $jian <br> #set($cheng = $amount * 10) ×10= $cheng <br> #set($chu = $amount / 10) ÷10= $chu <br> </body> </html> 复制代码
ok,完毕!重新温馨下熟悉而又陌生的前后端不分离(服务端渲染)的工程,؏؏☝ᖗ乛◡乛ᖘ☝؏؏