2014-02-09 22 views
0

我想調用基於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屬性提交按鈕的同義詞)?

+1

找到了[answer](http://stackoverflow.com/a/11830483/1391249)有用/有幫助。比這更不可能存在。 – Tiny

回答

1

您可以在form元素的action屬性中設置URL。任何類型的按鈕submit將發佈到此URL。例如:

<form action="${editURL}" method="post"> 
    <button type="submit">Go</button> 
</form> 
+0

但是表單上有多個提交按鈕,並且所有這些操作都不相同。那麼我們如何解決表單上的所有按鈕呢? (我們如何使用表單的'action'屬性來使用不同的URL來做出不同的請求?) – Tiny

+0

你不能擁有多個表單嗎?否則,您可能必須使用javascript動態設置URL。 –

+0

如果您還有其他更好的選擇,請不要忘記更新答案。 – Tiny

1

您可以使用提交按鈕的JavaScript功能,並設置表單中的一些隱藏的PARAMS,並根據您的表單提交更改值並獲得隱藏PARAM在您的控制器。根據他們隱藏的參數值,您可以使用多個操作。

希望它會幫助你。

+0

如果您還有其他更好的選擇,請不要忘記更新答案。 – Tiny

+0

@Tiny:sure :-) –