2013-09-27 2 views
1

Создал вызов Servlet ShippingDetailsServlet.java и развернул его. Мне нужно представить HTML-форму. Я не уверен, какой путь я должен внести в действие формы. Ниже приведена форма.Отправить форму для сервлета CQ5

<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.

Ниже находится сервлет.

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

Обратите внимание, что монтажные сервлеты Sling на дорожках являются субоптимальными, так как вы не можете установить определенные правила контроля доступа на этих путях. Лучше всего, чтобы сервлет обрабатывал определенный тип sling: resource Type и HTTP (ы) и создавал ресурс (на котором вы можете установить контроль доступа) с тем же sling: resourceType. –

ответ

0

получил ответ на мой вопрос от forums.adobe.com

Ответ является, как показано ниже.

если вы аннотированный ваш сервлет, как это:

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

форма Шоуда сообщения в том же же URL, как и в пути, то есть "/apps/mycompany/servlets/GenericServlet"

так, если бы вы изменили вас «пути» линия в сервлете до "/services/mycompany/ShippingDetailsServlet" форма будет публиковать для этого.

0

По умолчанию сервлеты могут быть развернуты только ниже /bin пути. Не ставьте трейлинг / на пути и не добавляйте никаких дополнительных свойств. Например. используйте следующую аннотацию:

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

Путь в форме должны быть такими же, как и в @SlingServlet:

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

И если вы действительно хотите создать сервлет вне /bin, вам нужно добавить соответствующий путь к Execution Paths Недвижимость в Apache Sling Servlet/Script Resolver and Error Handler страница конфигурации в консоли /system/console/configMgr.

0

Это не обязательно так. Вы можете развернуть сервлеты на настраиваемых путях, но для этого вам необходимо изменить «Apache Sling Servlet/Script Resolver and Error Handler» и добавить настраиваемый путь к разделу «Пути выполнения».

Кроме того, если эта форма будет развернута в вашем экземпляре публикации, вы можете использовать собственный путь, отличный от/bin /, поскольку в CQ имеется множество сервлетов-админов, зарегистрированных в/bin, и их публикация может представлять проблему безопасности.

+0

Я думаю, вы должны позволить OP знать, где настроить «Apache Sling Servlet/Script Resolver and Error Handler» находится под 'http: // localhost: 4502/system/console/configMgr': D –

+0

Хороший вызов :). К сожалению, я оставил консольную ссылку. –

Смежные вопросы