是否可以在我的代码中使用缓存控制选项
Is it possible to Use Cache Control Option in my code
我有一个简单的 JERSEY WEBService,它负责 return 我们数据库中存在的状态
package com.services.regg;
@Path("/getstates")
public class FetchStates {
@GET
@Consumes("application/text")
@Produces("application/json")
public String getAllSates() throws JSONException
{
JSONArray jsonarray_allstates = new JSONArray();
Connection dbConnection = null;
PreparedStatement getAllStatesPst = null ;
ResultSet getAllStatesResltSet = null;
try
{
dbConnection = DBConnectionOrient.getDBConnection();
getAllStatesPst = dbConnection.prepareStatement("select stateID , stateName from tbl_state ORDER BY stateName");
getAllStatesResltSet = getAllStatesPst.executeQuery();
while(getAllStatesResltSet.next())
{
JSONObject eachrecordjsonObj = new JSONObject();
String stateID = getAllStatesResltSet.getString("stateID").trim();
String stateName = getAllStatesResltSet.getString("stateName").trim();
eachrecordjsonObj.put("stateID", stateID).put("stateName", stateName);
if(!stateName.isEmpty() && !stateName.equals(""))
{
jsonarray_allstates.put(eachrecordjsonObj);
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
DBConnectionOrient.close(getAllStatesPst,getAllStatesResltSet);
DBConnectionOrient.close(dbConnection);
}
String response = "jsonCallback("+jsonarray_allstates.toString()+")";
return response;
}
}
一切正常。
由于这适用于移动应用程序,我们发现后端的响应非常慢
我想从我这边优化应用程序的性能。
为此,我看到了 Jersey Cache Control 。
CacheControl cc = new CacheControl();
cc.setMaxAge(86400);
cc.setPrivate(true);
ResponseBuilder builder = Response.ok(myBook);
builder.cacheControl(cc);
return builder.build();
我的问题是,是否可以在我的代码中使用 CacheControl
,因为我直接发送字符串而不是 ResponseBuilder
。
如果可以,请告诉我如何修改我的代码以使用缓存控制?
只需将您的代码重组为 return Response
而不是 String
。在使用 Response.ok(myBook);
的地方,只需将您的 jsonp response
传递给它而不是 myBook
.
唯一的其他方法涉及直接操作 header。
如果你必须坚持使用String
return类型,那么你可以注入HttpSerlvetResponse
并设置header
@GET
public String getAllSates(@Context HttpServletResponse response) {
CacheControl cc = new CacheControl();
cc.setMaxAge(86400);
cc.setPrivate(true);
response.addHeader("Cache-Control", cc.toString());
[...]
}
或者您可以在 ContainerResponseFilter
中添加 header,如果您不想在每个方法中都添加它的话。不确定您使用的是哪个 Jersey 版本,但是使用 Jersey 2.x,您可以确定将使用过滤器的方法,以便只有选定的资源才会通过此过滤器。不确定 Jersey 1.x,如果此功能可用。 2.x.
的 the documentation
我有一个简单的 JERSEY WEBService,它负责 return 我们数据库中存在的状态
package com.services.regg;
@Path("/getstates")
public class FetchStates {
@GET
@Consumes("application/text")
@Produces("application/json")
public String getAllSates() throws JSONException
{
JSONArray jsonarray_allstates = new JSONArray();
Connection dbConnection = null;
PreparedStatement getAllStatesPst = null ;
ResultSet getAllStatesResltSet = null;
try
{
dbConnection = DBConnectionOrient.getDBConnection();
getAllStatesPst = dbConnection.prepareStatement("select stateID , stateName from tbl_state ORDER BY stateName");
getAllStatesResltSet = getAllStatesPst.executeQuery();
while(getAllStatesResltSet.next())
{
JSONObject eachrecordjsonObj = new JSONObject();
String stateID = getAllStatesResltSet.getString("stateID").trim();
String stateName = getAllStatesResltSet.getString("stateName").trim();
eachrecordjsonObj.put("stateID", stateID).put("stateName", stateName);
if(!stateName.isEmpty() && !stateName.equals(""))
{
jsonarray_allstates.put(eachrecordjsonObj);
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
DBConnectionOrient.close(getAllStatesPst,getAllStatesResltSet);
DBConnectionOrient.close(dbConnection);
}
String response = "jsonCallback("+jsonarray_allstates.toString()+")";
return response;
}
}
一切正常。
由于这适用于移动应用程序,我们发现后端的响应非常慢
我想从我这边优化应用程序的性能。 为此,我看到了 Jersey Cache Control 。
CacheControl cc = new CacheControl();
cc.setMaxAge(86400);
cc.setPrivate(true);
ResponseBuilder builder = Response.ok(myBook);
builder.cacheControl(cc);
return builder.build();
我的问题是,是否可以在我的代码中使用 CacheControl
,因为我直接发送字符串而不是 ResponseBuilder
。
如果可以,请告诉我如何修改我的代码以使用缓存控制?
只需将您的代码重组为 return Response
而不是 String
。在使用 Response.ok(myBook);
的地方,只需将您的 jsonp response
传递给它而不是 myBook
.
唯一的其他方法涉及直接操作 header。
如果你必须坚持使用String
return类型,那么你可以注入HttpSerlvetResponse
并设置header
@GET
public String getAllSates(@Context HttpServletResponse response) {
CacheControl cc = new CacheControl();
cc.setMaxAge(86400);
cc.setPrivate(true);
response.addHeader("Cache-Control", cc.toString());
[...]
}
或者您可以在 ContainerResponseFilter
中添加 header,如果您不想在每个方法中都添加它的话。不确定您使用的是哪个 Jersey 版本,但是使用 Jersey 2.x,您可以确定将使用过滤器的方法,以便只有选定的资源才会通过此过滤器。不确定 Jersey 1.x,如果此功能可用。 2.x.