我正在尝试构建一个带有嵌入式Jetty的简单演示应用程序,该应用程序提供来自"html"目录的静态文件,该目录是当前工作目录的子目录.我们的想法是,包含演示jar和内容的目录可以移动到新位置并仍然有效.
我尝试过以下各种变体,但我一直在使用404.
ServletContextHandler context =
new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.getInitParams().put(
"org.eclipse.jetty.servlet.Default.resourceBase", "html");
context.addServlet(new ServletHolder(new DefaultServlet()), "/html");
Server jetty = new Server(8080);
jetty.setHandler(context);
jetty.start();
Run Code Online (Sandbox Code Playgroud)
更新:这是Jetty教程中记录的解决方案.如正确答案所述,它使用的是a ResourceHandler而不是ServletContextHandler:
Server server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(8080);
server.addConnector(connector);
ResourceHandler resource_handler = new ResourceHandler();
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(new String[]{ "index.html" });
resource_handler.setResourceBase(".");
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });
server.setHandler(handlers);
server.start();
server.join();
Run Code Online (Sandbox Code Playgroud) 解决方案:这是我的错误.
正确的方法是response.body().string()而不是response.body.toString()
我使用Jetty servlet,URL http://172.16.10.126:8789/test/path/jsonpage,每次请求此URL将返回
{"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}
Run Code Online (Sandbox Code Playgroud)
它显示在将URL输入浏览器时,不幸的是,当我请求时,它显示的是除了json字符串之外的那种内存地址Okhttp.
TestActivity? com.squareup.okhttp.internal.http.RealResponseBody@537a7f84
Run Code Online (Sandbox Code Playgroud)
Okhttp代码我使用:
OkHttpClient client = new OkHttpClient();
String run(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮忙吗?
我用嵌入式Jetty创建了一个RCP插件,如下所示:
1)在plugin.xml - > Dependencies中,我添加了以下内容:
org.eclipse.equinox.http.jetty
org.eclipse.equinox.http.registry
org.mortbay.jetty.server
javax.servlet
Run Code Online (Sandbox Code Playgroud)
2)在plugin.xml - > Extensions中,我添加了一个Servlet扩展点(org.eclipse.equinox.http.registry.servlet)
class: TemperatureServlet
alias:/temperature
Run Code Online (Sandbox Code Playgroud)
该TemperatureServlet看起来是这样的:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TemperatureServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doGet Called");
resp.sendRedirect("Convertor.jsp");
}
}
Run Code Online (Sandbox Code Playgroud)
Convertor.jsp文件如下所示:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Spring 3.1和嵌入式Jetty 8服务器创建一个没有任何XML配置的简单webapp.
但是,我正在努力让Jetty认识到我对Spring WebApplicationInitializer接口的实现.
项目结构:
src
+- main
+- java
| +- JettyServer.java
| +- Initializer.java
|
+- webapp
+- web.xml (objective is to remove this - see below).
Run Code Online (Sandbox Code Playgroud)
上面的Initializer类是WebApplicationInitializer的一个简单实现:
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.springframework.web.WebApplicationInitializer;
public class Initializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
System.out.println("onStartup");
}
}
Run Code Online (Sandbox Code Playgroud)
同样JettyServer是嵌入式Jetty服务器的简单实现:
import org.eclipse.jetty.annotations.AnnotationConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.WebAppContext;
public class JettyServer {
public static void main(String[] args) throws …Run Code Online (Sandbox Code Playgroud) 我讨厌问这么模糊的问题,但我很难找到一个简单的例子.这是我到目前为止所拥有的:
public class JettyWebSocketServlet extends WebSocketServlet{
@Override
public void configure(WebSocketServletFactory factory) {
factory.register(MyEchoSocket.class);
}
}
@WebSocket
public class MyEchoSocket {
@OnWebSocketMessage
public void onText(WebSocketConnection conn, String message) {
System.out.println("text: " + message);
try {
conn.write(null, new FutureCallback(), "got: " + message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以找到的嵌入式Jetty示例总是显示如下所示,以启动Server实例运行,但我不知道如何实例化我的WebSocketServlet.
Server server = new Server(8080);
server.start();
server.join();
Run Code Online (Sandbox Code Playgroud)
如何创建可以处理WebSocket连接请求的嵌入式服务器?
我试图用我的Web应用程序生成一个战争以及一个带有嵌入式jetty的自包含jar文件.对于嵌入式jetty(jar文件分发),我添加一个servlet,如下所示:
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
context.addServlet(new ServletHolder(new HelloServlet()),"/*");
server.start();
server.join();
}
Run Code Online (Sandbox Code Playgroud)
war文件分发使用web.xml文件,该文件在web-app部分中包含以下内容:
<servlet>
<servlet-class>com.example.HelloServlet</servlet-class>
<servlet-name>SimplestServer</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
这有效.但是,我想摆脱两种方法之间的重复.即,当我添加一个新的servlet时,我想要只在一个位置配置它.我可以从嵌入式jetty加载和使用web.xml文件吗?
我正在将jetty嵌入到我的应用程序中,并试图找出如何添加servlet过滤器(用于cookie处理).wiki和javadoc没有说清楚,我错过了什么:
Server server = new Server(port);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
FilterHolder f = new FilterHolder(new AuthorisationFilter());
context.addFilter(... f ...); // ?????
context.addServlet(new ServletHolder(new TestServlet()), "/");
Run Code Online (Sandbox Code Playgroud)
我将Jetty(版本7.4.5.v20110725)嵌入到java应用程序中.我使用Jetty的WebAppContext在./webapps/jsp/中提供JSP页面,但如果我访问localhost:8080/jsp /我获取Jetty的目录列表,以获取./webapps/jsp/的全部内容.我已经尝试在WebAppContext上将dirAllowed参数设置为false,并且它不会更改目录列表行为.
在ResourceHandler上禁用目录列表就是将false传递给setDirectoriesListed,按预期工作.有人可以告诉我如何为WebAppContext执行此操作吗?
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;
public class Test {
public static void main(String[] args) throws Exception {
Server server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setHost("127.0.0.1");
connector.setPort(8080);
server.addConnector(connector);
// Create a resource handler for static content.
ResourceHandler staticResourceHandler = new ResourceHandler();
staticResourceHandler.setResourceBase("./webapps/static/");
staticResourceHandler.setDirectoriesListed(false);
// Create context handler for static resource handler.
ContextHandler staticContextHandler = new ContextHandler();
staticContextHandler.setContextPath("/static");
staticContextHandler.setHandler(staticResourceHandler);
// Create WebAppContext for …Run Code Online (Sandbox Code Playgroud) 我想了解Jetty;
请告诉我:
1)什么时候使用Servlet和处理程序时更好?
2)我可以使用带有Servlet的连接器来实现"每个请求线程模型"吗?
谢谢!!!
embedded-jetty ×10
jetty ×9
java ×8
eclipse-rcp ×1
http ×1
java-ee ×1
jetty-8 ×1
jsf ×1
jsp ×1
maven ×1
okhttp ×1
servlets ×1
spring-mvc ×1
websocket ×1