Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jetty以编程方式向web上下文添加web片段_Java_Servlets_Web_Jetty_Web Fragment - Fatal编程技术网

Java Jetty以编程方式向web上下文添加web片段

Java Jetty以编程方式向web上下文添加web片段,java,servlets,web,jetty,web-fragment,Java,Servlets,Web,Jetty,Web Fragment,我已经开始使用嵌入式Jetty服务器来启动一些第三方战争。 所以我使用WebAppContext: Server server = new Server(port); WebAppContext ctx = new WebAppContext(); ctx.setContextPath("/samplePath"); ctx.setWar(<PATH_TO_WAR>); server.setHandler(ctx); server.start(); server.join(); S

我已经开始使用嵌入式Jetty服务器来启动一些第三方战争。 所以我使用WebAppContext:

Server server = new Server(port);
WebAppContext ctx = new WebAppContext();
ctx.setContextPath("/samplePath");
ctx.setWar(<PATH_TO_WAR>);
server.setHandler(ctx);
server.start();
server.join();
Server服务器=新服务器(端口);
WebAppContext ctx=新的WebAppContext();
ctx.setContextPath(“/samplePath”);
ctx.setWar();
setHandler(ctx);
server.start();
join();
这段代码是有效的(为了简洁起见,我省略了异常处理),但是现在我想在war中添加一些功能,我希望这些功能保持不变(我的意思是,不要提取更改并再次压缩)。 我的功能应包括与某些自定义SSO解决方案的集成,该解决方案应添加以下内容:

  • 上下文侦听器
  • 过滤器
  • 这些筛选器和侦听器应该读取的某些上下文参数变量定义
我无法更改此SSO解决方案,因为它不是由我们的团队开发的,我们宁愿将其视为第三方

所以我认为用web片段将所有这些添加到模块中是最好的方法

我的问题是:让Jetty的web上下文“意识到”这个web片段的最佳方法是什么?一个工作的代码片段就好了:)

当然,如果有比web片段更好的替代方法,我很乐意知道

我目前使用的Jetty版本是(从我的pom.xml中):9.2.10.v20150310


提前多谢

以下是指定web应用程序和筛选器的方法

import java.io.IOException;
import java.util.EnumSet;

import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.webapp.WebAppContext;

public class MultipleHandler {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Server server = new Server();
        ServerConnector connectorA = new ServerConnector(server);
        connectorA.setPort(55);
        connectorA.setName("connA"); // connector name A
        server.addConnector(connectorA);
        HandlerCollection contexts = new HandlerCollection();
        server.setHandler(contexts);
        // A WebApp
        WebAppContext appA = new WebAppContext();
        appA.setContextPath("/samplePath");
        appA.setWar("<warFilePath>");
        appA.setVirtualHosts(new String[] { "@connA" }); // connector name A
        contexts.addHandler(appA);

        //Filter handler
        ServletHandler handler = new ServletHandler();
        handler.addFilterWithMapping(DoWork.class, "/filter",
                EnumSet.of(DispatcherType.REQUEST));
        contexts.addHandler(handler);       

        try {
            server.start(); 
            server.join(); 
        } catch (Throwable t) {
            t.printStackTrace(System.err);
        }

    }


    public static class DoWork implements Filter {

        @Override
        public void destroy() {
            // TODO Auto-generated method stub

        }

        @Override
        public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
             System.out.print("Request filtered");

        }

        @Override
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub

        }

    }

}
import java.io.IOException;
导入java.util.EnumSet;
导入javax.servlet.DispatcherType;
导入javax.servlet.Filter;
导入javax.servlet.FilterChain;
导入javax.servlet.FilterConfig;
导入javax.servlet.ServletException;
导入javax.servlet.ServletRequest;
导入javax.servlet.ServletResponse;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.server.ServerConnector;
导入org.eclipse.jetty.server.handler.HandlerCollection;
导入org.eclipse.jetty.servlet.ServletHandler;
导入org.eclipse.jetty.webapp.WebAppContext;
公共类多处理器{
/**
*@param args
*/
公共静态void main(字符串[]args){
服务器=新服务器();
ServerConnector connectorA=新的ServerConnector(服务器);
连接端口(55);
connectorA.setName(“connA”);//连接器名称A
addConnector(connectorA);
HandlerCollection上下文=新建HandlerCollection();
setHandler(上下文);
//网络应用程序
WebAppContext appA=新的WebAppContext();
appA.setContextPath(“/samplePath”);
appA.setWar(“”);
appA.setVirtualHosts(新字符串[]{“@connA”});//连接器名称A
addHandler(appA);
//过滤器处理器
ServletHandler=新的ServletHandler();
handler.addFilterWithMapping(DoWork.class,“/filter”,
EnumSet.of(DispatcherType.REQUEST));
addHandler(handler);
试一试{
server.start();
join();
}捕获(可丢弃的t){
t、 printStackTrace(System.err);
}
}
公共静态类DoWork实现过滤器{
@凌驾
公共空间销毁(){
//TODO自动生成的方法存根
}
@凌驾
public void doFilter(ServletRequest arg0、ServletResponse arg1、FilterChain arg2)引发IOException、ServletException{
系统输出打印(“请求过滤”);
}
@凌驾
public void init(FilterConfig arg0)抛出ServletException{
//TODO自动生成的方法存根
}
}
}

一个简单的问题,您有一个正在运行的web应用程序,您需要在不影响war文件的情况下再包含几个
servlet类,对吗?是的,没错。不过,我不想只添加servlet。我需要添加筛选器、上下文侦听器和上下文路径变量。对不起,这对我没有帮助。筛选器不是问题,因为可以通过向WebAppContext调用addFilter来正确设置筛选器。与此不同,我找不到添加ContextFilter和Context参数变量的方法。这就是问题所在。我不能接受这个答案,抱歉,你当然可以。如果您没有看到,谢谢,是的,我没有看到,但是Jetty的API使用java.util.EventListener,它没有实现javax.servlet.ServletContextListener,因此我无法从该侦听器的方法访问servlet上下文。我正在寻找一种解决方案,允许我将web FragementJAR放在文件系统的某个文件夹中,jetty将使用它用来加载war本身的相同类加载器加载它。