【问题标题】:Calling same servlet from different jsp for different intention从不同的jsp调用相同的servlet以获得不同的意图
【发布时间】:2014-04-10 16:44:37
【问题描述】:

我正在创建一个 MVC 应用程序,我希望我的 servlet 成为真正的控制器。它应该从视图中获取请求,并根据请求调用我的 DAO 层进行数据库交互。我正在使用休眠并在 jsp 上填充 pojo/bean。

例如。我的一个 jsp 用于注册用户,第二个是由用户创建广告。两个 jsps 都调用相同的 servlet(Controller.java),并且 servlet 对我的 DAOImpl.java 有方法调用,其中有 registerUser(User user) 和 CreateAd(Offer offer)。这些方法只是调用持久化并将数据插入数据库。

这适用于两个 servlet,但我正在尝试在没有两个 servlet 的情况下是否可以采用不同的方式。

【问题讨论】:

    标签: java hibernate jsp servlets model-view-controller


    【解决方案1】:

    您可以通过调用 servlet 并发送定义要执行的操作的参数来完成此操作。它会是这样的:

    <form id="myForm" action="TheServlet" method="POST">
        <input type="hidden" name="action" id="action" />
        <input type="submit" value="Register User" onclick="setAction('registerUser');" />
        <input type="submit" value="Create Ad" onclick="setAction('createAd');" />
    </form>
    <script type="text/javascript">
        function setAction(var action) {
            document.getElementById('action').value = action;
        }
    </script>
    

    然后,在您的 servlet 中:

    @WebServlet("TheServlet")
    public class TheServlet extends HttpServlet {
        @Override
        public void doPost (HttpServletRequest request, HttpServletResponse response)
            throws IOException {
            String action = request.getParameter("action");
            if (action.equals(...)) {
            } else if (action.equals(...)) {
            } else ...
            //if using Java 7 or later, you could use a switch instead of ifs
        }
    }
    

    您可以查看Front Controller Pattern。请注意,这已经由许多 MVC 框架处理,例如 Spring MVC。

    【讨论】:

    • 谢谢@Luiggi。这有助于我在工作中不使用 Spring,但它是一项简单的任务。但是,没有隐藏参数可以做同样的事情吗?我尝试了表单名称并基于它在 servlet 中调用不同的方法。
    • @SandiipPatil 此选项不使用 Spring 或其他框架,它是普通的 Servlet + JSP。另一种选择可能是在您的唯一 Servlet 中解析 URL 并根据此结果定义操作。
    • 谢谢@Luiggi。如果您可以建议除隐藏参数以外的任何其他方式。
    • @SandiipPatil 已经在 cmets 中告诉过您:在您的唯一 Servlet 中解析 URL 并根据此结果定义操作...
    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2016-11-12
    相关资源
    最近更新 更多