use*_*340 5 java servlets jdbc
我有一个关于使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这个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);
}
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以在一个servlet中完成所有操作.
| 归档时间: |
|
| 查看次数: |
1889 次 |
| 最近记录: |