今天碰到问题了。
在maven搭建的工程中,使用jetty做热部署,修改了演示文件无法保存,蛋疼了~~你说就改下静态文件还不让,非得要关掉jetty后修改保存!好事郁闷,google一下吧,哈哈
一大堆这样的问题。
1 首先找到了下边的描述
jetty启动后,如果修改javascript文件,将不能保存,使调试很麻烦。这是因为使用了CACHE,JETTY说是WINDOWS下的一个限制。可以通过如下方法修正:
解压出jetty.jar中的org/mortbay/jetty/webapp/webdefault.xml文件,将这一选项由true改为false,另存到src/main/resources目录,或者其它自选目录。
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>true</param-value> <!-- change to false -->
</init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>true</param-value> <!-- change to false -->
</init-param>
把修改后的webdefault.xml文件跟pom.xml放在一起
修改pom.xml里的Jetty Plugin的配置,加入webdefault.xml
...
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.7</version>
<configuration>
<contextPath>/</contextPath>
<webDefaultXml>webdefault.xml</webDefaultXml>
...
</configuration>
...
</plugin>
...
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.7</version>
<configuration>
<contextPath>/</contextPath>
<webDefaultXml>webdefault.xml</webDefaultXml>
...
</configuration>
...
</plugin>
...
但是,照做不行,报错了,请看错误
- java.lang.ClassNotFoundException: org.mortbay.jetty.servlet.DefaultServlet
- at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
- at java.security.AccessController.doPrivileged(Native Method)
- at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
- at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:428)
- at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:381)
很蛋疼吧,没有找到类,那么这个类是什么,仔细观察,是叫jetty包下的。
但是我们用的版本是什么呢 7.6
请注意了,这个时候的jetty 已经投入到eclipse的怀抱中了。哈哈
所以当然在公司内部使用groupId和ArtifactId也发生了变化肯定就变了啊
修改webdefault.xml文件
- <servlet>
- <servlet-name>default</servlet-name>
- <!-- <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class> -->
- <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
- <init-param>
- <param-name>useFileMappedBuffer</param-name>
- <param-value>false</param-value>
- </init-param>
- <load-on-startup>0</load-on-startup>
- </servlet>
问题解决
附上项目中使用的server 代码
public static final String BASE_URL = "http://localhost:8888/"; public static void main(String[] args) throws Exception { try { Server server = buildNormalServer(8888, "/"); server.start(); server.join(); System.out.println("Server running at " + BASE_URL); System.out.println("Hit Enter to reload the application"); // 等待用户输入回车重载应用. while (true) { char c = (char) System.in.read(); if (c == '\n') { System.out.println("Application reloading"); server.stop(); server = buildNormalServer(8888, "/"); server.start(); server.join(); System.out.println("Application reloaded"); } } } catch (Exception e) { e.printStackTrace(); System.exit(-1); } } /** * 创建用于正常运行调试的Jetty Server, 以src/main/webapp为Web应用目录. */ public static Server buildNormalServer(int port, String contextPath) { Server server = new Server(port); WebAppContext webContext = new WebAppContext("./src/main/webapp", contextPath); webContext.setDefaultsDescriptor("./webdefault.xml"); webContext.setClassLoader(Thread.currentThread().getContextClassLoader()); server.setHandler(webContext); server.setStopAtShutdown(true); return server; }
相关推荐
然而,在使用Maven Jetty插件进行项目构建和部署时,可能会遇到一个常见问题:当修改了HTML、CSS或JavaScript文件后,这些文件被浏览器加载后会出现“死锁”现象,导致文件无法被进一步修改和保存。 #### 问题分析 ...
在给定的压缩包文件`StartJetty`中,可能包含了实现上述步骤的Java源代码,你可以根据自己的需求进行修改,如设置不同的端口、添加更多的Servlet或过滤器、配置日志等。这样的启动脚本对于快速启动和测试本地Web应用...
Tomcat的虚拟目录主要通过修改`conf/server.xml`文件来实现。在`<Host>`元素下添加`<Context>`元素来定义新的虚拟目录。例如: ```xml <!-- 添加虚拟目录 --> ``` 这里的`path`属性定义了虚拟目录的URL路径,`...
通过访问`http://localhost:8001/pdfexample/example.htm`,用户可以在浏览器中查看这个示例,展示了Jetty作为Web服务器的能力,它可以服务于HTML页面和其他类型的静态文件。 总的来说,Jetty 9.2.3是一个功能强大...
静态部署是指将应用程序文件直接放置在Jetty的`webapps`目录下,Jetty会在启动时自动检测并部署这些应用程序。 **5.3 动态热部署** 除了静态部署外,Jetty还支持动态热部署,即在Jetty运行时动态地添加、删除或...
Jetty支持WebSocket、HTTP/2、连接池、静态文件缓存等多种高级特性。你还可以通过模块化扩展Jetty的功能,例如添加对JSP的支持。 总的来说,Jetty以其轻量、高效和灵活的特性,在Java Web开发中占有一席之地。无论...
- 静态文件服务:Jetty可以高效地处理静态资源请求,如HTML、CSS、JavaScript等。 - WebSocket支持:Jetty提供了对WebSocket协议的全面支持,使得双向通信成为可能。 - SSL/TLS:Jetty可以配置为支持HTTPS,提供安全...
7. **启动新版本**:使用新版Jetty启动服务器,检查日志输出以确保所有组件正常工作。 8. **测试**:全面测试应用程序的功能和性能,确保一切正常。这包括静态资源、Servlet、过滤器、监听器、WebSocket、安全设置...
Handler可以通过组合的方式来实现复杂的功能,例如静态文件服务、动态内容生成等。 **3.4 Server和ThreadPool** - **Server**:作为Jetty的核心管理组件,负责启动和停止Jetty服务器,以及管理各个子组件。 - **...
10. 扩展性:Jetty的设计允许通过插件机制轻松扩展功能,如静态文件服务、JMX监控、Jetty-Maven插件等,满足各种应用场景的需求。 在实际项目中,结合JDK7的特性和Jetty的功能,可以构建高效、灵活的Web服务。而...
4. **配置与使用**:在Jetty 6.1.26中,可以通过修改`etc/jetty.xml`或`etc/webdefault.xml`等配置文件来定制服务器行为。启动脚本`jetty.sh`可以配置JVM参数和服务器选项。 5. **Servlet支持**:Jetty 6.1.26支持...
修改后,只需保存文件,Jetty会自动重新加载变化,无需重启服务器,提高开发效率。 7. 部署: 当开发完成并准备部署时,可以使用Maven的`package`目标打包成WAR文件,然后将此文件部署到生产环境的Jetty服务器或...
Jetty启动时会自动检测并启动这些应用,上下文路径默认为文件夹名或WAR文件名(如果名为`root`,则上下文路径为`/`)。静态部署意味着一旦服务器启动,就不会再检查`webapps`目录的更改,除非服务器重启。 2. **...
Maven Jetty插件的一大优势是支持热部署,即在代码修改后,无需重启服务器即可看到改动的效果。当项目中的源文件发生变化时,插件会自动重新编译并更新到Jetty服务器。 ** WebApp目录结构 ** 在提到的"WebApp"这个...
6. **资源管理**:Jetty插件可以管理Web应用所需的静态资源,如HTML、CSS、JavaScript文件,以及图片和图标(如压缩包中的`icons`目录)。 7. **库依赖**:`lib`目录通常包含插件运行所需的各种依赖库,确保Jetty能...
这是因为Jetty支持观察文件系统变化并自动重新加载修改过的类或资源,极大地提升了开发效率。对于快速迭代的项目,这种特性非常关键,可以避免频繁的重启操作浪费时间。 Jetty的模块化设计意味着你可以根据项目需求...
对于目录结构,创建一个与WAR文件同名的目录,并将应用的静态文件、WEB-INF目录等放入其中。 **六、配置Jetty** 6. Jetty的配置主要通过修改`etc/jetty.xml`或创建特定的XML配置文件实现。比如,你可以更改服务器...
- **第三方模块**:社区提供了众多扩展模块,如GWT支持、静态文件服务增强等,丰富了Jetty的功能。 总结来说,Jetty 9.0.6.v20130930是一个强大且灵活的Web服务器和Servlet容器,尤其适用于资源有限的安卓环境,...
Eclipse Jetty 插件通常会简化配置,允许用户一键启动和停止 Jetty 服务器,并且可以自动重新加载代码更改,提高开发效率。 Jetty 1.3.3 版本可能包含以下关键组件和特性: 1. **Servlet 支持**:Jetty 实现了...
- 使用命令`mvn jetty:run`启动Jetty服务器,它会监听代码变化并自动重新加载修改。 2. **Jetty热部署配置** - 可以通过设置`scanIntervalSeconds`属性来控制扫描源代码的间隔时间,一旦检测到更改,就会自动重新...