前言
以前在开发web项目时使用的是前后端不分离项目,那时候使用的是jsp,然后是后端返回ModelAndView,并且会绑定一些动态数据,类似于一个map数据,然后返回某个jsp的名称即可显示出渲染过的html内容。
那么如何用简单高效的方法来替换jsp模板中的动态数据呢,我们需要渲染的数据往往是采用这样的写法${name}
使用正则即可替换jsp中的内容,代码如下:
public class PatternDemo {
public static void main(String[] args) {
String html = "name:${name},age:${age}";
// 正则匹配${xxx}的数据
Pattern pattern = Pattern.compile("\\$\\{[^\\}]+\\}", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(html);
Map<String,Object> map = new HashMap<String, Object>(){{
put("name","jack");
put("age",18);
}};
while(matcher.find()) {
// 循环每个搜索到的数据
String group = matcher.group();
System.out.println(group);
String group2 = group.replaceAll("\\$\\{|\\}","");
if(map.containsKey(group2)) {
html = html.replaceAll("\\$\\{"+group2+"\\}",String.valueOf(map.get(group2)));
}
}
System.out.println(html);//输出name:jack,age:18
}
}
由此引发的思考后得出结论,mvc使用模板引擎正是使用这样的方式,mvc拿到返回的页面名称,然后加载模板引擎内容拿到html代码,再使用后端绑定的Map数据,进行替换后再使用输出流输到到浏览器上即可渲染。