我有通常的设置:一个带有登录屏幕的webapp和一个小型Java类,它设置Jetty来启动应用程序。
在开发过程中,我们都会在每次更改代码后浪费几秒钟来登录,从而强制重启。 (不,JRebel没有帮助,因为它不会再次运行构造函数,因此它可能会遗漏一些更改。)
所以我想知道我是否可以这样修补Jetty设置:
如果我请求/index.jsp
,而不是去真正的JSP,它应该加载一个servlet,它填写典型开发用户的用户名和密码,登录,然后重定向到主JSP应用程序。
为了使一切安全,我会将此自动登录代码放入测试路径,因此无法意外部署。
现在的问题是:如何在Java代码中配置Jetty中的URL重定向/重写?出于显而易见的原因,我不想触及web.xml
。
答案 0 :(得分:0)
按照示例,我想出了这段代码:
private WebAppContext webapp;
private void configureAutoLogin() {
ServletHolder holder = webapp.getServletHandler().newServletHolder();
holder.setName("autologin");
holder.setClassName( AutoLoginServlet.class.getName() );
webapp.getServletHandler().addServlet(holder);
ServletMapping mapping = new ServletMapping();
mapping.setServletName(holder.getName());
String[] paths = { "/autologin" };
mapping.setPathSpecs( paths );
webapp.getServletHandler().addServletMapping(mapping);
}
为了让用户更加简单,我还创建了一个目录jetty/
,其中包含test.html
,开发人员可以在其中添加指向此类URL的链接。为确保无法意外部署此测试HTML页面,我将jetty/
目录添加到WebAppContext
的基本资源中:
File webAppDir = new File( "src/main/webapp" );
Resource webAppResource = new FileResource( webAppDir.toURI().toURL() );
Resource jettyDir = new FileResource( new File( "jetty" ).toURI().toURL() );
ResourceCollection resources = new ResourceCollection( webAppResource, jettyDir );
webapp.setBaseResource( resources );