2014-10-22 2 views
0

Я служу угловой странице в Java WAR в Glassfish.Java web.xml - Как сделать общий сервлет для любых непревзойденных запросов для пересылки index.html?

Мне нужно обслуживать все под открытым небом как статический файл, а все остальные запросы должны обслуживать index.html.

Поскольку он является угловым, ему необходимо обслуживать index.html, но все равно сохранить его. Поэтому, если вы перейдете на example.com/stuff, он должен загрузить индексную страницу и сохранить/добавить в конец.

У меня есть этот glassfish-web.xml прямо сейчас, но я все еще получаю 404 для всего, что находится вне публики.

<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD 
GlassFish Application Server 3.1 Servlet 3.0//EN" 
"http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <servlet-name>DefaultServlet</servlet-name> 
     <servlet-class> 
      org.apache.catalina.servlets.DefaultServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>DefaultServlet</servlet-name> 
     <url-pattern>*</url-pattern> 
    </servlet-mapping> 
</glassfish-web-app> 
+0

Удалено Gl assFish, потому что проблема и решение не связаны с сервером приложений. Аналогично для * war * и * angularjs * тегов. –

ответ

0

Используйте Serlvet Фильтр:

@WebFilter("/*") 
public class MainFilter implements Filter { 
    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
     throws IOException, ServletException { 
     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 
     String requestUrl = request.getRequestURL().toString(); 
     if (validUrl(requestUrl)) { 
      //allowed, continue navigation 
      chain.doFilter(req, res); 
     } else { 
      //invalid URL, send back to index.html 
      String invaludUrl = retrieveInvalidPart(requestUrl); 
      response.sendRedirect(request.getContextPath() + "/index.html" + invaludUrl); 
     } 
    } 

    private boolean validUrl(String url) { 
     //implement how to validate the URL 
    } 

    private String retrieveInvalidPart(String url) { 
     //implement how to recognize the invalid part of the URL 
    } 
} 

Обратите внимание, что эта проблема абсолютно не связано с GlassFish или любого другого сервера приложений.

Если вы хотите/должны добавить query string, связанный с URL в случае ошибочного запроса, вы можете получить его с помощью HttpServletRequest#getQueryString:

//invalid URL, send back to index.html 
String invaludUrl = retrieveInvalidPart(requestUrl); 
String queryString = request.getQueryString(); 
queryString = (queryString == null) ? "" : queryString; 
response.sendRedirect(request.getContextPath() + "/index.html" + "?invalidUrl=" + invaludUrl + queryString); 

Подробнее:

Смежные вопросы