如何在 Servlet 中使用 DAO 设计模式方法将用户输入存储到 MongoDB?
Posted
技术标签:
【中文标题】如何在 Servlet 中使用 DAO 设计模式方法将用户输入存储到 MongoDB?【英文标题】:How to use DAO design pattern appoarch in Servlets to store user input to MongoDB? 【发布时间】:2021-01-10 17:48:30 【问题描述】:我尝试在 Servlet 上使用 DAO
设计模式将用户输入存储到 MongoDB。虽然在这个post 和这个post 上找到了一些有用的提示。毫无疑问,我得到了 NullpointException。我想知道是因为我没有创建集合和文档来在DaoImpl
上的方法中“插入”用户输入,或者我不明白如何在 Servlet 和 DaoImpl 类之间工作
这里是 UserDAO
public interface UserDao
List<User> getAllUsers();
void save(User user);
void updateUer(User user);
void deleteUser(User user);
DaoImpl,我认为是导致NullPointException 并想修复它并怀疑这里是否连接到数据库。
公共类 UserDaoImpl 实现 UserDao
@Override
public void save(User user)
if (user == null)
System.out.println("not working!!!!!!!");
else
user.setName(user.getName());
user.setEmail(user.getEmail());
user.setPassword(user.getPassword());
// connection the db in here or in the Servlets controller?
Servlet 控制器
public class RegisterServlet extends HttpServlet
private UserDao userDao;
private User user;
public RegisterServlet(User user)
this.user = user;
public RegisterServlet(UserDao userDao)
this.userDao = userDao;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
// Collect to database
MongoDatabase mdb = dBUtils.getMongoDB();
assert mdb != null;
MongoCollection<Document> collection = mdb.getCollection("Users");
userDao.save(user);
错误消息
Type Exception Report
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
java.lang.NullPointerException
uts.asd.controller.RegisterServlet.doPost(RegisterServlet.java:54)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.
【问题讨论】:
userDao
对象是在哪里创建的?另外,从异常中,你能告诉你在哪一行得到 NPE。
我在 Servlet 上声明了它。我应该把它放在 Save 方法中来完成所有任务吗?恐怕我得到的只是错误信息。
你忘了告诉你到底哪个变量是null
,以及你为什么期望它不是null
。根据您目前的问题,它基本上是***.com/q/218384 的副本,您不希望这样。换句话说,解决你的问题,问为什么变量 X null 是(同时清楚地指出它在你的代码 sn-p 中到底是哪个变量以及它是如何创建的)而不是问为什么你会得到 NullPointerException。跨度>
我将在今天晚些时候尝试纠正我的问题,以找出导致此异常的原因,谢谢。
【参考方案1】:
我调查并遵循了这个post的建议,终于可以将数据存储到MongoDB了。
这就是我所做的,
UserDaoImpl 类中的 SaveUser 方法
@Override
public void save(User user)
// this what I want to see. user is saved to db here
try
MongoDatabase mdb = dBUtils.getMongoDB();
assert mdb != null;
if (user == null)
System.out.println("not working!!!!!!!");
else
users.add(new Document("Email", user.getEmail()).
append("Password", user.getPassword())
.append("Name", user.getName()));
MongoCollection<Document> userlist = mdb.getCollection("Users"); //Create or get a collection "users" on mLab
userlist.insertMany(users);
catch (Exception e)
e.printStackTrace();
Servlet 类
public class RegisterServlet extends HttpServlet
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
User user = new User();
UserDaoImpl userDao = new UserDaoImpl();
user.setName(request.getParameter("name"));
user.setEmail(request.getParameter("email"));
user.setPassword(request.getParameter("password"));
userDao.save(user);
request.getRequestDispatcher("/welcome.jsp").forward(request, response);
【讨论】:
以上是关于如何在 Servlet 中使用 DAO 设计模式方法将用户输入存储到 MongoDB?的主要内容,如果未能解决你的问题,请参考以下文章
JSP+Servlet+DAO+Javabean模式小记-20171029