我想調用基於URL映射的方法使用Servlet/JSP。根據URL調用通過Servlets的不同方法
一個Servlet映射到一個模式,如/xxx/*
。我只用一種方法創建了一個接口,如下所示。
public interface Action
{
public void execute(HttpServletRequest request, HttpServletResponse response) throws IllegalAccessException, InvocationTargetException, SQLException, ServletException, IOException;
}
與此接口的不同實現執行基於對我們在其init()
方法談論如下Servlet的一個URL的不同動作所初始化的java.util.Map
。
@WebServlet(name = "Country", urlPatterns = {"/Country/*"})
public final class Country extends HttpServlet
{
private Map<String, Action>map;
@Override
public void init(ServletConfig config) throws ServletException
{
super.init(config);
map=new HashMap<String, Action>();
map.put("Create", new CreateAction());
map.put("Read", new ReadAction());
map.put("Delete", new DeleteAction());
map.put("Edit", new EditAction());
}
}
的方法是從任一doGet()
或doPost()
方法就像如下精確地調用。
map.get(request.getPathInfo().substring(1)).execute(request, response);
例如,像,http://localhost:8080/Assignment/Country/Create
一個URL將調用在CreateAction
類的方法。
類似地,類似於http://localhost:8080/Assignment/Country/Delete
的URL將調用DeleteAction
類中的方法等。
在使用環節,我們可以很容易地成爲我們的選擇喜歡的URL,
<c:url var="editURL" value="/Country/Edit">
<c:param name="countryId" value="${row.countryId}"/>
<c:param name="currentPage" value="${currentPage}"/>
<c:param name="countryName" value="${row.countryName}"/>
<c:param name="countryCode" value="${row.countryCode}"/>
</c:url>
<a href="${editURL}" class="action2"/>
這會產生像http://localhost:8080/Assignment/Country/Edit
一個URL,它將調用在EditAction
類中方法。
如何在使用提交按鈕時執行相同操作?如果按下給定的提交按鈕,導致CreateAction
類中的方法,我們是否可以有適當的URL?
當按下這個提交按鈕時,URL應該是
http://localhost:8080/Assignment/Country/Create
的默認URL來渲染初始頁面視圖是什麼樣子,
http://localhost:8080/Assignment/Country
我們可以構造而此類URL使得POST
請求類似於基於請求/動作的MVC框架提供的東西(Struts框架提供了一個action
屬性提交按鈕的同義詞)?
找到了[answer](http://stackoverflow.com/a/11830483/1391249)有用/有幫助。比這更不可能存在。 – Tiny