使用jetty,您可以轻松生成“html”响应,导入外部文件,如:
<head>
<link rel="stylesheet" type="text/css" href="myStyle.css">
<script src="myScript.js"></script>
<head>
但是,当你嵌入jetty时,你在哪里放myStyle.css
和myScript.js
?
特别是当jetty服务器在一个不是你写的大型OpenSource项目中时?
servlet.doGet中有一个很好的out.println(???);
可以提供答案,或类似的东西吗?
答案 0 :(得分:2)
我认为这取决于你如何打包你的罐子。例如,如果您将它打包成一个jar,那么您自己的代码和依赖项中的所有类和资源都会被分解为jar / war。然后,您必须相应地将webcontext设置为Jetty。使用Maven和Gradle的几个例子可能会发出一些亮点:
http://open.bekk.no/embedded-jetty-7-webapp-executable-with-maven
https://github.com/jhannes/java-ee-turnkey/
鉴于后一个例子,它可以解决这些问题:
URL[] urls = ((URLClassLoader) AbstractServerMain.class.getClassLoader()).getURLs();
WebAppContext context;
if (urls.length == 1 && urls[0].getFile().endsWith(".war")) {
context = new WebAppContext(urls[0].getFile(), contextRoot);
} else {
context = new WebAppContext("src/main/webapp", contextRoot);
}
这将确保您也可以从Eclipse / IntelliJ等运行。
第一个示例使用ProtectionDomain
// Get the war-file
ProtectionDomain protectionDomain = Main.class.getProtectionDomain();
String warFile = protectionDomain.getCodeSource().getLocation().toExternalForm();
String currentDir = new File(protectionDomain.getCodeSource().getLocation().getPath()).getParent();
// Add the warFile (this jar)
WebAppContext context = new WebAppContext(warFile, contextPath);
从Eclipse / IntelliJ运行时,这不太友好。
如果您选择不执行一个jar并转到Gradle应用程序插件或Maven appassembler,您可能需要将资源复制到“Main-jar”(启动Jetty的那个)或设置webcontext到包含资源的jar。现在揭示我不太熟悉如何......