配置带有缓存的嵌入式(以编程方式)jetty 9.3.0
configure jetty 9.3.0 embedded (programmatically) with caching
我似乎无法让我的码头使用缓存。
我有一个只会显示 html 的码头服务器。
我在那里有 JavaScript 和很多我不想每次都加载的图像。例如,我的应用程序需要在 3 个页面之间在 10 秒内切换。载入jQuery 3 次很费时间,载入logo 图片等更耗时。这就是为什么我要启用缓存。
这是我得到的:
server = new Server(); //new Jetty Server
//setting up a ssl connection
try
{
SslContextFactory cf = new SslContextFactory();
cf.setKeyStorePath(keystore);
cf.setKeyStorePassword("password");
HttpConfiguration config = new HttpConfiguration();
config.addCustomizer(new SecureRequestCustomizer());
config.setSecureScheme("https");
config.setSecurePort(8443);
HttpConfiguration sslConfiguration = new HttpConfiguration(config);
sslConfiguration.addCustomizer(new SecureRequestCustomizer());
httpConnector = new ServerConnector(server);
httpConnector.addConnectionFactory(new HttpConnectionFactory(config));
httpConnector.setPort(suggestHttpPort());
httpConnector.setName("unsecured");
sslConnector = new ServerConnector(server,
new SslConnectionFactory(cf, HttpVersion.HTTP_1_1.toString()),
new HttpConnectionFactory(sslConfiguration));
sslConnector.setPort(suggestHttpSSLPort());
sslConnector.setName("secured");
server.setConnectors(new Connector[] { httpConnector, sslConnector });
}
catch (Exception e)
{
log.error("setting up Jetty failed", e);
}
// This is where i want to enable caching, at least that is what i have figuged out so far but its not working
DefaultServlet defaultServlet = new DefaultServlet();
ServletHolder holder = new ServletHolder(defaultServlet);
holder.setInitParameter("cacheControl", "max-age=120, public");
ServletContextHandler bb = new ServletContextHandler();
bb.addServlet(holder, "/");
server.setHandler(bb);
server.start();
我做错了什么?我想为所有内容启用缓存...
不要像针对已启动的 Servlet 那样直接使用 ServletHolder
,而是让 ServletHolder
创建并初始化 class 引用。
您需要一个 ServletContextHandler
和一个已定义的基础资源,DefaultServlet
也可以使用它(这应该是一个指向静态文件内容根目录的 URI)
示例:
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
context.setBaseResource(Resource.newResource(webRootUri));
ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class);
holderPwd.setInitParameter("dirAllowed", "true");
holderPwd.setInitParameter("cacheControl", "max-age=3600,public");
context.addServlet(holderPwd,"/");
server.setHandler(context);
我似乎无法让我的码头使用缓存。 我有一个只会显示 html 的码头服务器。 我在那里有 JavaScript 和很多我不想每次都加载的图像。例如,我的应用程序需要在 3 个页面之间在 10 秒内切换。载入jQuery 3 次很费时间,载入logo 图片等更耗时。这就是为什么我要启用缓存。
这是我得到的:
server = new Server(); //new Jetty Server
//setting up a ssl connection
try
{
SslContextFactory cf = new SslContextFactory();
cf.setKeyStorePath(keystore);
cf.setKeyStorePassword("password");
HttpConfiguration config = new HttpConfiguration();
config.addCustomizer(new SecureRequestCustomizer());
config.setSecureScheme("https");
config.setSecurePort(8443);
HttpConfiguration sslConfiguration = new HttpConfiguration(config);
sslConfiguration.addCustomizer(new SecureRequestCustomizer());
httpConnector = new ServerConnector(server);
httpConnector.addConnectionFactory(new HttpConnectionFactory(config));
httpConnector.setPort(suggestHttpPort());
httpConnector.setName("unsecured");
sslConnector = new ServerConnector(server,
new SslConnectionFactory(cf, HttpVersion.HTTP_1_1.toString()),
new HttpConnectionFactory(sslConfiguration));
sslConnector.setPort(suggestHttpSSLPort());
sslConnector.setName("secured");
server.setConnectors(new Connector[] { httpConnector, sslConnector });
}
catch (Exception e)
{
log.error("setting up Jetty failed", e);
}
// This is where i want to enable caching, at least that is what i have figuged out so far but its not working
DefaultServlet defaultServlet = new DefaultServlet();
ServletHolder holder = new ServletHolder(defaultServlet);
holder.setInitParameter("cacheControl", "max-age=120, public");
ServletContextHandler bb = new ServletContextHandler();
bb.addServlet(holder, "/");
server.setHandler(bb);
server.start();
我做错了什么?我想为所有内容启用缓存...
不要像针对已启动的 Servlet 那样直接使用 ServletHolder
,而是让 ServletHolder
创建并初始化 class 引用。
您需要一个 ServletContextHandler
和一个已定义的基础资源,DefaultServlet
也可以使用它(这应该是一个指向静态文件内容根目录的 URI)
示例:
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
context.setBaseResource(Resource.newResource(webRootUri));
ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class);
holderPwd.setInitParameter("dirAllowed", "true");
holderPwd.setInitParameter("cacheControl", "max-age=3600,public");
context.addServlet(holderPwd,"/");
server.setHandler(context);