我试图在Jetty文档示例之后在嵌入式Jetty服务器中实现一个简单的重写规则.
我想要请求/admin/重写到/admin.html.目前,如果我要求/admin/我得到404错误,/admin.html但未找到.但如果我/admin.html直接要求,它的确有效!
stackoverflow上有2个其他类似的帖子,但没有问题的答案!
这是代码:
WebAppContext _ctx = new WebAppContext();
_ctx.setContextPath("/");
_ctx.setDefaultsDescriptor(JETTY_DEFAULTS_DESCRIPTOR);
_ctx.setParentLoaderPriority(true);
_ctx.setWar(getShadedWarUrl());
_ctx.setResourceBase(getShadedWarUrl());
RewriteHandler rewriter = new RewriteHandler();
rewriter.setRewritePathInfo(true);
rewriter.setRewriteRequestURI(true);
rewriter.setOriginalPathAttribute("requestedPath");
RewritePatternRule admin = new RewritePatternRule();
admin.setPattern("/admin/");
admin.setReplacement("/admin.html");
admin.setTerminating(true); // this will stop Jetty from chaining the rewrites
rewriter.addRule(admin);
_ctx.setHandler(rewriter);
HandlerCollection _handlerCollection = new HandlerCollection();
_handlerCollection.setHandlers(new Handler[] {_ctx});
server.setHandlers(_result);
Run Code Online (Sandbox Code Playgroud) 我正在研究一个项目,我正在尝试创建一个服务器,监听端口8082上的本地主机地址(我已经预留了8081与另一台服务器)
public class Class2HTTPServer {
public static void main(String[] args) {
Class1 object1= new Class1 (300);// parameter I need for other stuff
Class2 object2= new Class2 (300,object1,5); // parameters for other unrelated stuff
int listen_on_port = 8082;
Class2HTTPMessageHandler handler = new Class2HTTPMessageHandler (
object2);
String server_port_string = System.getProperty(SystemConstants.PROPERTY_KEY_SERVER_PORT);
if(server_port_string != null) {
try {
listen_on_port = Integer.parseInt(server_port_string);
listen_on_portfs = Integer.parseInt(server_port_string);
} catch(NumberFormatException ex) {
System.err.println(ex);
}
}
ComponentHTTPServerUtility.createServer(listen_on_port, handler);
}
}
Run Code Online (Sandbox Code Playgroud)
这是ComponentHTTPServerUtility类:
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import org.eclipse.jetty.server.Server; …Run Code Online (Sandbox Code Playgroud) 我看到一个奇怪的情况,使用Java 8u45的小输出缓冲区和java.util.Deflater.deflate(byte[] b, int off, int len, int flush)使用小输出缓冲区的方法.
(我正在开发一些与WebSocket即将推出的permessage-deflate扩展相关的低级网络代码,所以小缓冲区对我来说是现实的)
示例代码:
package deflate;
import java.nio.charset.StandardCharsets;
import java.util.zip.Deflater;
public class DeflaterSmallBufferBug
{
public static void main(String[] args)
{
boolean nowrap = true;
Deflater deflater = new Deflater(Deflater.DEFAULT_COMPRESSION,nowrap);
byte[] input = "Hello".getBytes(StandardCharsets.UTF_8);
System.out.printf("input is %,d bytes - %s%n",input.length,getHex(input,0,input.length));
deflater.setInput(input);
byte[] output = new byte[input.length];
// break out of infinite loop seen with bug
int maxloops = 10;
// Compress the data
while (maxloops-- > 0)
{
int compressed …Run Code Online (Sandbox Code Playgroud) 我想部署带有嵌入式Jetty服务器的Java Netbeans Webapp; 服务器本身工作,但我总是得到以下错误:
我在网上搜索了大量的例子,配置并重新配置了我的web.xml; 虽然我的配置似乎很好,但我无法让它工作.
我应该指出,当我使用内置的Glassfish服务器从whithin Netbeans运行应用程序时,它工作正常,这告诉我web.xml可能配置得很好.
有人能帮忙吗?
我的代码如下.
PS我知道它已被问过,但这些例子对我来说也不起作用.
项目结构:
WebContext设置:
import org.eclipse.jetty.webapp.WebAppContext;
public class AppContextBuilder {
private WebAppContext webAppContext;
public WebAppContext buildWebAppContext() {
webAppContext = new WebAppContext();
webAppContext.setDescriptor(webAppContext + "/WEB-INF/web.xml");
webAppContext.setResourceBase("src/main/webapp");
webAppContext.setContextPath("/Holmes");
return webAppContext;
}
}
Run Code Online (Sandbox Code Playgroud)
JettyServer.java:
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
public class JettyServer {
private Server server;
public JettyServer() {
this(8585);
}
public JettyServer(Integer runningPort) {
server = new Server(runningPort);
}
public void setHandler(ContextHandlerCollection contexts) {
server.setHandler(contexts);
}
public void start() throws Exception {
server.start(); …Run Code Online (Sandbox Code Playgroud) 我遇到了这个问题并且在任何地方找到答案都有些困难所以我想我会在这里为未来的程序员输入它.
在Jetty 9中,如果您尝试在会话对象上设置最大消息大小以处理大数据包,则它将无法工作.如果您的客户端尝试发送大数据,您仍将断开连接.我在谈论这个对象的setMaximimumMessageSize:http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/websocket/api/Session.html
相反,您需要做的是在从WebSocketServletFactory获取的策略对象上设置最大消息大小.
public final class MyWebSocketServlet extends WebSocketServlet
{
private static final long MAX_MESSAGE_SIZE = 1000000;
@Override
public void configure(WebSocketServletFactory factory)
{
factory.getPolicy().setMaxMessageSize(MAX_MESSAGE_SIZE);
factory.setCreator(new MyWebSocketCreator());
}
}
Run Code Online (Sandbox Code Playgroud)
这将按预期工作,您的服务器将能够处理大到您设置的最大大小的邮件.
我刚刚和Mavericks一起更新了我的OSX,现在我在使用apache和Jetty时出错了.它曾经将我的example.com域直接映射到localhost.
现在看来,运行我的应用程序服务器我必须明确指定端口来命中我的服务器.(例如example.com:8080)
当我跑到命令之下时.
sudo apachectl -e debug
Run Code Online (Sandbox Code Playgroud)
我会得到的
[debug] mod_so.c(246): loaded module jk_module
(48)Address already in use: make_sock: could not bind to address [::]:80
(48)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Run Code Online (Sandbox Code Playgroud)
我运行了很多diff命令来杀死所有httpd进程以及正在侦听此端口的端口.
ex. sudo lsof -i :80
httpd 946 root 5u IPv6 0xe0c8ad50898bcf0f 0t0 TCP *:http (LISTEN)
httpd 947 _www 5u IPv6 0xe0c8ad50898bcf0f 0t0 TCP *:http (LISTEN)
httpd 949 _www 5u IPv6 0xe0c8ad50898bcf0f 0t0 TCP *:http (LISTEN)
httpd 954 _www …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用嵌入式Jetty服务器.我只想根据请求路径将请求映射到不同的servlet.
创建ServletHandler和添加servlet与创建和添加servlet相比有什么区别ServletContextHandler?
例如:
//how is this different...
ServletHandler handler = new ServletHandler();
handler.addServletWithMapping(MyServlet.class, "/path");
//from this?
ServletContextHandler contextHandler = new ServletContextHandler();
contextHandler.addServlet(MyServlet.class, "/path");
Run Code Online (Sandbox Code Playgroud) 我还没有找到任何解决方案.它似乎Jetty还不支持此功能.我可能错了所以请开心.
我有一个非常简单的Java客户端连接到Java服务器localhost:8080.我想在它们之间添加一个透明的代理,以模拟我们在公司的专用网络中可以找到的内容.
使用cxf创建JAX-RS端点时,我间接启动码头实例
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
sf.setResourceClasses(HelloWorldResource.class);
sf.setResourceProvider(HelloWorldResource.class, new SingletonResourceProvider(new HelloWorldResource()));
sf.setAddress("http://localhost:9000/");
sf.create();
Run Code Online (Sandbox Code Playgroud)
这很好,但是当通过CXF启动码头线程池minThreads和maxThreads时,我该如何以编程方式配置其大小?
我正在将 Jetty9 更新到 Jetty11。我将包从 javax.servlet 更新为 jakarta.servlet,因为 servlet 5.0 是 Jetty11 的先决条件。但问题是当我使用 commons-fileupload`-1.4.jar 时,因为它仍在使用 java.servlet 包。
javax.servlet.http.HttpServletRequest.ServletFileUpload.isMultipartContent(request)
Run Code Online (Sandbox Code Playgroud)
上述方法需要来自 java.servlet 包的参数。
commons-fileupload 的最新版本 - https://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22commons-fileupload%22%20AND%20g%3A%22commons-fileupload%22
我们有什么办法可以克服这个问题吗?