【问题标题】:JSP not rendering using Spring Boot and MongoDBJSP 不使用 Spring Boot 和 MongoDB 进行渲染
【发布时间】:2019-01-30 21:25:31
【问题描述】:

我正在尝试在 Spring Boot 中运行 JSP,但显示的只是 welcome 这个词,而不是我的实际内容。在调用 MongoDB 之后调用 JSP。当我从我的 Java 代码调用 MongoDB 时,我也会遇到这些异常。

com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message at com.mongodb.internal.connection.InternalStreamConnection.translateReadException(InternalStreamConnection.java:553) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:444) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:295) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:255) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:83) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:33) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:106) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:63) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:127) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongo-java-driver-3.9.1.jar:na] at java.base/java.lang.Thread.run(Thread.java:844) [na:na] Caused by: java.net.SocketTimeoutException: Read timed out at java.base/java.net.SocketInputStream.socketRead0(Native Method) ~[na:na] at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:na] at java.base/java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:na] at java.base/java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:na] at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:109) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:570) ~[mongo-java-driver-3.9.1.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:441) ~[mongo-java-driver-3.9.1.jar:na] ... 9 common frames omitted

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>

控制器代码:

@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;
}

【问题讨论】:

    标签: spring mongodb spring-boot jsp


    【解决方案1】:

    您不会在 HTML 代码中使用 JSP,它是 Angular 框架。 Angular 不会读取您在控制器中作为“员工”属性推送的数据。

    改为这个

    <tr ng-repeat="employee in employees">
                    <td>{{ employee.firstName }}</td>
                    <td>{{ employee.lastName }}</td>
                    <td>{{ employee.empNumber }}</td>
                    <td>{{ employee.payRate }}</td>
    </tr>
    

    使用 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>
    

    Read more about the JSP

    如果您只想使用 JSP 构建网页,您还可以删除所有 Angular(以ng 为后缀的属性)元素。

    【讨论】:

    • 这不起作用。我仍然得到相同的结果。
    • 您确定打开了正确的网页吗?您应该至少看到 Frank's App 而不是 welcome 消息。
    • 您是否调试过应用程序以确保testdb 数据库中至少有一名员工?
    • 我不确定如何通过 Spring Boot 进行调试,但我已经通过 MongoDB 手动验证了我试图访问的集合中有数据。顺便说一句,这不在testdb 数据库中。这是通过我为此应用程序创建的数据库。
    • 我刚刚弄清楚如何从 Eclipse 进行调试,但现在我从数据库调用中得到了异常。我已经编辑了原始帖子以反映这一点。
    【解决方案2】:

    验证以下内容

    1. 检查您的 mongodb 服务器是否正在运行。服务器未运行可能会导致上述异常。

    2. 在application.properties文件中检查monogdb dbname、host和port

      spring.data.mongodb.host=localhost

      spring.data.mongodb.port= *****

      spring.data.mongodb.database=dbName

    3. 也检查这两个条目

      spring.mvc.view.prefix=/WEB-INF/jsp/

      spring.mvc.view.suffix=.jsp

    【讨论】:

    • 这也不起作用。我在调试模式下运行它,调用没有异常返回,但也没有数据,而且我知道有数据,因为我自己手动把它放在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2016-08-11
    • 2016-05-08
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多