我有一个简单的JERSEY WEBService,负责返回数据库中的状态
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
。
如果有,请告诉我,如何修改我的代码以使用缓存控制?
答案 0 :(得分:0)
只需重新构建代码即可返回Response
而不是String
。在使用Response.ok(myBook);
的情况下,只需将您的jsonp response
传递给myBook
而不是String
。
唯一的其他方法是直接操纵标题。
如果必须坚持使用HttpSerlvetResponse
返回类型,那么您可以注入@GET
public String getAllSates(@Context HttpServletResponse response) {
CacheControl cc = new CacheControl();
cc.setMaxAge(86400);
cc.setPrivate(true);
response.addHeader("Cache-Control", cc.toString());
[...]
}
并只设置标题
ContainerResponseFilter
或者您可以在CXX=g++-4.8
CXXFLAGS=-std=c++11 -pedantic -Wall -pedantic-errors -Wextra
IPATH=-I/usr/include/qt4/ -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtSql
LDFLAGS=-lQtGui -lQtSql -lQtCore
OBJS=main.o
HEADERS=mymoc1.hpp mymoc2.hpp other-headers
all: myexec
myexec: $(OBJS)
$(CXX) $(CXXFLAGS) $(OBJS) -o $@ $(LDFLAGS)
main.o: main.cpp $(HEADERS)
$(CXX) -c $(CXXFLAGS) $< -o $@ $(IPATH)
mymoc1.hpp: the-header-needing-moc.hpp
moc $< -o $@
mymoc2.hpp: other-header-needing-moc.hpp
moc $< -o $@
内添加标题,如果您不想在每种方法中添加标题。不确定您使用的是哪个泽西岛版本,但是使用Jersey 2.x,您可以确定哪种方法将使用过滤器,以便只有选定的资源才能通过此过滤器。如果此功能可用,不确定泽西岛1.x.这是2.x的the documentation。