web 服务端取得访问某个页面返回值的问题

目标:
  访问 http://localhost/preview/a.css 的时候,如果 preview 中并没有 a.css 这个文件,就接着访问 html/a.css


解决办法:
  在filter 中 wraper 了 response ,得到 error code,发现是 404,就接着访问下一个。代码如下:
  我觉得挺土的,有没有好办法取得 response 的 error code 呢?或是其它方法解决这个问题?



public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
ServletResponseWraper wraper = new ServletResponseWraper(resp);
chain.doFilter(request, wraper);
if (wraper.getStatus() == HttpServletResponse.SC_NOT_FOUND) {
if (isPreview(req)) {
String path = getHtmlUrl(req);
wraper.status = HttpServletResponse.SC_OK;
req.getRequestDispatcher(path).forward(req, wraper);
} else {
wraper.getResponse().sendError(wraper.getStatus(), wraper.getRootMessage());
}
}
}

private String getHtmlUrl(HttpServletRequest req) {
String path = req.getRequestURI().replaceFirst(req.getContextPath(), "");
path = path.replaceFirst("/preview", "");
path = "/html" + path;
return path;
}

private boolean isPreview(HttpServletRequest req) {
String path = req.getRequestURI().replaceFirst(req.getContextPath(), "");
boolean isPreview = path.startsWith("/preview");
return isPreview;
}

private class ServletResponseWraper implements HttpServletResponse {
private HttpServletResponse response;
private int status = HttpServletResponse.SC_OK;
private String msg;
private String rootMessage;

public ServletResponseWraper(HttpServletResponse response) {
while (response instanceof ServletResponseWraper) {
ServletResponseWraper wraper = (ServletResponseWraper) response;
setRootMessage(wraper.getRootMessage());
setMessage(wraper.getMessage());
response = wraper.getResponse();
}
this.response = response;
}

public HttpServletResponse getResponse() {
return response;
}

public void setRootMessage(String message) {
if (rootMessage == null)
rootMessage = message;
}

public String getRootMessage() {
return rootMessage;
}

public int getStatus() {
return status;
}

public String getMessage() {
return msg;
}

public void setMessage(String message) {
setRootMessage(message);
msg = message;
}

...
public void sendError(int sc, String msg) throws IOException {
status = sc;
setMessage(msg);
// response.sendError(sc, msg);
}

public void sendError(int sc) throws IOException {
status = sc;
// response.sendError(sc);
}

...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值