Шаблон URL 404 - PullRequest
       3

Шаблон URL 404

0 голосов
/ 04 марта 2011

Возникла проблема с URL-шаблоном в отображении сервлета. Я использую Spring 3.0 и использую аннотированные контроллеры. Я сопоставил * .do с помощью Spring DispatcherServlet. Я пытался использовать @PathVariable с url - /test.do/ndomusername} Это выбрасывает 404. Пробовал несколько проб и ошибок, и это не помогло. url-patter "/" работает, но другие части приложения не работают (CSS, изображения и т. д.)

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

При использовании url с расширением out mapping (например, .do, .html и т. Д.) Для Spring все ваши URL будут обрабатываться Spring. поэтому вам необходимо сопоставить статический ресурс с другим URL-адресом и обработать его с помощью другого сервлета.

пример: ваш старый css будет отображаться на http://localhost:8080/css/style.css, а ваш css будет отображаться на http://localhost:8080/static/css/style.css

и добавьте отображение сервлета для /static/* url

     <!-- Servlet for static resource -->
     <servlet>
        <servlet-name>static</servlet-name>
        <servlet-class>com.jegbagus.servlet.DefaultServlet</servlet-class>      
     </servlet>

    <servlet-mapping>
        <servlet-name>basic</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- Mapper for static resource --> 
    <servlet-mapping>
        <servlet-name>static</servlet-name>
        <url-pattern>/static/*</url-pattern>
    </servlet-mapping>

и добавьте сервлет для обработки этих статических запросов.

package com.jegbagus.servlet;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class DefaultServlet extends HttpServlet
{   
    private static final long serialVersionUID = 1L;

    // Tomcat, Jetty, JBoss, and GlassFish 
    private static final String COMMON_DEFAULT_SERVLET_NAME = "default";

    // Resin 
    private static final String RESIN_DEFAULT_SERVLET_NAME = "resin-file";

    // WebLogic 
    private static final String WEBLOGIC_DEFAULT_SERVLET_NAME = "FileServlet";

    // WebSphere 
    private static final String WEBSPHERE_DEFAULT_SERVLET_NAME = "SimpleFileServlet";


    public String scanDefaultServlet(){
        if(this.getServletContext().getNamedDispatcher(COMMON_DEFAULT_SERVLET_NAME) != null) {
            return COMMON_DEFAULT_SERVLET_NAME;
        } else if(this.getServletContext().getNamedDispatcher(RESIN_DEFAULT_SERVLET_NAME) != null) {
            return RESIN_DEFAULT_SERVLET_NAME;
        } else if(this.getServletContext().getNamedDispatcher(WEBLOGIC_DEFAULT_SERVLET_NAME) != null){
            return WEBLOGIC_DEFAULT_SERVLET_NAME;
        } else if(this.getServletContext().getNamedDispatcher(WEBSPHERE_DEFAULT_SERVLET_NAME) != null){
            return WEBSPHERE_DEFAULT_SERVLET_NAME;
        } else {
            throw new IllegalStateException("Cannot determine what Server you currently use");
        }       
    }

    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        RequestDispatcher rd = getServletContext().getNamedDispatcher(this.scanDefaultServlet());
        HttpServletRequest wrapped = new HttpServletRequestWrapper(req) {
                public String getServletPath() {return "";}
        };
        rd.forward(wrapped, resp);
    }
}
0 голосов
/ 04 марта 2011

Я не думаю, что шаблон URI в 3.0 поддерживает @pathvariable в URL с расширением, например .do.

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templates

Вам нужно использовать шаблоны URL-адресов каталогов, как вы это сделали / или / soft / в вашем файле web.xml.

Вы можете установить путь, который сервлет пружины будет игнорировать отображение, как в следующем примере, https://src.springframework.org/svn/spring-samples/mvc-basic/trunk/ или же используйте web.xml, чтобы запрос к пути, например / soft / *, обрабатывался только весенним сервлетом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...