我们jetty是一个小型的web服务器,可以嵌入到程序当中去,著名有hadoop,nutch,hertriex.等。
在部署nutch的UI的时候程序一直报 “ClassNotFundException”.检查了好久,发现是webapps/task/web.xml。
这里面我配置了几个servlet。
2、nutch的分布式部署的时候。在namenode机子上所拷贝的webapps(里面有所有的jsp)。当同步到其它几台机子上的时候,webapps同时也拷贝了进去。所以我在启动hadoop的时候,hadoop中也有jetty.那么它会默认的去寻找web.xml中所配置的servlet.找不到当然要报错了。
3、解决办法 :
(1):把webapps/task/web.xml所配置的几个servlet注释掉。
(2):servlet的配置映射放到程序到中去。
public void startWebadmin() {
ServletServer server = new ServletServer();
String warPath = "/webapps/task";
String fullWarPath = System.getProperty("user.dir") + warPath;
try {
//ServletHttpContext context = (ServletHttpContext) server.addWebApplication("/", "web");
server.addContext(fullWarPath, "/task");
server.addServlet("com.xp.***Servlet", "/task/***servlet");
server.start();
} catch (IOException e1) {
e1.printStackTrace();
} catch (Exception e1) {
e1.printStackTrace();
}
}
4、下面在看一个小例子 :
package com.rupeng;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AddServlet extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String s1 = req.getParameter("number1");
String s2 = req.getParameter("number2");
Integer n1 = Integer.parseInt(s1);
Integer n2 = Integer.parseInt(s2);
Integer n3 = n1 + n2;
resp.getOutputStream().println(n3);
}
}
add.htm代码如下:
<html>
<head>
</head>
<body>
<form action="/add" method="post">
num1:<input type="text" name="number1"/>
+
num2:<input type="text" name="number2"/>
<input type="submit"/>
</form>
</body>
</html>
StartServlet.java代码如下:
package com.xp;
import org.mortbay.http.SocketListener;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.ServletHttpContext;
public class StartServer {
public static void main(String[] args) {
Server server = new Server();
try {
SocketListener listener = new SocketListener();
listener.setPort(8080);
server.addListener(listener);
ServletHttpContext context = (ServletHttpContext) server.addWebApplication("/", "web");
context.addServlet("/add", "com.xp.AddServlet");
server.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
5、看来还是对jetty不太熟悉阿。时间都花费了在这个上面,教训阿!牢记!