Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.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
Html 使用嵌入式jetty和jersey构建web应用程序。。带请求调度_Html_Jersey_Embedded Jetty - Fatal编程技术网

Html 使用嵌入式jetty和jersey构建web应用程序。。带请求调度

Html 使用嵌入式jetty和jersey构建web应用程序。。带请求调度,html,jersey,embedded-jetty,Html,Jersey,Embedded Jetty,我正在设置一个带有嵌入式jetty和jersey的web应用程序。因为我对概念还比较陌生,所以很难加载示例网页index.html。当我将其定位为localhost:8989/myServlet时,我看到代码在servlet中流动。但是请求分派器总是返回null 请告诉我: 主要类别: import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org

我正在设置一个带有嵌入式jetty和jersey的web应用程序。因为我对概念还比较陌生,所以很难加载示例网页index.html。当我将其定位为localhost:8989/myServlet时,我看到代码在servlet中流动。但是请求分派器总是返回null

请告诉我:

主要类别:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder;


public class MainApp {
    public static void main(String[] args) throws Exception {
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");

        Server jettyServer = new Server(8989);
        jettyServer.setHandler(context);

        ServletHandler handler =new ServletHandler();
        handler.addServletWithMapping(MyServletHandler.class,"/myServlet");


        jettyServer.setHandler(handler);

        ServletHolder jerseyServlet = context.addServlet(
                org.glassfish.jersey.servlet.ServletContainer.class, "/*");
        jerseyServlet.setInitOrder(0);

        jerseyServlet.setInitParameter(
                "jersey.config.server.provider.classnames",
                Entry.class.getCanonicalName());

        try {
            jettyServer.start();
            jettyServer.join();
        } finally {
            jettyServer.destroy();
        }
    }
}
Myservlet类:

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class MyServletHandler extends HttpServlet {


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Control is in servlet");
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("index.html"); // this returns null. hence i am unable to request dispatch to view the html webpage.


    }

}

我使用Maven构建应用程序,并将index.html放在src/main/resources目录中,这是可行的,但您必须正确设置
ServletContext
,以便
request.getRequestDispatcher()
可以执行某些操作

首先,您的
ServletContextHandler
必须具有资源库设置

您必须设置一个
DefaultServlet
,以便正确返回请求分派器

您还必须正确使用嵌入式jetty,不要像那样直接使用
ServletHandler
。如果必须,请使用
ServletHolder
,否则直接使用
ServletContextHandler

下面是这种行为的一个例子

运行时,系统属性为
baseResource
,指向您有
index.html
的目录

