英文:
How to create the Mongo database connection in context.xml in Java web project?
问题
虽然有很多适当的教程来展示如何在Java中连接关系型数据库,但我对MongoDB与Java一起工作的机制感到怀疑。通常人们会在context.xml中创建一个连接,以与JSP/servlet一起与关系型数据库交互,以进行Web项目。然而,对于NoSQL数据库,我并没有找到任何关于如何以一种良好构建的方式进行连接的资源,而不是最近许多使用框架并且能够无缝工作的资源。
如果有任何专家能够向我展示,我会非常感激。
英文:
Although there are many proper tutorials to show how to connect relational database in Java, I really in doubt with the MongoDB mechanism working with Java. Normally people would create a connection in context.xml to interact with a relational database with JSP/servlet to do web project. However, with NoSQL database, I don't quite get any resources on how to perform this connection in a nice constructed way rather than many resources with framework lately and working seamlessly.
If any experts could show me how really highly appreciate it.
答案1
得分: 2
(i) JNDI configuration to access MongoDB database (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 (include this within the "web-app" tags):
<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) Servlet class:
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>
...
英文:
Sample servlet/JSP code with configuration to connect to MongoDB database and view a query results in the JSP page.
(i) JNDI configuration to access MongoDB database (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 (include this within the "web-app" tags):
<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) Servlet class:
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>
...
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论