【问题标题】:writing a single servlet to add/edit/delete an Item and also to list items编写单个 servlet 来添加/编辑/删除项目并列出项目
【发布时间】:2011-10-20 06:07:14
【问题描述】:

我需要创建一个 Servlet 来处理一些 Items 的列表、添加新项目、编辑现有项目以及删除项目。

我编写了用于编辑项目和显示项目列表的 JSP 页面。在itemslisting.jsp 中,我为每个项目放置了删除和编辑链接,但我不太确定如何在 Servlet 中构造方法。

itemslisting.jsp

...
<table>
<c:forEach var="item" items="${items}" varStatus="listCount">

<tr><td>${listCount.count} </td>
<c:url value="edititem" var="edititemurl">

    <c:param name="itemId" value="${item.item_id}" />

</c:url>
<td><a href="${edititemurl }" >${item.name}</a></td>
<c:url value="deleteitem" var="deleteitemurl">

    <c:param name="itemId" value="${item.item_id}" />

</c:url>

<td><a href="${deleteitemurl}" >DELETE</a></td>

</tr>

</c:forEach>

</table>
...
<a href="<c:url value="addItem"/>">add new item </a>
...

在我们的培训中,我们被要求创建单独的 servlet 来添加、编辑、列出和删除项目。在这些情况下,可以将这些 url 中的每一个映射到适当的 servlet,但是创建那么多 servlet 感觉很愚蠢。如何将上述 jsp 中的不同 url 配置为单个 ItemServlet?我是否必须传递一些额外的参数来指示操作,比如edititem 以及edititemurl?

我尝试创建doGet() 方法的骨架:

public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
    String additemop = req.getParameter("additemoperation");
    String edititem = req.getParameter("additemoperation");
    String itemId =  req.getParameter("itemId");
    ...
    if(additemop!=null){
      showAddItemPage(req,resp);
    }
    else if((edititemop!=null) && (itemId != null)){
      showEditItemPage(req,resp);
    }
    else{
      showListItemsPage(req,resp);
    }

}

我不知道这是否是这样做的方式,如果我错了,请纠正我。

【问题讨论】:

  • 这可能不是您正在寻找的答案,但再也没有人这样做了。典型的是使用诸如springframework之类的框架。然后是对 MVC 映射控制器到视图的非常好的内置支持。
  • 我已经修复了它,但仅供参考:逗号前没有空格,逗号后有一个空格。如果列表中只有两个项目,只需使用 and 而不是逗号。

标签: java jsp servlets


【解决方案1】:

您可以使用您的网址传递参数,例如:

myapp/item?action=get

不过,为这些使用单独的 url 更容易,也更不容易出错。这很可能是你一开始就被这样教导的原因。

您需要小心使用 HTTP GET 和使用 POST。像您在示例中那样使用 GET(添加项目)是不好的,您不想做任何使用 GET 修改数据的事情。尤其不要将删除作为 GET,否则出现的第一个网络爬虫可能会清除您的数据库。 :-O 另请查看名为 Post-Redirect-Get 的内容,这是避免重复提交表单并使您的页面可收藏的常见模式。

我建议查看一个快速开发框架,例如Play。这里原始的 jsp/servlet 东西实在是太乏味了。你已经经历过一次艰难的道路,所以你不会错过任何东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    相关资源
    最近更新 更多