我正在使用示例spring-petclinic Spring Boot应用程序进行我正在构建的演示。我正在尝试做一些看似超级基本的东西,但我正在努力(我是一个Java n00b)。
以下是示例应用:https://github.com/spring-projects/spring-petclinic
基本上我想在网站的欢迎页面上显示服务器主机名。
在WelcomeController.java文件(spring-petclinic/src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java
)中,我有以下内容:
package org.springframework.samples.petclinic.system;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
class WelcomeController {
@RequestMapping("/")
public String welcome() {
return "Hello from " + System.getenv("HOSTNAME") + String.format("%n");
}
}
我所取代的是从return "welcome"
到您在上面看到的返回值。
构建完成,我可以运行应用程序,但页面加载时出现以下错误:
Something happened...
Error resolving template "Hello from d7710dcc2456 ", template might not exist or might not be accessible by any of the configured Template Resolvers
我玩过model.addAttribute并添加了额外的public String
块,但有点超出我的深度!有什么想法吗?
答案 0 :(得分:1)
当您使用@RequestMapping从控制器方法返回String值时,spring将解析字符串值
配置视图模板。因此,返回“welcome”会解析resources/templates/
目录中的welcome.html。
当您使用返回“Hello from”+ System.getenv(“HOSTNAME”)+ String.format(“%n”)替换它时 它将查找名为“Hello from”+ System.getenv(“HOSTNAME”)+ String.format(“%n”)
的模板由于resources/templates/
内部不存在,因此会出错。
按照以下方式更改您的控制器:
@GetMapping("/")
public String welcome(Model model) {
model.addAttribute("hostname", System.getenv("HOSTNAME") );
return "welcome";
}
并改变你的welcome.html,
<h1>Hello from <span th:text="${hostname}">hostname</span></h1>
答案 1 :(得分:-1)
更新 - 修改问题后
要获得正在运行的计算机的hostname
,请尝试以下
import java.net.InetAddress;
import java.net.UnknownHostException;
String hostname;
try {
InetAddress ia = InetAddress.getLocalHost();
hostname = ia.getHostName();
} catch (UnknownHostException e) {
e.printStackTrace();
}
//assuming your thymeleaf template file called 'welcome'
model.addAttribute("hostname", hostname);
return "welcome";
在您的模板文件中
<h1>Hello from <span th:text="${hostname}">hostname</span></h1>