我创建了一个Servlet调用ShippingDetailsServlet.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");
}
}发布于 2013-09-30 03:02:58
从forums.adobe.com那里得到了我问题的答案
答案如下。
如果您对servlet进行了如下注释:
@SlingServlet(methods = { "POST" }, paths = "/apps/mycompany/servlets/GenericServlet")表单应该与路径中的url相同,即"/apps/mycompany/servlets/GenericServlet"。
因此,如果要将servlet中的“路径”行更改为"/services/mycompany/ShippingDetailsServlet",表单将发布到该行。
发布于 2013-09-27 08:35:33
默认情况下,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配置页面中添加适当的路径。
发布于 2013-09-27 13:29:13
这不一定是真的。您可以在自定义路径上部署Servlet,但要做到这一点,您需要修改"Apache Servlet/Script Resolver和Error Handler“,并将自定义路径添加到”执行路径“部分。
此外,如果要将此表单部署到您的发布实例中,您可能希望使用/bin/以外的自定义路径,因为CQ有许多通过/bin注册的管理servlet,并且向公众公开它们可能会带来安全问题。
https://stackoverflow.com/questions/19044506
复制相似问题