Mã servlet / JSP mẫu với cấu hình để kết nối với cơ sở dữ liệu MongoDB và xem kết quả truy vấn trong trang JSP.
(i) Cấu hình JNDI để truy cập cơ sở dữ liệu MongoDB (META-INF / context.xml):
<Context>
<Resource name="mongodb/mongoClient"
auth="Container"
type="com.mongodb.MongoClient"
closeMethod="close"
factory="com.mongodb.client.jndi.MongoClientFactory"
singleton="true"
connectionString="mongodb://localhost:27017" />
</Context>
(ii) WEB-INF / web.xml (bao gồm điều này trong thẻ "ứng dụng web"):
<resource-ref>
<res-ref-name>mongodb/mongoClient</res-ref-name>
<res-type>com.mongodb.MongoClient</res-type>
<res-auth>Container</res-auth>
</resource-ref>
(iii) Lớp Servlet:
public class TestServlet extends HttpServlet {
@Resource(name="java:comp/env/mongodb/mongoClient")
private MongoClient client;
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// ---- This works too; can be used instead of the @Resource ----
//try {
// Context ctx = new InitialContext();
// client = (MongoClient) ctx.lookup("java:comp/env/mongodb/mongoClient");
//}
//catch (NamingException ex) {
// throw new ServletException(ex);
//}
MongoCollection<Document> coll = client.getDatabase("test")
.getCollection("books");
List<Document> docData = new ArrayList<>();
coll.find()
.projection(new Document("title", 1)
.append("author", 1)
.append("_id", 0))
.limit(10)
.into(docData);
List<String> data = docData.stream()
.map(doc -> doc.get("title") + ", " + doc.get("author"))
.collect(Collectors.toList());
req.setAttribute("bookdata", data);
RequestDispatcher view = req.getRequestDispatcher("view.jsp");
view.forward(req, resp);
}
}
(iv) view.jsp:
<html>
<head>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<title>Test App</title>
</head>
<body>
<h3>Books List</h3>
<c:forEach items="${bookdata}" var="book">
${book}<br>
</c:forEach>
...