【问题标题】:How to store objects from session to List in Servlet如何将会话中的对象存储到 Servlet 中的列表
【发布时间】:2013-11-13 17:08:10
【问题描述】:

大家好。

我今天花了一整天的时间想一个非常难的问题。 首先你可以在这个 url :https://github.com/Vadim32/RemoteWebContent得到完整的代码

好的,现在问题来了: 我需要制作用户订单的购物车。用户可以订购以下活动:开发软件或计算机维护。 所以为此我有 servlet:

public class EventNewUserServlet extends HttpServlet {


    //-------------------------Variables------------------------

        private static final long serialVersionUID = 1L;

        protected WebContentDAOIF webContentDAOIF;


    //-------------------------Servlet methods------------------  

     public void init() {
         /*Getting bean from spring ContextLoaderListener and inject it to webContentDAOIF variable 
           to use webContentDAOIF in this servlet*/
        ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
            webContentDAOIF = context.getBean("webContentDAOImpl", WebContentDAOIF.class);
        }



    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


            List<UserEvents> userEventsList = new ArrayList<UserEvents>(2); //This list store all user orders 



        }
}

所以我在 doPost 方法中有List&lt;UserEvents&gt; userEventsList,它将存储用户订购的事件,例如:ComputerMaintenanceEvent 或 SoftwareDevelopmentEvent,它们都是从 UserEvents 类扩展的

在这个jsp页面上:

<html>

        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Order event page</title>

            <!-- Bootstrap css responsive-->
            <link href="resources/css/bootstrap.css" rel="stylesheet">
            <link href="resources/css/bootstrap-responsive.css" rel="stylesheet">

        </head>

        <body>

            <!-- JQuery and Bootstrap file-->
            <script src="resources/js/jquery-1.10.2.min.js"></script>
            <script src="resources/js/bootstrap.min.js"></script>
            <script src="resources/js/jquery.scrollTo.js"></script> 
            <script src="resources/js/jquery.nav.js"></script>

            <h1>New user</h1>
            <form action="new-user-event" method="post">

                    <input type="hidden" name="userSessionId" value="${userSessionId}">

                <table align="center">

                    <tr><td>Event type:</td><td>
                        <select name="event_type">
                            <option>Choose event type</option>
                            <option>Computer Maintenance Event</option>
                            <option>Software Development Event</option>
                        </select>
                    </td></tr>
                    <tr><td>Event date:</td> <td><input type="text" class="span2" name="user_event_date"></td></tr>
                    <tr><td>Event description:</td> <td><textarea rows="5" name="description"></textarea></td></tr>
                    <tr><td>Additional Info:</td> <td><input type="text" class="span2" name="additional_info"></td></tr>

                    <tr><td>First name:</td> <td><input type="text" class="span2" name="first_name"></td></tr>
                    <tr><td>Last name:</td> <td><input type="text" class="span2" name="last_name"></td></tr> 
                    <tr><td>E-male:</td> <td><input type="text" class="span2" name="e_male"> </td></tr>
                    <tr><td>Address:</td> <td> <input type="text" class="span2" name="address"></td></tr>
                    <tr><td>Phone number:</td> <td> <input type="text" class="span2" name="phone_number"></td></tr>

                    <tr><td><input type="submit" value="Regester user"></td></tr>

                </table>

            </form>

        </body>

    </html>

用户将订购实际事件(将下订单)。

所以要求是:

  • 我不想创建另一个 servlet 将对象存储在列表中,而另一个 servlet 将事件列表存储在数据库中。

  • 我想首先在会话中收集事件对象,或者只是将它们添加到没有 servlet 的列表中(可能以某种方式使用 jsp 或 javascripts),例如当用户在网页上有添加按钮并且他可以添加尽可能多的他想要的事件在列表中,然后通过同一jsp页面上的表单提交按钮将触发实际的servlet将所有收集的事件从列表保存到数据库?

有没有可能?

感谢开发人员,希望您能帮助我阅读一些很棒的教程或文档。

【问题讨论】:

  • 阅读 MVC 或 model2 架构,并坚持下去。永远不要将 Java 代码放在 JSP 中。永远不要将 HTML 代码放在 servlet 中。不要将会话用于生命周期不是整个会话的对象。也就是说,我不明白你在问什么。
  • 先生,谢谢您的回复。请理解:我想直接从我的 jsp 页面创建和存储对象并将它们存储在 List 中,而不需要调用 servlet 或控制器。当我单击 addToCart 链接时,我不希望我的页面重新加载或执行任何转发或重定向,但无论如何都必须将对象添加到购物车中。有可能吗??
  • 是的,通过向 servlet 发送 AJAX 请求,该 servlet 会将商品添加到购物车。如果服务器上没有组件来接收您发送的内容,您就无法向服务器发送内容。而这样的组件称为 servlet。
  • 好的。知道了。那么,页面无论如何都会被重新加载(刷新)来刷新视图,对吧?
  • 没有。 AJAX 请求将被发送到服务器,页面在浏览器中保持原样。但是您需要一个 servlet 来处理这个请求:获取发布的数据,并将项目添加到列表中。阅读有关 AJAX 的基本介绍。

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


【解决方案1】:

在我看来,如果单击添加按钮,您希望临时存储事件。最后只有点击提交按钮才会将之前临时存储的事件更新到数据库中,对吧?

答案很简单,就像您在亚马逊购物,您首先将一些产品添加到购物车中,您选择的产品将存储到 cookie 中,该 cookie 保留在客户的计算机中。最后,您检查您选择的所有产品,这里一个 servlet 将从 cookie 中读取存储的产品,然后将它们保存到数据库中。所以我认为你可以按照这种方式进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-31
    • 2023-03-09
    • 2010-11-18
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    相关资源
    最近更新 更多