1

我创建了一个 Servlet 调用 ShippingDetailsS​​ervlet.java 并部署了它。我需要向它提交一个 HTML 表单。我不确定应该在表单操作中放置什么路径。下面是表格。

<form action="/services/mycompany/ShippingDetailsServlet" method="post">
Country: <input type="text" name="country" value="au"><br>
Quantity: <input type="text" name="quantity" value="1">
<cq:include path="./submit" resourceType="foundation/components/form/submit" />

请让我知道我应该为表单操作提供什么路径,以便可以将其提交给 Servlet。

下面是Servlet。

package mycompany.servlets;

import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;

import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintWriter;

@SlingServlet(
        paths={"/services/mycompany/"}
)
@Properties({
        @Property(name="service.pid", value="mycompany.ShippingDetailsServlet",propertyPrivate=false),
        @Property(name="service.description",value="Shipping details servlet", propertyPrivate=false),
        @Property(name="service.vendor",value="mycompany", propertyPrivate=false)
})
public class ShippingDetailsServlet extends SlingAllMethodsServlet
{
    @Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException
    {
        //Do something fun here
    }

    @Override
    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException
    {
        //Do something fun here
        PrintWriter out = response.getWriter();
        out.println("Hello");
    }
}
4

3 回答 3

0

默认情况下,servlet 只能部署在/bin路径下方。不要/在路径中添加尾随,也不要添加任何其他属性。例如。使用以下注释:

@SlingServlet(paths={"/bin/services/mycompany"})
public class ShippingDetailsServlet extends SlingAllMethodsServlet

表格中的路径应与以下相同@SlingServlet

<form action="/bin/services/mycompany" method="post">

如果你真的想在 servlet 之外创建 servlet /bin,你需要在控制台的配置页面中为Execution Paths属性添加适当的路径。Apache Sling Servlet/Script Resolver and Error Handler/system/console/configMgr

于 2013-09-27T08:35:33.120 回答
0

这不一定是真的。您可以在自定义路径上部署 servlet,但为了这样做,您需要修改“Apache Sling Servlet/Script Resolver and Error Handler”并将自定义路径添加到“执行路径”部分。

此外,如果要将此表单部署到您的发布实例,您可能希望使用 /bin/ 以外的自定义路径,因为 CQ 在 /bin 下注册了许多管理 servlet,并且将它们公开可能会带来安全性关心。

于 2013-09-27T13:29:13.613 回答
0

从forums.adobe.com获得了我的问题的答案

答案如下。

如果您已像这样注释您的 servlet:

@SlingServlet(methods = { "POST" }, paths = "/apps/mycompany/servlets/GenericServlet")

表单应该发布到与路径相同的 url,即"/apps/mycompany/servlets/GenericServlet"

因此,如果您将 servlet 中"/services/mycompany/ShippingDetailsServlet" 的“路径”行更改为表单将发布到该表单。

于 2013-09-30T03:02:58.623 回答