package-jetty.dispatching;
导入java.io.IOException;
导入java.io.InputStream;
导入java.net.HttpURLConnection;
导入java.net.URI;
导入javax.servlet.RequestDispatcher;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.server.handler.DefaultHandler;
导入org.eclipse.jetty.server.handler.HandlerList;
导入org.eclipse.jetty.servlet.DefaultServlet;
导入org.eclipse.jetty.servlet.ServletContextHandler;
导入org.eclipse.jetty.servlet.ServletHolder;
导入org.eclipse.jetty.util.IO;
导入org.eclipse.jetty.util.resource.resource;
导入静态java.nio.charset.StandardCharsets.UTF_8;
公共类DispatchingToDefaultServletDemo
{
公共静态void main(字符串[]args)引发异常
{
DispatchingToDefaultServletDemo=新DispatchingToDefaultServletDemo();
尝试
{
demo.startServer();
demo.makeRequests();
}
最后
{
demo.stopServer();
}
}
专用服务器;
public void startServer()引发异常
{
服务器=新服务器(8989);
ServletContextHandler上下文=新的ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath(“/”);
//必须具有适当ServletContext的资源库(即使它指向JAR文件中的空URI目录)
setBaseResource(getBaseResource());
//不要直接使用ServletHandler!
addServlet(MyServletHandler.class,“/myServlet”);
//在ServletContextHandler上添加DefaultServlet last,以便能够为资源库中的内容提供服务。
//它必须命名为“default”(根据servlet规范)
ServletHolder defaultHolder=新的ServletHolder(“default”,DefaultServlet.class);
defaultHolder.setInitParameter(“dirAllowed”、“true”);
addServlet(defaultHolder,“/”;//这是默认的url模式
HandlerList handlers=new HandlerList();
addHandler(上下文);
handlers.addHandler(新的DefaultHandler());//始终是处理程序树中的最后一个
setHandler(处理程序);
server.start();
}
公共资源getBaseResource()引发IOException
{
字符串baseResourceLocation=System.getProperty(“baseResource”);
if(baseResourceLocation==null)
{
baseResourceLocation=System.getProperty(“user.dir”);
}
Resource=Resource.newResource(baseResourceLocation);
System.out.println(“基本资源是”+资源);
返回资源;
}
私有void stopServer()引发异常
{
server.stop();//使用.stop()而不是.destroy()
}
私有void makeRequests()
{
performGET(“/myServlet”);
performGET(“/”);
}
私有void performGET(字符串请求路径)
{
尝试
{
URI=server.getURI().resolve(请求路径);
System.out.println(“请求上车”+uri);
HttpURLConnection http=(HttpURLConnection)uri.toURL().openConnection();
System.out.println(“响应状态代码=“+http.getResponseCode());
try(InputStream in=http.getInputStream())
{
System.out.println(“响应主体:+IO.toString(in,UTF_8));
}
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}
公共静态类MyServletHandler扩展了HttpServlet
{
@凌驾
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException
{
RequestDispatcher=request.getRequestDispatcher(“/index.html”);
System.out.println(“请求调度器=“+requestDispatcher”);
转发(请求、响应);
}
}
}
输出

$ java -DbaseResource=/home/joakim/code/jetty/bases/listing-base/rez/welcomish/ -classpath <..snip..> jetty.dispatching.DispatchingToDefaultServletDemo

2019-04-18 15:15:15.595:INFO::main: Logging initialized @180ms to org.eclipse.jetty.util.log.StdErrLog
Base Resource is file:///home/joakim/code/jetty/bases/listing-base/rez/welcomish/
2019-04-18 15:15:15.678:INFO:oejs.Server:main: jetty-9.4.15.v20190215; built: 2019-02-15T16:53:49.381Z; git: eb70b240169fcf1abbd86af36482d1c49826fa0b; jvm 1.8.0_192-b12
2019-04-18 15:15:15.725:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
2019-04-18 15:15:15.726:INFO:oejs.session:main: No SessionScavenger set, using defaults
2019-04-18 15:15:15.727:INFO:oejs.session:main: node0 Scavenging every 660000ms
2019-04-18 15:15:15.736:INFO:oejsh.ContextHandler:main: Started o.e.j.s.ServletContextHandler@482f8f11{/,file:///home/joakim/code/jetty/bases/listing-base/rez/welcomish/,AVAILABLE}
2019-04-18 15:15:15.747:INFO:oejs.AbstractConnector:main: Started ServerConnector@3ffc5af1{HTTP/1.1,[http/1.1]}{0.0.0.0:8989}
2019-04-18 15:15:15.747:INFO:oejs.Server:main: Started @333ms
Requesting GET on http://127.0.1.1:8989/myServlet
request Dispatcher = Dispatcher@0x5d8c6ff2{null,/index.html}
  Response Status code = 200
  Response Body: <h1>My welcomish HTML</h1>

Requesting GET on http://127.0.1.1:8989/
  Response Status code = 200
  Response Body: <h1>My welcomish HTML</h1>

2019-04-18 15:15:15.827:INFO:oejs.AbstractConnector:main: Stopped ServerConnector@3ffc5af1{HTTP/1.1,[http/1.1]}{0.0.0.0:8989}
2019-04-18 15:15:15.827:INFO:oejs.session:main: node0 Stopped scavenging
2019-04-18 15:15:15.829:INFO:oejsh.ContextHandler:main: Stopped o.e.j.s.ServletContextHandler@482f8f11{/,file:///home/joakim/code/jetty/bases/listing-base/rez/welcomish/,UNAVAILABLE}

Process finished with exit code 0
$java-DbaseResource=/home/joakim/code/jetty/base/listing base/rez/welcomish/-classpath jetty.dispatching.DispatchingToDefaultServletDemo
2019-04-18 15:15:15.595:INFO::main:Logging在180ms时初始化为org.eclipse.jetty.util.log.StdErrLog
基本资源是file:///home/joakim/code/jetty/bases/listing-base/rez/welcomish/
2019-04-18 15:15:15.678:信息:oejs.服务器:main:jetty-9.4.15.v20190215;建成时间:2019-02-15T16:53:49.381Z;git:eb70b240169fcf1abbd86af36482d1c49826fa0b;jvm 1.8.0_192-b12
2019-04-18 15:15:15.725:信息:oejs会话:主要:Def