jsp&thymeleaf双视图应用
来源:互联网 发布:apache java 编辑:程序博客网 时间:2024/05/20 09:48
如何同时使用jsp&thymeleaf双视图,下面的实践案例继续在之前已经构建的工程基础上展开。
1、首先定义两中视图对应的页面:
1.1、JSP:
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>JSP</title>
</head>
<body>
<h1>Hello ${name} from JSP!</h1>
</body>
</html>
1.2、Thymeleaf:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head lang="en">
<meta charset="UTF-8" />
<title>Thymeleaf</title>
</head>
<body>
<h1>Hello <span th:text="${name}"></span> from Thymeleaf!</h1>
</body>
</html>
2、定义处理视图的视图解析器配置类:
package com.shf.springboot.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
/**
* 主要配置多视图实现的视图解析器相关bean实例
* @author song
*/
@Configuration
public class ViewResolverConfiguration {
@Bean
public InternalResourceViewResolver getJspViewResolver(){
InternalResourceViewResolver jspViewResolver=new InternalResourceViewResolver();
jspViewResolver.setPrefix("/WEB-INF/");
jspViewResolver.setSuffix(".jsp");
jspViewResolver.setViewClass(JstlView.class);
//通过ViewNames属性来实现,通过请求中返回的视图名称匹配其采用哪个对应的视图解析器处理,从而找到对应prefix下的页面
jspViewResolver.setViewNames("jsp/*");
jspViewResolver.setOrder(10);
//开发时不启用缓存,改动即可生效
jspViewResolver.setCache(false);
return jspViewResolver;
}
}
3、下一步即可编写一个控制器处理请求:
package com.shf.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
/**
* 验证多视图模板
* @author song
*/
@Controller
public class HomeController {
@RequestMapping(value = "/{type}/home", method = RequestMethod.GET)
public ModelAndView showJspHome(@PathVariable(value="type") String type) {
ModelAndView model = new ModelAndView();
model.addObject("name", "帅帅");
if("jsp".equals(type)){
//加入类型路径,从而可以通过viewNames来判断选择视图对应的解析器
model.setViewName("jsp/home");
}else if("thymeleaf".equals(type)){
model.setViewName("thymeleaf/home");
}else{
model.setViewName("error");
}
return model;
}
}
4、下面我们启动服务,进行请求验证:
以上完美的实现了双视图的应用,下面来对1~4中关键配置进行分析。
4.1、ViewNames:在视图解析器配置中加入了jspViewResolver.setViewNames("jsp/*");配置,此配置能够协助我们根据controller中设定的视图名称判断,选择匹配的视图解析器进行视图选择处理。目前通过jsp/*的方式通配jsp视图。
4.2、springboot默认的thymeleaf视图存放路径在src/main/resource/templates下,此时为了能够更好的通过viewNames匹配,我们将thymeleaf视图页面存放在src/main/resource/templates/thymeleaf目录下,故通过thymeleaf/*的方式通配thymeleaf视图。
2、如果我们不想采用系统默认的thymeleaf存放路径,需要自定义设置thymeleaf模板应用相关属性(如路径),则直接在上述2中的视图解析配置类进行相关视图解析bean实例的构建:
2.1、修改视图解析器配置类:
package com.shf.springboot.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.view.ThymeleafView;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
import org.thymeleaf.templateresolver.TemplateResolver;
/**
* 主要配置多视图实现的视图解析器相关bean实例
* @author song
*
*/
@Configuration
public class ViewResolverConfiguration {
@Bean
public InternalResourceViewResolver getJspViewResolver(){
InternalResourceViewResolver jspViewResolver=new InternalResourceViewResolver();
jspViewResolver.setPrefix("/WEB-INF/");
jspViewResolver.setSuffix(".jsp");
jspViewResolver.setViewClass(JstlView.class);
//通过ViewNames属性来实现,通过请求中返回的视图名称匹配其采用哪个对应的视图解析器处理,从而找到对应prefix下的页面
jspViewResolver.setViewNames("jsp/*");
jspViewResolver.setOrder(10);
//开发时不启用缓存,改动即可生效
jspViewResolver.setCache(false);
return jspViewResolver;
}
@Bean
public TemplateResolvertemplateResolver(){
TemplateResolver templateResolver=new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setOrder(0);
templateResolver.setCacheable(false);
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
@Bean
public SpringTemplateEnginetemplateEngine(){
SpringTemplateEngine templateEngine=new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
public ThymeleafViewResolverthymeleafViewResolver(){
ThymeleafViewResolver thymeleafViewResolver=new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine());
thymeleafViewResolver.setViewClass(ThymeleafView.class);
thymeleafViewResolver.setViewNames(new String[]{"thymeleaf/*"});
thymeleafViewResolver.setCharacterEncoding("UTF-8");
//开发时不启用缓存,改动即可生效
thymeleafViewResolver.setCache(false);
return thymeleafViewResolver;
}
}
2.2、添加设定路径下的页面模板
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head lang="en">
<meta charset="UTF-8" />
<title>Thymeleaf</title>
</head>
<body>
<h1>Hello <span th:text="${name}"></span> fromWEB-INF Thymeleaf!</h1>
</body>
</html>
2.3、重新启动服务进行验证
验证成功,浏览器渲染的自定义路径下页面。
3、此时我们打包成jar启动服务尝试下访问Thymeleaf视图:
访问失败,由于我们设置新的模板路径在WEB-INF下,此时jar部署模式下无法查找其目录下对应的模板视图。并且虽然我们的在resource下设定了error页面,此时也无法使用,同样由于设置了Thymeleaf模板路径。
那么我们取消自定义设置,重新打包为jar,访问resource目录下对应的视图:
成功渲染。(jar模式启动服务在WEB-INF下的无法访问,仅可以访问resource下的)
4、那么我们打包war包部署在常规容器下呢,验证下自定义路径的请求结果:
验证成功。
稍微调整下之前welcome的请求:
@GetMapping("/welcome")
public String welcome(Map<String, Object> model) {
model.put("time", new Date());
model.put("message", this.message);
return "jsp/welcome";
}
0 0
- jsp&thymeleaf双视图应用
- Spring MVC视图层:thymeleaf vs. JSP
- Spring MVC视图层:thymeleaf vs. JSP
- 用Thymeleaf替换JSP
- Thymeleaf如何兼容jsp
- Thymeleaf Or Jsp?
- 同时使用jsp与thymeleaf
- 使用默认thymeleaf作为视图模板
- Thymeleaf 之 页面模板应用
- Thymeleaf教程(二)应用
- Spring MVC view layer: Thymeleaf vs. JSP
- jsp、freemarker、velocity、thymeleaf页面方案分析
- thymeleaf模版使用与jsp比较
- Thymeleaf
- thymeleaf
- thymeleaf
- Thymeleaf
- Thymeleaf
- CentOS7下安装postgresql9.3+
- Framework中的连接管理机制(转载)
- [大数据]Hadoop 2.7.3 和Hbase 1.2.4安装教程
- 38. Count and Say
- 阿里云和腾讯云,最终谁会成为中国的AWS?
- jsp&thymeleaf双视图应用
- J2EE13个技术点
- 二叉搜索(排序)树
- Oracle VM VirtualBox 安装 centos7后,centos7解决办法
- Android性能优化总结
- dom4j 最常用最简单的用法(转)
- Grizzly 2.2发布,开源Java NIO框架
- 计算机与数学
- php + nginx 编译安装