我有一个关于使用 Servlet 和 JDBC 的一般性问题。
比如我有一个名为MyDatabaseManager的类,它提供了函数
public boolean updateUser(User user) {...} public boolean deleteUser(User user) {...} public boolean inserUser(User user){...}
,这些函数将访问和操作数据库。
我的问题是关于 Servlet 实现的。我现在正在使用三个 Servlet(UpdateUserServlet、InsertUserServlet 和 DeleteUserServlet),每个 Servlet 调用 MyDatabaseManager 实例(这里只有一个实例,使用 Singleton 模式)函数。 (例如,UpdateUserServlet 调用 MyDatabaseManager.updateUser ...)。
我认为这是使用 Servlet 和数据库的最直接的方式。但我不确定这是否是正确的做法。例如,这在工业界是如何实现的。
最佳答案
现在人们并没有真正直接使用 servlet,他们使用的框架可以简化您的工作,但是如果您真的想使用 servlet,您可以使用其他方法将所有操作集中在一个单一的方法中,doPut, doDelete 甚至创建您自己的方法。以下是您将如何操作的示例:
public abstract class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("_method");
if ("form".equals(method)) {
this.doForm(request, response);
} else {
if ("delete".equals(method)) {
this.doDelete(request, response);
} else {
super.service(request, response);
}
}
}
protected void doForm(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
throw new UnsupportedOperationException();
}
}
如您所见,此 Servlet 在表单上使用特殊字段 _method 来决定调用什么特殊方法,如果 _method 不可用,它将使用通常的服务方法,将调用 doGet 或 doPost。
下面是这个 servlet 的实现方式:
public class UsersServlet extends BaseServlet {
private UsersRepository cadastro = new UsersRepository();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setAttribute("usuarios", cadastro.list());
req.getRequestDispatcher("/usuarios/listar.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
User usuario = this.getUser(req);
usuario.setNome(req.getParameter("nome"));
usuario.setEmail(req.getParameter("email"));
usuario.setSenha(req.getParameter("senha"));
this.cadastro.persist(usuario);
resp.sendRedirect(req.getContextPath() + "/usuarios");
}
protected User getUser(HttpServletRequest req) {
User usuario;
if (req.getParameter("id") == null) {
usuario = new Usuario();
} else {
Long id = new Long(req.getParameter("id"));
usuario = this.cadastro.search(id);
}
return usuario;
}
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
User usuario = this.getUser(req);
this.cadastro.remover(usuario);
resp.sendRedirect(req.getContextPath() + "/usuarios");
}
@Override
protected void doForm(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
User usuario = this.getUser(request);
request.setAttribute("usuario", usuario);
request.getRequestDispatcher("/usuarios/form.jsp").forward(request,
response);
}
}
这样您就可以在一个 servlet 中完成所有操作。
关于java - 带有数据库设计的 Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7040292/