Domanda

Voglio un servlet per gestire le richieste di file a seconda del prefisso e l'estensione, per esempio.

prefisso _ *. Xml

Dal momento che la mappatura su inizio e fine di richiesta di traccia non è possibile, ho mappato tutte le richieste * .xml al mio Servlet. La domanda ora è: come posso abbandonare la mia servlet per i file XML che non inizia con "prefix_", in modo che la richiesta viene gestita come una richiesta di "normale" in un file XML

Questa è probabilmente abbastanza semplice, ma non sembrano essere in grado di trovare questo fuori ...: - /

Grazie mille in anticipo

È stato utile?

Soluzione

Vorrei suggerire utilizzando un framework MVC adeguato per questo. Come hai scoperto, la flessibilità delle API servlet standard è molto limitato quando si tratta di chiedere di dispacciamento.

Idealmente, si sarebbe in grado di utilizzare il codice del servlet esistente in combinazione con un framework MVC, con il quadro facendo la diapcthing basata sul modello percorso, e le tue servlet fare la logica di business. Per fortuna, Spring MVC ti permette di fare proprio questo, utilizzando il ServletForwardingController. Sarebbe un config primavera molto leggero.

Così avresti qualcosa di simile nel tuo web.xml:

<servlet>
   <servlet-name>myServlet</servlet-name>
   <servlet-class>foo.MyServlet</servlet-class>
</servlet>

<servlet>
   <servlet-name>spring</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

<url-mapping>
   <servlet-name>spring</servlet-name>
   <url-pattern>*</url-pattern>
</url-mapping>

Si potrebbe quindi avere un file / primavera-servlet.xml WEB-INF in questo modo:

<beans>
    <bean name="/prefix*.xml" class="org.springframework.web.servlet.mvc.ServletForwardingController">
       <property name="servletName" value="myServlet"/>
    </bean>
</beans>

E sarebbe praticamente. Tutte le richieste di /prefix*.xml sarebbe andato a myServlet, e tutti gli altri cadrebbero fino al contenitore.

Altri suggerimenti

un'altra soluzione (forse adatta per voi) è se si utilizza / piano per usare un Apache di fronte a tale istanza web container è possibile utilizzare il modulo di riscrittura di Apache. Riscrivere l'url a qualcosa di più facile da gestire per il contenitore Webapp.

Spero che questo aiuti. David.

Non Shure, ma una volta che si cattura tutte le richieste * .xml è possibile ispezionare di nuovo la richiesta nel codice tramite HttpServletRequest.getRequestURI ()

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uri =req.getRequestURI();
        int i = uri.lastIndexOf('/');
        int j = uri.lastIndexOf('.', i);
        if (uri.substring(i+1, j).startsWith("prefix_")) {
            // your code
        }
    }

(codice non testato, solo un'idea ...)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top