【问题标题】:Communication between JSP, Servlet, DAO while working on database处理数据库时 JSP、Servlet、DAO 之间的通信
【发布时间】:2012-05-10 10:56:25
【问题描述】:

在学习 JSP、Servlet 和 DAO 的过程中,我学习了 this 教程,希望了解一些关于使用 JSP/Servlet 编辑 SQL Server 表的正确方法。

无论如何,我有:

  • POJO.java
  • DAO.java
  • SERVLET.java
  • PAGE.jsp

如何实现另一个显示数据行的 JSP 页面?是否可以制作一个 JSP 页面,调用 DAO/Servlet 进行数据提取,然后将数据显示在自身(JSP)上?

打开网站时,我正在调用 Servlet,过程如下:Servlet -> DAO -> JSP。我是否需要另一个 Servlet+JSP 文件,或者我可以只添加将使用当前 Servlet 来填充页面的 JSP 文件吗?

我的问题可能应该交给教程的作者,但我希望在这里从不同的角度提出一些建议。

【问题讨论】:

  • 能否请您详细说明一下我正在调用 Servlet:Servlet -> DAO -> JSP。我应该如何为用户添加第二个站点以简单地浏览数据?另一个 Servlet 和另一个 JSP 文件,或者我可以只添加将使用当前 Servlet 的 JSP 文件吗?
  • @JigarJoshi 我的意思是这个例子正在调用一个返回 JSP 页面的 Servlet——这就像 CMS。如何为没有编辑权限的所有人添加首页?应该是另一个 Servlet 还是 JSP 调用与 CMS 相同的 Servlet。
  • 没有相同的 servlet 可以完成这项工作,您解析当前用户的角色并将其存储在会话中,从会话中检查是否用户具有该角色然后启用视图,还在 servlet/service 中添加此安全性
  • @JigarJoshi 所以,我让我的 Servlet 根据是否有活动的管理会话来决定打开哪个 JSP?如果会话存在,我会继续返回我的 CMS.jsp,如果没有会话,则转到 default.jsp
  • 好吧,如果没有太大区别,那么您可以在同一个 jsp 中执行此操作,只需使用条件检查显示/隐藏功能,并在 servlet 结束时使其安全

标签: java jsp servlets jdbc dao


【解决方案1】:

如果我正确地理解了您想要什么,那么您几乎已经拥有了做您想做的事情所需的一切。 DAO 有一个名为 list() 的方法,它将查询数据库并返回一个员工对象的数组列表,这样你就很好了。但是,需要更改 servlet 和 jsp 页面才能使其工作,但将相关代码添加到 servlet 以使用 DAO 来获取员工列表。 在 try 块开始前添加

ArrayList<employee> employeeList = null;

将此代码添加到 servlet 的 process() 方法中的现有代码中。

else if (StringUtils.equals(actionContext, "list")) {
    employeeList = dao.list();
    request.setAttribute("employeeList", employeeList);
  }

必须更改 jsp 上的 javascript 以促进这一点,因为 javascript 正在驱动传递给 servlet 的内容,您必须向 jsp 添加一个按钮,该按钮将调用与此类似的 javascript 函数。

<input type='button' value='List Employees' onclick="submitForm('list')" />

这应该会为您指明正确的方向,并允许您在稍作修改后仍可使用教程中的代码。希望对您有所帮助。

【讨论】:

  • 好吧,我需要一个完全不同的 JSP 用于默认用户站点。我可以用request.getRequestDispatcher("/jsp/default.jsp").forward( request, response); 做到这一点,对吧?可以在 default.jsp 的某处添加一个登录表单,将用户切换到可编辑的“管理模式”?
  • web.xml 中的 welome-file-list 将 index.jsp 列为欢迎文件,因此如果您输入“localhost:8080/Example14”而不是“localhost:8080/Example14/Servlet3”,您可以在那里添加您的登录表单。当您在地址栏中输入“localhost:8080/Example14/Servlet3”时,您将绕过 index.jsp 并直接调用 servlet,然后 servlet 会将您重定向到 employee_maintenance.jsp。
  • 非常感谢 :) 但是,如果我希望这个 index.jsp 同时显示登录表单和不可编辑的数据库记录,该怎么办。如何从 index.jsp 调用 servlet(进行整个查询处理)?
  • 如果您的原始问题已被回答,请将其标记为已回答并发布另一个问题。
【解决方案2】:

如果我理解你的问题,我可以要求你做下一个:
1. 将您的数据附加到请求(使用 request.setAttribute(Name,Object));
2.使用jsp:import连接下一个JSP页面;
3. 在这些servlet中,通过request.getAttribute(Name)提取你的数据,转换成你需要使用的类型。

但是,我不确定这是否足够正确 - 正如我所知,您实际上不会复制您的 var,因此这不会花费太多额外的时间或内存,但我不能确定够了,如果这是解决这个问题的最“充分”的方法......

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多