我创建了一个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");
}
}
答案 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)
答案如下。
如果您已经注释了这样的servlet:
@SlingServlet(methods = { "POST" }, paths = "/apps/mycompany/servlets/GenericServlet")
表单shoud post到与路径相同的url,即"/apps/mycompany/servlets/GenericServlet"
所以,如果你要将servlet中的“paths”行更改为"/services/mycompany/ShippingDetailsServlet"
表格将张贴到那个表格。