之前在网上看到android webview是否支持gzip的讨论。
大家一致认为是不支持的,以下是自己摸索出来的实现
方案一:
自己实现的思路发事:
1.客户端
就自己实现webviewclient,并控制连接,发送请求头accept-encoding,告知服务器,当前浏览器支持gzip解析。读取远程内容后,再通过gzipinputstream进行解码,然后使用webview的loaddata方法加载内容。
2.服务端
用的tomcat服务器,配置网上有介绍
主要是修改server.xml添加压缩支持
注:发现的问题是,通过修改server.xml配置支持gzip压缩,需要显式设置请求头,webview默认是不会发送这样的请求头的(或者是发送的不一样),导致需要有第一步的操作。
这种实现,自己控制连接,请求数据并解析的方案,太过于麻烦。页面上的请求地址处理(绝对路径、相对路径的问题)、乱码、问题等等。最要命的是修改tomcat的server.xml只能解决html、css、js、xml文件的压缩。对于jsp文件无可奈何,想想一个javaee web应用中jsp页面还是相当多的,所以上述方案真的很鸡肋。
方案二
1.在服务端(web应用)中强制设置采用gzip压缩格式,写回应头中的Content-Encoding,由于webview进行解压缩
经测试,webview是支持Content-Encoding,gzip回应头信息的。
也就是说只要服务端回应的是gzip的数据,webview还是可以还原,并显示。
接下来的就简单了,通过写一个过滤器,拦截jsp解析时的输出,在解析完成后,使用gzipoutputstream进行编码并输出。并设置回应头的Content-Encoding信息就行了。
已经提供该过滤器,见附件:
使用办法(修改web.xml,添加如下内容)
<filter>
<filter-name>gzipfilter</filter-name>
<filter-class>
com.XXXXXXXXXXXXXXXX.webserver.filter.GzipFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>gzipfilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>gzipfilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>gzipfilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
分享到:
相关推荐
使用WebView可以让Android端的开发工作大量减少,原因是在服务端可以为其做一定的工作,下面这个小Demo就实现了从Android客户端与服务端的交互。我这里客户端使用的工具是Eclipse,服务端使用MyEclipse。
IOS加载bundle里的html并实现WebView与JavaScript的交互
Android加载assets里的html并实现WebView与JavaScript的交互
Android项目源码webView套用html页面实现家具销售商城
webview的简单实现,。有需要的可以下来看看,,希望能帮助到你,。
Android WebView 加载 PDF 文件实现。其原理就是在 app 本地搭建一个 website ,然后利用 WebView 加载这个站点,站点去实现加载显示 PDF 的目的,站点其原理也是采用 js 框架去实现的。
在android的webview中实现websocket通信
本项目是一个简单的在线商城项目源码,说它简单是因为它只是一个webView壳子,项目还在webView的上方集成了一个二维码扫描的部分,
Android 4.4 WebView使用实例,实现后退、前进、刷新、错误处理等功能。完成项目,可直接eclipse运行。有WebViewClient常用方法注释,WebChromeClient常用方法注释。
使用android studio 3.1.2 ,利用webview,实现登录界面。采用本地html 页面
仿天天动听用WebView实现的引导页面 网页 (Webview)
在做 React Native 应用时,如果需要在 App 里面内嵌 H5 页面,那么 H5 与 App 之间可以通过 Webview 的 PostMessage 功能实现实时的通讯,但是在小程序里面,虽然也提供了一个 webview 组件,但是,在进行 post...
Android 通过 WebView 与 js 交互实现图文混排, 解决图片适配屏幕问题与查看大图功能
自定义WebView页面中,长按文本的弹出选项、点击选择后,分享、转发、收藏选择文本
Android中使用WebView, WebChromeClient和WebViewClient加载网页的具体实现过程。
WebView实现引导页面
1、webview实现 2、ListView、BaseAdapter实现应用商店列表
webView实现:加载本地网页,网上网页,实现支持javaScript,页面缓存,进度条实现;重新返回键,使得页面可以后退!
android Sdk 2.3.* 1.实现输入地址,在本应用中浏览网页。 我才学android,这是练习WebView的使用,功能简单,代码清晰。