Pregunta

Quiero un servlet para manejar las solicitudes a archivos en función de prefijo y extensión, por ejemplo.

prefijo _ *. Xml

Desde el mapeo de inicio y final de ruta de solicitud no es posible, he mapeado todas las solicitudes * .xml a mi servlet. La pregunta ahora es: ¿cómo puedo dejar caer fuera de mi servlet para los archivos XML que no empiezan con "prefix_", por lo que la solicitud sea manejada como una solicitud de "normal" a un archivo XML

Este es probablemente bastante simple, pero no parecen ser capaces de averiguar esto ...: - /

Muchas gracias de antemano

¿Fue útil?

Solución

Me gustaría sugerir fuertemente el uso de un framework MVC adecuado para esto. Como usted ha descubierto, la flexibilidad de la API servlet estándar es muy limitada cuando se trata de solicitar el despacho.

Lo ideal sería poder utilizar su código de servlet existente en combinación con un framework MVC, con el marco haciendo la diapcthing basado en patrón de ruta, y sus servlets haciendo la lógica de negocio. Por suerte, Spring MVC le permite hacer precisamente eso, mediante el ServletForwardingController. Sería una configuración primavera muy ligero.

Por lo que tendría algo como esto en su 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>

A continuación, tendría un archivo / primavera-servlet.xml WEB-INF como esto:

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

Y eso sería más o menos la misma. Todas las solicitudes de /prefix*.xml irían a myServlet, y todos los demás caerían hasta el contenedor.

Otros consejos

otra solución (tal vez se adapta para usted) es si está utilizando / plan para usar un Apache frente a esa instancia del contenedor web se puede utilizar el módulo de reescritura de Apache. Reescribiendo la url a algo más fácil de manejar para el contenedor Webapp.

Espero que esto ayude. David.

No shure, pero una vez que se captura todos * .xml solicitudes se pueden inspeccionar de nuevo la solicitud en su código a través de 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
        }
    }

(código no probado, solamente una idea ...)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top