2016-12-08 1 views
2

J'essaie d'inclure une servlet tierce pour fonctionner dans le contexte du serveur d'applications IS7. Comment pourrais-je ajouter la servlet et le mapping au web.xml?Ajout d'une servlet à exécuter dans le contexte du serveur d'applications Intershop 7.4

Dans la base de connaissances, j'ai seulement trouvé des informations concernant Enfinity Suite 6. Aucune des étapes fournies ne semble fonctionner.

EDIT:

J'ai trouvé une solution proposée pour IS7 en utilisant Guice et liant le servlet via un module Servlet spécifique comme

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); 
    } 
} 

J'ai ajouté mon ServletModule au fichier objectgraph.properties mais mon servlet n'est toujours pas appelé quand j'essaye d'y accéder.

Des suggestions?

Répondre

2

Je sais que cela fonctionne dans ICM 7.7 mais je crois qu'il a été autour depuis 7.4.

Vous pouvez utiliser le Guice Servlet Extension. 1.Déclarez la dépendance de la servlet Guice dans votre cartouche build.gradle. Exemple:

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

2. Définition d'un module servlet dans la cartouche objectgraph.properties. Exemple:

global.modules = com.example.modules.DemoServletModule 

3.Mettre votre servlet. Exemple:

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

4.Créez la mise en œuvre du module. Gotcha: Le nom doit commencer par /servlet/ comme indiqué dans les commentaires. Exemple:

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, redémarrage, essayez. Exemple:

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

Reposnse:

Hello, world! 

MISE À JOUR:

Si vous souhaitez que votre servlet est visible à travers le WebAdapter vous devez permettre.

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

2.Navigate à cette section:

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

entrée 3.Ajouter pour votre servlet.Exemple:

servlet.allow.4=/DEMO 

4.Accès le servlet sur une URL similaire:

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

Salut Lachezar! Merci de votre aide. Cela m'a mis dans la bonne direction. Je n'avais pas besoin de déclarer les dépendances 'servletengine' et 'guice-servlet'. Cela a fonctionné sans. Mon erreur était plutôt de déclarer le chemin d'accès dans le module de servlet avec juste "/ DEMO/*" - mettre "/ servlet" devant mon chemin de servlet l'a fixé. –

+0

Voir aussi la mise à jour. –

+0

Merci beaucoup! Cela faisait vraiment la tête. –