将表单提交给Servlet CQ5

时间:2013-09-27 06:55:29

标签: servlets cq5 sling aem

我创建了一个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");
    }
}

3 个答案:

答案 0 :(得分:0)

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

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

表单中的路径应与@SlingServlet中的路径相同:

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

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

答案 1 :(得分:0)

这不一定是真的。您可以在自定义路径上部署servlet,但为了这样做,您需要修改&#34; Apache Sling Servlet /脚本解析器和错误处理程序&#34;并将自定义路径添加到&#34;执行路径&#34;部分。

此外,如果要将此表单部署到您的发布实例,您可能希望使用除/ bin /之外的自定义路径,因为CQ在/ bin下注册了很多管理servlet并将它们暴露给公众可能提出安全问题。

答案 2 :(得分:0)

forums.adobe.com

得到了我的问题的答案

答案如下。

如果您已经注释了这样的servlet:

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

表单shoud post到与路径相同的url,即"/apps/mycompany/servlets/GenericServlet"

所以,如果你要将servlet中的“paths”行更改为"/services/mycompany/ShippingDetailsServlet" 表格将张贴到那个表格。