2016-12-08 8 views
2

Я пытаюсь включить сторонний сервлет для запуска в нашем контексте сервера приложений IS7. Как я могу добавить сервлет и отображение в web.xml?Добавление сервлета для запуска в контексте сервера приложений Intershop 7.4

В базе знаний я нашел информацию о Enfinity Suite 6. Ни один из приведенных шагов не работает.

EDIT:

Я нашел предложенное решение для IS7 с помощью Guice и связывания сервлета с помощью определенного модуля Servlet как

package com.intershop.test; 

import com.google.inject.servlet.ServletModule; 

public class MyServletModule extends ServletModule 
{ 
    @Override 
    protected void configureServlets() 
    { 
     bind(MyServlet.class).in(Singleton.class); 
     serve("/my/*").with(MyServlet.class); 
    } 
} 

Я добавил мой ServletModule в файл objectgraph.properties но мой сервлет по-прежнему не вызывается, когда я пытаюсь его получить.

Любые предложения?

ответ

2

Я знаю, что это работает в ICM 7.7, но я считаю, что это было с 7,4.

Вы можете использовать Guice Servlet Extension.

1.Declare зависимость от серфера Guice в картридже build.gradle. Пример:

dependencies 
{ 
    ... 
    compile group: 'com.intershop.platform', name: 'servletengine' 
    compile 'com.google.inject.extensions:guice-servlet' 
    ... 
} 

2.Define модуль сервлет в картридже objectgraph.properties. Пример:

global.modules = com.example.modules.DemoServletModule 

3.Implement ваш сервлет. Пример:

public class DemoServlet extends HttpServlet 
{ 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
    { 
     resp.getWriter().append("Hello, world!"); 
    } 
} 

4.Create реализация модуля. Gotcha: Имя должен начинаться с /servlet/, как указано в комментариях. Пример:

import javax.inject.Singleton; 
import com.google.inject.servlet.ServletModule; 

public class DemoServletModule extends ServletModule 
{ 
    @Override 
    protected void configureServlets() 
    { 
     bind(DemoServlet.class).in(Singleton.class); 

     serve("/servlet/DEMO/*").with(DemoServlet.class); 
    } 
} 

4.Build, рестарт, попробуйте. Пример:

GET /servlet/DEMO/hey HTTP/1.1 
Host: example.com:10054 
.... 

Reposnse:

Hello, world! 

UPDATE:

Если вы хотите, что ваш сервлет виден через WebAdapter вы должны позволить.

1.Open IS_SHARE\system\config\cluster\webadapter.properties

2.Navigate в этом разделе:

## The list of servlets, which can be accessed through the generic 
## .servlet mapping. The WebAdapter forwards only requests of the form 
## /servlet/<group><servlet.allow.x>... 

3.Add запись для сервлета.Пример:

servlet.allow.4=/DEMO 

4.Access сервлет на аналогичный URL:

https://example.com/INTERSHOP/servlet/WFS/DEMO/hey 
+1

Привет Lachezar! Спасибо за вашу помощь. Это как-то поместило меня в правильном направлении. Мне не нужно было объявлять зависимости servletengine и guice-servlet. Он работал без. Моя ошибка была скорее объявлением пути доступа в модуле сервлета с помощью только «/ DEMO/*» - установка «/ servlet» перед моим пути сервлета исправила его. –

+0

См. Обновление. –

+0

Спасибо! Это было действительно в моей голове. –