我成功地将Jetty嵌入到测试应用程序中.它可以毫无问题地提供文件.现在我想知道Jetty是否可以提供其自己的Jar文件中的文件.
有谁知道这是否可能?
我想了解Jetty;
请告诉我:
1)什么时候使用Servlet和处理程序时更好?
2)我可以使用带有Servlet的连接器来实现"每个请求线程模型"吗?
谢谢!!!
我有一个嵌入式jetty服务器的应用程序,我就是这样开始的(放在main()中并使用eclipse启动):
Server server = new Server(port);
WebAppContext context = new WebAppContext();
context.setResourceBase("web/");
context.setDescriptor("web/WEB-INF/web.xml");
context.setConfigurations(new Configuration[]{
new AnnotationConfiguration(), new WebXmlConfiguration(),
new WebInfConfiguration(), new TagLibConfiguration(),
new PlusConfiguration(), new MetaInfConfiguration(),
new FragmentConfiguration(), new EnvConfiguration()});
context.setContextPath("/");
context.setParentLoaderPriority(true);
server.setHandler(context);
server.start();
server.join();
Run Code Online (Sandbox Code Playgroud)
我的web.xml看起来像这样(现在是空的,我不确定我是否可以完全删除它):
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="false"
version="3.0">
</web-app>
Run Code Online (Sandbox Code Playgroud)
我有一个简单的类设置如下:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns={"/test"})
public class TestServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/html/index.html").forward(request,response);
}
}
Run Code Online (Sandbox Code Playgroud)
当我在web.xml中使用传统的servlet映射时,我的应用程序工作正常.但是当我删除web.xml映射并使用注释时,我只能获得404.看起来它根本不是在扫描注释.控制台看起来像这样:
2012-08-01 …Run Code Online (Sandbox Code Playgroud) 我正在运行Jetty 7.2.2并希望限制它将处理的连接数,这样当它达到限制(例如5000)时,它将开始拒绝连接.
不幸的是,所有这些Connectors似乎只是继续并尽可能快地接受传入连接并将它们分派到配置的线程池.
我的问题是我在受限制的环境中运行,而且我只能访问8K文件描述符.如果我收到一堆连接,我可以快速耗尽文件描述符并进入不一致状态.
我有一个选择是返回一个HTTP 503 Service Unavailable,但仍然需要我接受并响应连接 - 我可能会通过编写servlet过滤器来跟踪传入连接的数量.
有更好的解决方案吗?
我有一个多模块maven项目,其中一个模块用于分发.
Project \
| moduleA \
| moduleB \
| ...
| dist-module \
Run Code Online (Sandbox Code Playgroud)
该发行版包含一个我想轻松执行的可执行jar.但是,要执行它,我必须输入类似的内容:
java -jar dist-module/target/dist-module-1.0-SNAPSHOT-full-dist/myJar.jar
Run Code Online (Sandbox Code Playgroud)
简单地键入:
mvn exec:java \ OR
mvn exec:exec
Run Code Online (Sandbox Code Playgroud)
不幸的是,我找不到让java目标执行.jar的方法.exec目标实际上是这样做的,但是有一个问题:jar包含一个嵌入式jetty服务器,并且由于exec的工作方式(不使用与maven相同的JVM),服务器不会终止,除非我终止进程手动,这同样令人烦恼.
有关如何使用maven执行此操作的任何建议?
编辑:
为了澄清,该命令主要用于简单的手动烟雾测试; 读取日志输出并确保程序在其分发环境中正确启动.因此,它应该是一个阻塞调用,ctrl-c终止服务器和maven.
嵌入式服务器专门用于运行一些特定的应用程序,并不会自动重新加载它们.因此,不需要长时间独立于maven运行服务器.
我正在启动现有的Spring Web应用程序,因此生成的war文件嵌入了一个Jetty Web服务器.我想尽可能地坚持现有配置以限制回归.
这是现有的web.xml:
<web-app id="fbecart-webapp" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.fbecart.ApplicationConfiguration</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>spring-dispatcher</servlet-name>
<servlet-class>com.fbecart.MyDispatcherServlet</servlet-class>
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.fbecart.SpringDispatcherServletConfiguration</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>GzipFilter</filter-name>
<filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
这是我的主要课程JettyApplication.java …
configuration web.xml embedded-jetty servlet-filters spring-boot
设置一个请求客户端身份验证的嵌入式Jetty服务器非常容易:只需要添加语句SslContextFactory.setNeedClientAuth(true); 配置服务器时的ssl上下文.在服务器的信任库中拥有其证书的任何客户端都将能够与服务器建立TLS连接.
但是,我需要知道所有可能的可信客户端的哪个客户端正在发出请求; 换句话说,我需要知道此连接中使用的客户端证书,特别是在处理程序中.有谁知道如何访问此证书或甚至可能?
在社区中,我尝试在升级生产代码之前使用 Spring boot 3 和 Jetty 服务器运行一个小示例,但我收到此错误java.lang.ClassNotFoundException: jakarta.servlet.http.HttpSessionContext并且服务无法启动。这是我的 Gradle 配置。
plugins {
id 'java'
id 'idea'
id 'org.springframework.boot' version '3.0.1'
id 'io.spring.dependency-management' version '1.1.0'
}
idea {
module {
downloadJavadoc = false
downloadSources = false
}
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-jetty'
implementation('org.springframework.boot:spring-boot-starter-web') {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test' …Run Code Online (Sandbox Code Playgroud) 我想使用嵌入式Jetty创建一个应用程序.不幸的是,我找不到任何关于我需要做什么jar文件的信息.maven存储库中有几个(http://repo2.maven.org/maven2/org/eclipse/jetty/aggregate/).但是jetty-server,jetty-server-all和jetty-webapp之间的区别是什么?这些是嵌入式用例中我想要的吗?
所以我试图将jetty嵌入到我的Web应用程序中,这样如果我将它打包成jar,就可以运行jar文件而不必担心配置服务器.但是,我在设置主类时遇到了一些问题,因此jetty可以访问我的资源类.我看过教程,但他们没有给我我正在寻找的东西.这就是我到目前为止所拥有的.
package pojo;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
public class Main {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
context.setContextPath("/");
ServletHolder h = new ServletHolder(new DefaultServlet());
h.setInitParameter("javax.ws.rs.Application","resources.DBCollection");
context.addServlet(h, "/*");
server.setHandler(context);
server.start();
server.join();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将它映射到这个类:
package resources;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;
import pojo.Party;
@Path("/parties")
public class DBCollection {
@Context
UriInfo …Run Code Online (Sandbox Code Playgroud) embedded-jetty ×10
jetty ×7
java ×4
jar ×2
maven ×2
spring-boot ×2
annotations ×1
build ×1
jsp ×1
servlets ×1
spring ×1
ssl ×1
web.xml ×1