Javascript 如何在java中发送responce时压缩Rest服务中的数据(对象)
我的代码是Javascript 如何在java中发送responce时压缩Rest服务中的数据(对象),javascript,java,rest,Javascript,Java,Rest,我的代码是 @POST @Path("/getJSONCompareData") @Produces(MediaType.APPLICATION_JSON) public Object getJSONCompareData(@FormParam("testRunNum") String TRun,@FormParam("rptName") String reportName) { if(debugLevel>2) Log.debugLog(classNa
@POST
@Path("/getJSONCompareData")
@Produces(MediaType.APPLICATION_JSON)
public Object getJSONCompareData(@FormParam("testRunNum") String TRun,@FormParam("rptName") String reportName) {
if(debugLevel>2)
Log.debugLog(className, "getJSONStatsData", "", "", "Methad called");
Object obj=null;
try {
int testRunNum = Integer.parseInt(TRun);
String rptName = reportName;
JSONParser parser=new JSONParser();
String statsReportNameDir = Config.getWorkPath() + "/webapps/logs/TR" + testRunNum + "/reports/compareReports/" + rptName + "/compare.report";
obj=parser.parse(new FileReader(statsReportNameDir));
}catch(Exception e){
e.printStackTrace();
Log.stackTraceLog(className, "getJSONStatsData", "", "", "Exception - ", e);
}
return obj;
}
我读取的文件大小约为10MB
我想压缩数据,因为它需要1分钟通过网络
如何在ajax调用中压缩Obj和句柄您可以在服务器上使用GZIP配置压缩JSON响应。
现代浏览器支持gzip压缩内容,Apache、Tomcat、JBoss等服务器也支持gzip压缩。
所以,若在服务器中启用了gzip,它将压缩数据,然后发送到客户端。
你们可以参考这篇文章
GZIP压缩不仅可以提高js、jsp文件的性能,还可以提高http请求的性能,因为数据将被压缩您可以在服务器上使用GZIP配置压缩JSON响应。
现代浏览器支持gzip压缩内容,Apache、Tomcat、JBoss等服务器也支持gzip压缩。
所以,若在服务器中启用了gzip,它将压缩数据,然后发送到客户端。
你们可以参考这篇文章
GZIP压缩不仅可以提高js、jsp文件的性能,还可以提高http请求的性能,因为数据将被压缩对于Rest服务中的压缩数据,您可以添加(创建)注释 我已经创建了一个注释名**@Compress**并在我的服务器上为其实现了代码 导入com.cavisson.gui.server.webdashboard.services.interceptors.Compress 这是我的压缩课
package com.cavisson.gui.server.webdashboard.services.interceptors;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.ws.rs.NameBinding;
/**
* @Compress annotation is the name binding annotation.
*/
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface Compress {}
现在,我已经使用rum时的use将这个接口与我的类GZIPWriterInterceptor绑定在一起
package com.cavisson.gui.server.webdashboard.services.interceptors;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.WriterInterceptor;
import javax.ws.rs.ext.WriterInterceptorContext;
/**
* This class is used for compressing data sending from server.
*/
@Provider
@Compress
public class GZIPWriterInterceptor implements WriterInterceptor
{
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException
{
try
{
MultivaluedMap<String,Object> headers = context.getHeaders();
headers.add("Content-Encoding", "gzip");
final OutputStream outputStream = context.getOutputStream();
context.setOutputStream(new GZIPOutputStream(outputStream));
context.proceed();
}
catch(IOException | WebApplicationException e)
{
e.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
package com.cavisson.gui.server.webdashboard.services.interceptors;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.util.zip.GZIPOutputStream;
导入javax.ws.rs.WebApplicationException;
导入javax.ws.rs.core.MultivaluedMap;
导入javax.ws.rs.ext.Provider;
导入javax.ws.rs.ext.WriterInterceptor;
导入javax.ws.rs.ext.WriterInterceptorContext;
/**
*此类用于压缩从服务器发送的数据。
*/
@提供者
@压缩
公共类GZIPWriterInterceptor实现WriterInterceptor
{
@凌驾
WriteTo(WriterInterceptorContext上下文)周围的public void引发IOException、WebApplicationException
{
尝试
{
多值Map headers=context.getHeaders();
添加(“内容编码”、“gzip”);
final OutputStream OutputStream=context.getOutputStream();
setOutputStream(新的gzip输出流(outputStream));
context.procedure();
}
捕获(IOException | WebApplicationException e)
{
e、 printStackTrace();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}
标题##对于Rest服务中的压缩数据,您已添加(创建)注释 我已经创建了一个注释名**@Compress**并在我的服务器上为其实现了代码 导入com.cavisson.gui.server.webdashboard.services.interceptors.Compress 这是我的压缩课
package com.cavisson.gui.server.webdashboard.services.interceptors;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.ws.rs.NameBinding;
/**
* @Compress annotation is the name binding annotation.
*/
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface Compress {}
现在,我已经使用rum时的use将这个接口与我的类GZIPWriterInterceptor绑定在一起
package com.cavisson.gui.server.webdashboard.services.interceptors;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.WriterInterceptor;
import javax.ws.rs.ext.WriterInterceptorContext;
/**
* This class is used for compressing data sending from server.
*/
@Provider
@Compress
public class GZIPWriterInterceptor implements WriterInterceptor
{
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException
{
try
{
MultivaluedMap<String,Object> headers = context.getHeaders();
headers.add("Content-Encoding", "gzip");
final OutputStream outputStream = context.getOutputStream();
context.setOutputStream(new GZIPOutputStream(outputStream));
context.proceed();
}
catch(IOException | WebApplicationException e)
{
e.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
package com.cavisson.gui.server.webdashboard.services.interceptors;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.util.zip.GZIPOutputStream;
导入javax.ws.rs.WebApplicationException;
导入javax.ws.rs.core.MultivaluedMap;
导入javax.ws.rs.ext.Provider;
导入javax.ws.rs.ext.WriterInterceptor;
导入javax.ws.rs.ext.WriterInterceptorContext;
/**
*此类用于压缩从服务器发送的数据。
*/
@提供者
@压缩
公共类GZIPWriterInterceptor实现WriterInterceptor
{
@凌驾
WriteTo(WriterInterceptorContext上下文)周围的public void引发IOException、WebApplicationException
{
尝试
{
多值Map headers=context.getHeaders();
添加(“内容编码”、“gzip”);
final OutputStream OutputStream=context.getOutputStream();
setOutputStream(新的gzip输出流(outputStream));
context.procedure();
}
捕获(IOException | WebApplicationException e)
{
e、 printStackTrace();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}
标题###我认为您应该添加更多细节(也作为标记)关于您使用的框架。我使用jersey进行实现rest调用,从我的js文件中我点击request/dashboardserver/web/ReportWebservice/GetJSOnComparedata我使用jersey进行实现rest调用,从我的js文件中我点击request/dashboardserver/web/ReportWebservice/getJSONCompareData调用getJSONCompareData方法在这里,我正在读取一个大小约为10MB的文件,将其作为休息发送到我的js文件。我想压缩jSon对象并在REST中通过网络发送,如果我认为您应该添加更多细节(也作为标记)关于您使用的框架。我使用jersey进行实现rest调用,从我的js文件中我点击request/dashboardserver/web/ReportWebservice/GetJSOnComparedata我使用jersey进行实现rest调用,从我的js文件中我点击request/dashboardserver/web/ReportWebservice/getJSONCompareData调用getJSONCompareData方法在这里,我正在读取一个大小约为10MB的文件,将其作为休息发送到我的js文件。我想压缩jSon对象并通过网络进行响应发送,如果restyes允许,我可以使用GZIP从jsp文件发送响应——response.setHeader(“Content Encoding”,“GZIP”);OutputStream outStreamObj=response.getOutputStream()//ByteArrayOutputStream bos=新的ByteArrayOutputStream(strJSONData.length());GZIPOutputStream gos=新的GZIPOutputStream(outStreamObj);write(jsonString.getBytes());gos.flush();gos.close();out.println(jsonString);但是我想为rest call做一次响应您必须设置**compression=“on”compressionMinSize=“2048”compresses