我需要创建一个 Servlet 来处理一些 Item
的列表、添加新项目、编辑现有项目以及删除项目。
我编写了 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);
}
}
不知道这样是否可行,如有错误请指正。
最佳答案
您可以通过网址传递参数,例如:
myapp/item?action=get
不过,对这些使用单独的 url 更容易且不易出错。这很可能就是为什么你一开始就被这样教导的原因。
您需要小心使用 HTTP GET 和 POST 的操作。像在示例中那样使用 GET(添加项目)是不好的,您不想使用 GET 执行任何修改数据的操作。特别是不要使用 GET 进行删除,否则出现的第一个网络爬虫可能会清除您的数据库。 :-O 另请查看名为 Post-Redirect-Get 的内容,这是避免重复表单提交并使页面可添加书签的常见模式。
我建议查看快速开发框架,例如 Play 。这里的原始 jsp/servlet 内容太乏味了,无法进行研究。你已经经历过一次艰难的路了,所以你不会错过任何东西。
关于java - 编写单个 servlet 来添加/编辑/删除项目以及列出项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6946358/