要用Java生成静态HTML,可以使用SpringBoot框架中的Thymeleaf模板引擎和SpringBoot内置的静态资源处理器,下面是详细的步骤:
1. 导入依赖
将以下依赖加入到pom.xml文件中:
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
2. 创建Controller
创建一个Controller类,例如:
@Controller
public class HtmlGeneratorController {
@Autowired
private ProductService productService;
@RequestMapping(value = "/products", method = RequestMethod.GET)
public String generateProductHtml(Model model) {
List<Product> products = productService.getAllProducts();
model.addAttribute("products", products);
return "products";
}
}
当访问/products时,将会调用generateProductHtml方法,查询所有产品数据并通过Model对象传递给Thymeleaf模板引擎。
3. 创建Thymeleaf模板文件
在src/main/resources/templates目录下创建products.html文件,例如:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Product List</title>
</head>
<body>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr th:each="product : ${products}">
<td th:text="${product.id}"></td>
<td th:text="${product.name}"></td>
<td th:text="${product.price}"></td>
</tr>
</tbody>
</table>
</body>
</html>
该模板文件定义了一个HTML表格,使用了Thymeleaf的循环语法th:each来渲染产品数据。
4. 设置静态资源路径
在application.properties文件中,设置静态资源路径为static目录,例如:
spring.resources.static-locations=classpath:/static/
5. 生成静态HTML
打开控制台,使用curl或者浏览器来请求/products接口,例如:
curl http://localhost:8080/products -o products.html
或者在浏览器中访问http://localhost:8080/products,并保存HTML源文件。
此时会在项目的根目录下生成一个名为products.html的静态HTML文件,其中包含了从数据库中查询出来的产品数据。
示例1
假设现在我们有一个Hero类:
public class Hero {
private Long id;
private String name;
private String title;
private Integer price;
private Integer damage;
// 省略getter和setter
}
我们需要针对该实体类生成静态HTML页面,显示所有英雄数据。在这种情况下,我们需要重新编写前面提到的步骤中的第二和第三步。
首先,我们需要创建一个HeroController类:
@Controller
public class HeroController {
@Autowired
private HeroService heroService;
@RequestMapping(value = "/heroes", method = RequestMethod.GET)
public String generateHeroHtml(Model model) {
List<Hero> heroes = heroService.getAllHeroes();
model.addAttribute("heroes", heroes);
return "heroes";
}
}
然后,我们需要创建一个名为heroes.html的模板文件:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hero List</title>
</head>
<body>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Title</th>
<th>Price</th>
<th>Damage</th>
</tr>
</thead>
<tbody>
<tr th:each="hero : ${heroes}">
<td th:text="${hero.id}"></td>
<td th:text="${hero.name}"></td>
<td th:text="${hero.title}"></td>
<td th:text="${hero.price}"></td>
<td th:text="${hero.damage}"></td>
</tr>
</tbody>
</table>
</body>
</html>
接下来,我们只需要使用上面提到的命令生成静态HTML文件:
curl http://localhost:8080/heroes -o heroes.html
示例2
假设我们需要生成一个动态的导航菜单,菜单项的名称和URL是从数据库中读取的,我们可以如下实现:
首先,我们需要创建一个NavMenuController类:
@Controller
public class NavMenuController {
@Autowired
private NavMenuService navMenuService;
@RequestMapping(value = "/navMenu", method = RequestMethod.GET)
public String generateNavMenuHtml(Model model) {
List<NavMenu> navMenus = navMenuService.getAllNavMenus();
model.addAttribute("navMenus", navMenus);
return "navMenu";
}
}
然后,我们需要创建一个名为navMenu.html的模板文件:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Navigation Menu</title>
</head>
<body>
<ul>
<li th:each="navMenu : ${navMenus}">
<a th:href="${navMenu.url}" th:text="${navMenu.name}"></a>
</li>
</ul>
</body>
</html>
然后,我们只需要使用上面提到的命令生成静态HTML文件:
curl http://localhost:8080/navMenu -o navMenu.html
以上就是使用SpringBoot如何用Java生成静态HTML的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot如何用java生成静态html - Python技术站