根据URL调用Servlet的不同方法

时间:2014-02-09 20:58:15

标签: jsp url servlets

我想使用Servlet / JSP调用基于URL映射的方法。

Servlet映射到/xxx/*之类的模式。我创建了一个只有一个方法的接口,如下所示。

public interface Action
{
   public void execute(HttpServletRequest request, HttpServletResponse response) throws IllegalAccessException, InvocationTargetException, SQLException, ServletException, IOException;
}

使用此接口的不同实现进行初始化的java.util.Map,以基于我们在其init()方法中讨论的Servlet中的URL执行不同的操作,如下所示。

@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());
    }
}

execute()方法可以从doGet()doPost()方法精确调用,如下所示。

map.get(request.getPathInfo().substring(1)).execute(request, response);

例如,像http://localhost:8080/Assignment/Country/Create这样的网址会调用execute()类中的CreateAction方法。

同样,像http://localhost:8080/Assignment/Country/Delete这样的网址会调用execute()类中的DeleteAction方法,依此类推。


使用链接时,我们可以轻松地形成我们选择的网址,例如

<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之类的网址,该网址会调用execute()类中的EditAction方法。

使用提交按钮时如何做同样的事情?当按下给定的提交按钮导致execute()类中的CreateAction方法时,我们是否可以拥有适当的网址?

按下此提交按钮时,网址应为

http://localhost:8080/Assignment/Country/Create

呈现初始页面视图的默认URL如,

http://localhost:8080/Assignment/Country

我们可以构建这样的URL,同时使POST请求与基于请求/操作的MVC框架提供的类似(Struts框架为提交按钮提供action属性)吗?

2 个答案:

答案 0 :(得分:1)

您可以在form元素的action属性中设置URL。任何submit类型的按钮都会发布到此网址。例如:

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

答案 1 :(得分:1)

您可以在提交按钮上使用JavaScript函数并在表单中设置一些隐藏的参数,并根据您的表单提交更改值,并在Controller中获取隐藏的参数。根据隐藏的参数值,您可以使用多个操作。

希望它会帮助你。