jetty启动后无法修改静态文件的有关问题

jetty启动后无法修改静态文件的问题

今天碰到问题了。

在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>


把修改后的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>
...
 
但是,照做不行,报错了,请看错误
  1. java.lang.ClassNotFoundException: org.mortbay.jetty.servlet.DefaultServlet 
  2.         at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
  3.         at java.security.AccessController.doPrivileged(Native Method) 
  4.         at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
  5.         at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
  6.         at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
  7.         at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:428) 
  8.         at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:381)
 
很蛋疼吧,没有找到类,那么这个类是什么,仔细观察,是叫jetty包下的。
但是我们用的版本是什么呢 7.6 
请注意了,这个时候的jetty 已经投入到eclipse的怀抱中了。哈哈
所以当然在公司内部使用groupId和ArtifactId也发生了变化肯定就变了啊
修改webdefault.xml文件
  1. <servlet> 
  2.         <servlet-name>default</servlet-name> 
  3.         <!-- <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class> --> 
  4.         <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class> 
  5.         <init-param> 
  6.             <param-name>useFileMappedBuffer</param-name> 
  7.             <param-value>false</param-value> 
  8.         </init-param> 
  9.         <load-on-startup>0</load-on-startup> 
  10.     </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;
    }