Dear all,
I am using JETTY 9.2.24 Embedded with various handlers and tried multiple options to enable GZIP compression.
Can anybody help out in setting up GZIP ?Any feedback is appreciated since the code below comes from Jetty 6 upgraded to 9.0.x and then latest distribution
The clients accepts the compression but the server does not provided it
Kind Regards,
Daniel
import
org.eclipse.jetty.deploy.App;
import
org.eclipse.jetty.deploy.DeploymentManager;
import
org.eclipse.jetty.deploy.providers.WebAppProvider;
import
org.eclipse.jetty.server.*;
import
org.eclipse.jetty.server.handler.ContextHandlerCollection;
import
org.eclipse.jetty.server.handler.HandlerCollection;
import
org.eclipse.jetty.util.resource.Resource;
import
org.eclipse.jetty.util.ssl.SslContextFactory;
import
org.eclipse.jetty.webapp.WebAppContext;
import
javax.servlet.ServletContext;
import
java.io.File;
import
java.io.IOException;
import
java.net.URL;
import
java.net.URLClassLoader;
public class
TestServer {
private static
Server
mServer
=
null;
public static final
String
AUTH_DIR
=
"auth/";
public static final
String
WEBAPPS_DIR
=
"webapps/";
/**
* Starts the server
*/
public static void
main(String[] args) {
new
TestServer(args);
}
/**
*
* @param args
the command line options
*/
public
TestServer(String[] args) {
try
{
startWebServer();
} catch
(Exception e) {
System.exit(-1);
}
}
/**
* Starts the web server
*/
private void
startWebServer()
throws
Exception {
// start the web server
mServer
=
new Server();
String mWapPath = "C:\\WAP";
// Make all WebContexts use the LST folder
File mLST =
new
File("c:\\LST"+
File.separator
+
"jetty");
if
(!mLST.exists()) {
try
{
mLST.mkdir();
}
catch(SecurityException ignored){
}
}
int
mPort =8080;
int
mSecurePort =
8443;
int
mRequestHeaderSize =
32768;
if
(mSecurePort <=
0) {
throw new
IllegalArgumentException("Port number for HTTPS connector is mandatory");
}
HttpConfiguration http_config = null;
if
(mPort >
0) {
// HTTP Configuration
http_config =
new
HttpConfiguration();
http_config.setSecureScheme("https");
http_config.setSecurePort(mSecurePort);
http_config.setOutputBufferSize(32768);
http_config.setRequestHeaderSize(mRequestHeaderSize);
// HTTP connector
ServerConnector http =
new
ServerConnector(mServer,
new
HttpConnectionFactory(http_config));
http.setPort(mPort);
http.setIdleTimeout(30000);
mServer.addConnector(http);
}
// SSL Context Factory for HTTPS (and SPDY)
String mKeyStorePath =
"mypath";
SslContextFactory sslContextFactory = new
SslContextFactory.Server();
sslContextFactory.setKeyStorePath(mKeyStorePath);
sslContextFactory.setKeyStorePassword("password");
sslContextFactory.setKeyManagerPassword("password");
// HTTPS Configuration
HttpConfiguration https_config = (http_config ==
null
? new
HttpConfiguration() :
new
HttpConfiguration(http_config));
https_config.setRequestHeaderSize(mRequestHeaderSize);
https_config.setOutputBufferSize(32768);
https_config.addCustomizer(new
SecureRequestCustomizer());
// HTTPS connector
ServerConnector https =
new
ServerConnector(mServer,
new
SslConnectionFactory(sslContextFactory,
"http/1.1"),
new
HttpConnectionFactory(https_config));
https.setPort(mSecurePort);
https.setIdleTimeout(500000);
mServer.addConnector(https);
WebAppContext mWapContext = new
WebAppContext();
mWapContext.setAttribute(ServletContext.TEMPDIR, mLST);
mWapContext.setContextPath("/");
mWapContext.setDisplayName("[Server]");
mWapContext.setConfigurationClasses(new
String[]{"org.eclipse.jetty.annotations.AnnotationConfiguration","org.eclipse.jetty.webapp.WebXmlConfiguration"});
mWapContext.setLogUrlOnStart(true);
try
{
mWapContext.setBaseResource(Resource.newResource(mWapPath));
} catch
(IOException ignored) {
}
// Setup handlers
HandlerCollection mRootHandlers =
new
HandlerCollection();
// Handling Context(s)
ContextHandlerCollection mAppCtxHndCol =
new
ContextHandlerCollection();
mAppCtxHndCol.setHandlers(new
Handler[]{ mWapContext });
mRootHandlers.addHandler(mAppCtxHndCol);
// Install WebApp Provider
String mWebAppDir = mWapPath +
WEBAPPS_DIR;
WebAppProvider mAppProvider = new
WebAppProvider(){
@Override
protected
App createApp(String filename){
return super.createApp(filename);
}
};
mAppProvider.setMonitoredDirName(mWebAppDir);
/* The default descriptor is a web.xml format file that is applied to the context
* before the standard WEB-INF/web.xml. Defaults to WebAppContext.WEB_DEFAULTS_XML */
mAppProvider.setDefaultsDescriptor(null);
/* == Enable annotation processing. Servlet 3.0 API ==
*
* The 'web-app' element in the web.xml must contain
* the attribute: metadata-complete="false"
* So that the .war will be scanned for @ annotations for dependancy injection
*/
/* ScanInterval pause between scans in seconds, or 0 for no scan after the initial scan.*/
mAppProvider.setScanInterval(0);
/* For debug/testing */
mAppProvider.setExtractWars(true);
/* Classloader to use parent classes first, instead of bundeled ones. non-default.. */
// mAppProvider.setParentLoaderPriority(true);
/* Setup Deployment manager */
DeploymentManager mDeployMgr =
new
DeploymentManager();
mDeployMgr.addAppProvider(mAppProvider);
mDeployMgr.setContextAttribute(ServletContext.TEMPDIR, mLST);
mDeployMgr.setContexts(mAppCtxHndCol);
// Set Classloader of Context to be sane (needed for JSTL)
// JSP requires a non-System classloader, this simply wraps the
// embedded System classloader in a way that makes it suitable
// for JSP to use
ClassLoader jspClassLoader =
new
URLClassLoader(new
URL[0],
this.getClass().getClassLoader());
mWapContext.setClassLoader(jspClassLoader);
// Manually call JettyJasperInitializer on context startup
mWapContext.addBean(new
JspStarter(mWapContext));
/* Setup & Run server */
mServer.addBean(mDeployMgr);
mServer.setHandler(mRootHandlers);
try
{
mServer.start();
mServer.join();
} catch
(Exception e) {
e.printStackTrace();
}
}
}