`
haha1903
  • 浏览: 11844 次
社区版块
存档分类
最新评论

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);
		}

...
	}
分享到:
评论

相关推荐

    web服务端开发

    在IT行业中,Web服务端开发是一项至关重要的技能,它涉及到构建和维护运行在服务器上的应用程序,这些应用程序能够处理来自Web客户端(如浏览器或移动应用)的请求,并返回相应的数据或执行特定的操作。在这个场景中...

    家庭物联网项目Web服务端代码

    在本家庭物联网项目中,Web服务端扮演了核心的角色,它是整个系统的心脏,负责连接各种设备和用户界面。这个项目使用JavaEE技术栈来构建Web服务器,这是一套广泛应用于企业级应用开发的开放标准,它包含了Servlet、...

    Web服务完整实例构建Web通道(Web服务端) 简单、规范、易学、易用

    读者可能注意到,上述各步骤除了4、7二步骤外,其余各步骤都在软件开发者的开发范围内,也就是说,只要传输的指令串及结果串符合Web服务端的收发规则,开发者再也不必操心前后台的数据传输问题了(前后台环境及开发...

    sql2008的web服务端

    用tomcat的axis2发布的web服务,用于连接操作sqlserver2008进行增删等操作

    CQweb服务端

    "March29"这个文件名可能是某个特定版本或更新的标识,表明这个压缩包包含了CQweb服务端在2023年3月29日的源代码、配置文件或更新内容。对于开发人员而言,这可能是用于部署、升级或研究服务端行为的重要资源。

    WebApi接口返回值不困惑:返回值类型详解 - 文章 - 伯乐在线1

    在Web API开发中,接口的返回值类型是一个关键部分,因为它直接影响着客户端如何接收和解析服务端的数据。本文主要探讨了Web API中的四种主要返回值类型:void、IHttpActionResult、HttpResponseMessage以及自定义...

    Java Web是指用Java技术来解决Web互联网领域的技术总和 它涵盖了Web服务端和Web客户端两部分,其中Java在服务

    它涵盖了Web服务端和Web客户端两部分,其中Java在服务器端的应用尤为丰富,如Servlet、JSP以及第三方框架等。下面是对Java Web的详细解析: 一、Java Web基本概念 定义:Java Web是用Java技术来解决Web互联网领域的...

    Web服务端,HTTP服务

    Web服务端,直接在本机运行一个小巧的HTTP服务程序,单文件,可设置网站根目录。程序使用QT编写,静态编译为单可执行文件,无需依赖库。运行后可设置网站根目录,默认文档为index.htm。 压缩包中包含了简单的index....

    DWR 取得回调函数返回值案列

    ### DWR取得回调函数返回值案例详解 #### 一、DWR简介 DWR (Direct Web Remoting) 是一种简化Ajax应用开发的技术框架。它允许JavaScript直接调用服务器端的Java方法,使得前后端交互更加简便高效。DWR通过封装底层...

    Android客户端+web服务端实现图片上传到服务器

    在本项目中,"Android客户端+web服务端实现图片上传到服务器"是一个综合性的实践案例,涵盖了移动应用开发和Web服务交互的关键技术。这个项目旨在教你如何通过Android客户端应用程序将拍摄的照片上传到服务器,然后...

    CSharp客户端通过Http模拟表单提交到Java的web服务端.rar

    C#的wpf客户端使用HttpWebRequest模拟网页表单提交数据到Java的web服务端,Java服务端使用commons-fileupload.jar,Spring接受数据。 ********************************** *该程序可以同时提交表单数据和上传文件* ...

    基于Http协议的Web服务端程序

    基于HTTP协议的WEB服务器,简易版的Tomcat....服务端接受请求并将其封装为一个HTTPRequest对象,并对其解析请求数据包 ,根据解析的消息头生成对应的HTTPResponse对象,并将此对象通过Socket流再写到客户端,形成静态页面

    VS2017,C#,WinForm,WebAPI客户端+WebAPI服务端

    C#,Winform,开发的的一个示例程序,可实现WebAPI客户端发起数据POST请求,可实现WebAPI服务器响应客户端的POST请求。 WebAPI客户端,可使用钉钉和企业微信的群机器人Webhook地址,直接发起POST,实现消息推送。

    当当web服务端

    【当当web服务端】是一个面向初学者的JSP(JavaServer Pages)开发案例,它提供了深入了解和实践JSP技术的机会。JSP是Java平台上的一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,实现服务器端的动态内容...

    毕设&课程作业_智能化视频检索系统web服务端.zip

    《智能化视频检索系统Web服务端开发详解》 在当今信息化社会,智能化技术正在逐步渗透到各个领域,视频检索系统作为其中的重要组成部分,为人们提供了快速、精准的信息获取途径。本项目“毕设&课程作业_智能化视频...

    Delphi通过WebService开发Web服务端和手机客户端.docx编程资料

    ### Delphi 通过 WebService 开发 Web 服务端与手机客户端技术详解 #### 一、概述 本文将详细介绍如何利用 Delphi XE5 通过 WebService 技术开发 Web 服务端以及手机客户端应用程序。主要关注点在于创建一个三层...

    Android客户端+web服务端实现图片上传

    在Android客户端与Web服务端实现图片上传...综上所述,"Android客户端+web服务端实现图片上传"这个项目涵盖了移动开发、网络编程、服务器端架构等多个领域的知识,需要开发者具备综合的技术能力和良好的问题解决能力。

    ASP.NET webapi方式客户端提交签名数据到服务端返回JSON数据交互示例源码

    客户端(Web/ApiClient/queryToken.aspx )以post方式提交json数据来访问API服务端(WebApi:ApiServe/queryToken.aspx),api服务端接受到数据在云端处理以后在以json的形式返回给客户端 步骤:1.修改客户端: WebWeb:...

Global site tag (gtag.js) - Google Analytics