我需要创建一个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中的每个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);
}
}
我不知道这是否是这样做的方法,如果我错了,请纠正我。
答案 0 :(得分:2)
您可以使用您的网址传递参数,例如:
myapp/item?action=get
但是,使用单独的URL更容易,更不容易出错。这可能就是为什么你首先被教导的原因。
您需要小心使用HTTP GET以及使用POST执行的操作。像你在示例中所做的那样使用GET(添加项目)很糟糕,你不想做任何用GET修改数据的事情。特别是不要删除GET,或者出现的第一个webcrawler可以清除你的数据库。 :-O还要查看名为Post-Redirect-Get的内容,这是避免重复提交表单并使您的页面可收藏的常见模式。
我建议查看快速开发框架,例如Play。这里的原始jsp / servlet东西太麻烦了,无法磨出来。你已经经历过艰难的一次,所以你不会错过任何事情。