我在一个团队中开发一个带有相关RESTAPI的单页web应用程序。
我想知道是否有人能帮我?我正在尝试为我们的应用程序找到一种方法,如果访问某些URL,则返回index.html的内容,并给出200个响应。例如,客户端希望在URL中嵌入信息,但希望返回index.html上的内容。
例如,我们的单页Web应用程序可在单个上下文根上使用,例如:超文本传输协议://host: 9082/webapp
我们在http://host:9082/webapp/api/上提供了restendpoint...这些endpoint不能返回索引html,它们必须只返回带有适当状态代码(400、404、200、201等)的有效rest响应
Java脚本由超文本传输协议提供://host: 9082/webapp/js/…
但是,如果客户端请求http://host:9082/web app/resource/7/show,我们希望返回状态代码为200的index.html。然后,客户机将从URL中提取含义来驱动其他REST请求。
所以我试着写了一个如下的过滤器:
@Override
public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
{
final HttpServletRequest request = (HttpServletRequest)servletRequest;
final HttpServletResponse response = (HttpServletResponse)servletResponse;
final String requestUri = request.getRequestURI();
if (!excluded(requestUri))
{
request.getRequestDispatcher(INDEX_HTML).forward(request, response);
}
else
{
filterChain.doFilter(servletRequest, servletResponse);
}
}
private boolean excluded(String requestUri)
{
for (String part : mExcludedUriParts)
{
if (requestUri.contains(part))
{
return true;
}
}
return false;
}
<filter>
<filter-name>FallbackFilter</filter-name>
<filter-class>com....http.filter.internal.FallbackFilter</filter-class>
<init-param>
<param-name>excludedUriParts</param-name>
<param-value>/api/,.js/,.png,.html,/apidocs/,/users/imgs/</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FallbackFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然而,这种方法是相当脆弱的,因为所部署的应用程序需要更改web。xml来匹配服务器上的可用资源,这当然会改变。
我们还考虑了在过滤器链中检测404,然后修改响应,但是Liberty不允许这样做,因为响应已经被提交。我们也考虑过使用请求接受头(即text/html)作为是否返回索引html的基础,但是我们有其他html文件,所以这种方法也不起作用。
我们基本上想要一种方法,允许服务器上一些不存在的位置返回200状态码index.html。理想情况下,我们希望被告知404并控制响应。
在Liberty中,有没有办法使用过滤器或其他机制来实现这一点?
非常感谢
我不确定这一点,但是如果您将响应包装在ServletResponseWrapper中,则可以拦截PrintWriter.flush(),因此设置404不会提交响应,然后过滤器可以使用它。这里有一个用于其他内容的示例:
https://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.iseries.doc/ae/twbs_jaxrs_handlers_servlet_filters.html
问题内容: 我将使用解决方案来更新此问题,我想包括我的问题和解决方案,因为我无法在Stackoverflow上找到它。如果您想加入解决方案,请放心。 我有一个使用Visual Studio 2013创建的新创建的“空” MVC5项目。如果可能,我需要from并想要AJAX行为。在MVC3中使用Ajax.BeginForm总是很简单,所以我认为在MVC5中也是如此。 但是,当我单击“提交”按钮时,在
我想运行"sudo whoami"命令在PHP脚本。 我已经添加了下一行到 /etc/sudoers Apache ALL=(ALL)NOPASSWD:/usr/bin/whoami 然后执行脚本 $result为空$return_var==1 终端命令 返回“root”。 PHP 5.6.38 CentOS 7.5。1804
我目前正在对一个相对较大的项目的log4j配置进行微调。目前,我还没有为所有可能创建日志项的位置配置日志级别。 我想让log4j拥有某种回退appender来记录没有为其配置其他appender的所有消息。例如,如果我有一条日志消息: 登录: a. b. c. d: WARN 并且有一个附加程序,配置为用级别INFO记录包a. b. c,然后输出记录到该附加程序。 但是,如果我没有配置append
Git版本回退的意思就是将本地代码回退到某一个指定的版本,此版本之前的所有内容都会被重置. 操作方法: VCS —> Git —> Reset HEAD—> 弹出Reset Head对话框. Reset HEAD: Reset Type: 回退类型 Mixed:回退到某个版本,本地源码不会回退, 会回退commit和index信息. Soft:回退到某个版本, 本地源码和index信息不会回退,
每一个合约有且仅有一个没有名字的函数。这个函数无参数,也无返回值。如果调用合约时,没有匹配上任何一个函数(或者没有传哪怕一点数据),就会调用默认的回退函数。 此外,当合约收到ether时(没有任何其它数据),这个函数也会被执行。在此时,一般仅有少量的gas剩余,用于执行这个函数(准确的说,还剩2300gas)。所以应该尽量保证回退函数使用少的gas。 下述提供给回退函数可执行的操作会比常规的花费得