JSP未使用Spring引导和MongoDB呈现
我试图在Spring Boot中运行JSP,但显示的是单词JSP未使用Spring引导和MongoDB呈现,spring,mongodb,spring-boot,jsp,Spring,Mongodb,Spring Boot,Jsp,我试图在Spring Boot中运行JSP,但显示的是单词welcome,而不是我的实际内容。在调用MongoDB之后调用JSP。当我从Java代码调用MongoDB时,也会遇到这些异常 com.mongodb.mongoscocketreadTimeoutException:接收消息时超时 在com.mongodb.internal.connection.InternalStreamConnection.translateradexception(InternalStreamConnectio
welcome
,而不是我的实际内容。在调用MongoDB之后调用JSP。当我从Java代码调用MongoDB时,也会遇到这些异常
com.mongodb.mongoscocketreadTimeoutException:接收消息时超时
在com.mongodb.internal.connection.InternalStreamConnection.translateradexception(InternalStreamConnection.java:553)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:444)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:295)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.InternalStreamConnection.sendandereceive(InternalStreamConnection.java:255)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:83)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:33)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:106)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:63)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:127)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunName.run(DefaultServerMonitor.java:117)~[mongo-java-driver-3.9.1.jar:na]
在java.base/java.lang.Thread.run(Thread.java:844)[na:na]
原因:java.net.SocketTimeoutException:读取超时
在java.base/java.net.SocketInputStream.socketRead0(本机方法)~[na:na]
在java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:116)~[na:na]
在java.base/java.net.SocketInputStream.read(SocketInputStream.java:171)~[na:na]
在java.base/java.net.SocketInputStream.read(SocketInputStream.java:141)~[na:na]
在com.mongodb.internal.connection.SocketStream.read(SocketStream.java:109)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:570)~[mongo-java-driver-3.9.1.jar:na]
在com.mongodb.internal.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:441)~[mongo-java-driver-3.9.1.jar:na]
... 省略9个公共帧
welcome.jsp
<!DOCTYPE html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html lang="en" ng-app="employeeApp">
<head>
<title>Frank's App</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<script src="app.js"></script>
<style>
table, th, td {
border: 1px solid black;
}
</style>
</head>
<body>
<h2>Frank's App</h2>
<div ng-app="myApp" ng-controller="myCtrl">
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Employee Number</th>
<th>Pay Rate</th>
</tr>
<tr ng-repeat="employee in employees">
<td>{{ employee.firstName }}</td>
<td>{{ employee.lastName }}</td>
<td>{{ employee.empNumber }}</td>
<td>{{ employee.payRate }}</td>
</tr>
</table>
</div>
</body>
弗兰克的应用程序
表,th,td{
边框:1px纯黑;
}
弗兰克的应用程序
名字
姓
员工编号
工资率
{{employee.firstName}
{{employee.lastName}
{{employee.empNumber}
{{employee.payRate}
控制器代码:
@RequestMapping("/welcome")
public String welcome(Model model) {
model.addAttribute("employees", getEmployees());
return "welcome";
}
@RequestMapping("/getEmployees")
public List<Employee> getEmployees() {
MongoDatabase db = getDatabase();
MongoCollection<Document> collection = db.getCollection(COLLECTION);
Document query = new Document();
List<Employee> employees = collection.find(query, Employee.class).into(new ArrayList<Employee>());
return employees;
}
private MongoDatabase getDatabase() {
CodecRegistry pojoCodecRegistry = org.bson.codecs.configuration.CodecRegistries.fromRegistries(
MongoClientSettings.getDefaultCodecRegistry(), org.bson.codecs.configuration.CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build()));
MongoDatabase database = mongo.getDatabase("testdb").withCodecRegistry(pojoCodecRegistry);
return database;
}
@RequestMapping(“/welcome”)
公共字符串欢迎(模型){
addAttribute(“employees”,getEmployees());
返回“欢迎”;
}
@请求映射(“/getEmployees”)
公开名单{
MongoDatabase db=getDatabase();
MongoCollection collection=db.getCollection(collection);
单据查询=新建单据();
List employees=collection.find(query,Employee.class).into(new ArrayList());
返回员工;
}
私有MongoDatabase getDatabase(){
CodecRegistry pojoCodecRegistry=org.bson.codecs.configuration.CodecRegistries.fromRegistries(
MongoClientSettings.getDefaultCodecRegistry(),org.bson.codecs.configuration.CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true.build());
MongoDatabase database=mongo.getDatabase(“testdb”)。带有CodeRegistry(POJOCodeRegistry);
返回数据库;
}
在HTML代码中不使用JSP,它是一个角度框架。Angular不会读取您在控制器中作为“employees”属性推送的数据
而是这个
<tr ng-repeat="employee in employees">
<td>{{ employee.firstName }}</td>
<td>{{ employee.lastName }}</td>
<td>{{ employee.empNumber }}</td>
<td>{{ employee.payRate }}</td>
</tr>
{{employee.firstName}
{{employee.lastName}
{{employee.empNumber}
{{employee.payRate}
使用JSP语法,如下所示
<c:forEach var="employee" items="${employees}">
<tr>
<td>${employee.firstName}</td>
<td>${employee.lastName}</td>
<td>${employee.empNumber}</td>
<td>${employee.payRate}</td>
</tr>
</c:forEach>
${employee.firstName}
${employee.lastName}
${employee.empNumber}
${employee.payRate}
如果只想使用JSP构建网页,还可以删除所有Angular(属性后缀为
ng
)元素 验证以下内容
这不管用。我仍然得到相同的结果。您确定打开了正确的网页吗?您应该至少看到
Frank的应用程序
而不是welcome
消息。您是否调试了该应用程序以确保在testdb
数据库中至少有一名员工?我不确定如何通过Spring Boot进行调试,但我已经通过MongoDB手动验证了我试图访问的集合中是否有数据。这不在testdb
databa中