Java web.xml-如何为转发到index.html的任何不匹配请求创建catchall servlet?
我在Glassfish的爪哇战争中为一个有棱角的页面服务 我需要将public下的所有内容作为静态文件提供,所有其他请求都应该提供index.html 因为它是有角度的,所以它需要提供index.html,但仍然保持结尾。因此,如果您访问example.com/stuff,它应该加载索引页,并在末尾保留/stuff 我现在有一个glassfish-web.xml,但我仍然得到了一个404,用于公共场所以外的所有东西Java web.xml-如何为转发到index.html的任何不匹配请求创建catchall servlet?,java,servlets,Java,Servlets,我在Glassfish的爪哇战争中为一个有棱角的页面服务 我需要将public下的所有内容作为静态文件提供,所有其他请求都应该提供index.html 因为它是有角度的,所以它需要提供index.html,但仍然保持结尾。因此,如果您访问example.com/stuff,它应该加载索引页,并在末尾保留/stuff 我现在有一个glassfish-web.xml,但我仍然得到了一个404,用于公共场所以外的所有东西 <!DOCTYPE glassfish-web-app PUBLIC "-
<!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>
使用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或任何其他应用程序服务器完全无关
如果您还希望/需要在请求无效的情况下添加与url关联的,可以使用HttpServletRequestgetQueryString检索它:
更多信息:
已删除GlassFish,因为问题和解决方案与应用程序服务器无关。war和angularjs标记类似。
//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);