Pergunta

Eu quero um Servlet para lidar com solicitações para arquivos, dependendo prefixo e extensão, por exemplo.

prefixo _ *. Xml

Uma vez que o mapeamento em início e fim de pedido caminho não é possível, eu mapearam todas as solicitações * .xml para o meu Servlet. A questão agora é: como posso abandonar a minha servlet para arquivos XML não começando com "prefix_", para que o pedido seja tratado como um pedido de "normal" para um arquivo xml

Este é provavelmente muito simples, mas eu não parecem ser capazes de descobrir isso ...: - /

Muito obrigado antecipadamente

Foi útil?

Solução

Gostaria de sugerir usando um framework MVC adequada para isso. Como você descobriu, a flexibilidade da API servlet padrão é muito limitada quando se trata de pedido de despacho.

O ideal é que você seria capaz de usar seu código servlet existente em combinação com um framework MVC, com o quadro fazendo o diapcthing baseado em padrão caminho, e seus servlets fazendo a lógica de negócios. Felizmente, Spring MVC permite que você faça exatamente isso, usando o ServletForwardingController. Seria uma configuração de mola muito leve.

Então você teria algo parecido com isso no seu 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>

Você teria, então, um arquivo WEB-INF / spring-servlet.xml assim:

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

E isso seria muito bonito isso. Todos os pedidos de /prefix*.xml iria para MyServlet, e todos os outros cairia até o recipiente.

Outras dicas

outra solução (talvez se encaixa para você) é se você estiver usando / plano de usar um Apache na frente dessa instância container web, você poderia usar o módulo de reescrita do apache. Reescrevendo a url para algo mais fácil de manusear para o recipiente Webapp.

Espero que isso ajude. David.

Não shure, mas uma vez que você pegar todos os pedidos .xml * Você pode inspecionar o pedido novamente em seu código via 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 não testado apenas uma idéia ...)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top