很多java开发的朋友都是用tomcat做主要的服务器,tomcat无疑有很多优点,tomcat也是最最新的jdk API支持最好的,稳定性相对比较高。但是tomcat的弱点也很明显,tomcat毕竟不是纯java的服务器,java要和tomcat交互需要通过物理的路径或相关接口。造成tomcat的使用非常麻烦。
相信很多人也用过ser-u的ftp服务器,这个是一个老牌但是非常稳定的服务器,也很锐意进取。这个服务器在后期的版本中,他们的控制台又原来的cs模式升级到bs模式,可以说这么进化却是革命性的。bs模式的控制台,在升级和优化都比cs模式要方便。他们可以用bs作为控制台,但是又没有部署相关的应用服务器,就是说他们有嵌入式java服务器。
在此文中的应用式java服务器的主要是通过java main方法来启动一个嵌入应用服务器平台,监听某个端口,来持续对本机用户或者和本机相关局域网用户提供应用服务,什么服务就视乎你部署了什么样的应用。、
嵌入式服务器的核心类
package com.shine.framework.HttpServer;
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;
import org.mortbay.thread.BoundedThreadPool;
/**
* HttpServerManager
*
* 相关的包
*
*
* @author viruscodecn@gmail.com
* @project JavaFramework 1.0 2011-03-23
*/
public class HttpServerManager {
private Server server;
/**
* 初始化服务器导入war,连接数默认为100
*
* @param contextName
* @param warPath
* @param port
*/
public void initJettyHttpServerByWar(String contextName, String warPath,
String port) {
initJettyHttpServerByWar(contextName, warPath, port, 100);
}
/**
* 初始化服务器导入war
*
* @param contextName
* @param warPath
* @param port
* @param threadPoolNum
*/
@SuppressWarnings("deprecation")
public void initJettyHttpServerByWar(String contextName, String warPath,
String port, int threadPoolNum) {
if (server != null && server.isRunning()) {
System.err.println("请关闭http服务器再重启");
return;
}
try {
server = new Server();
BoundedThreadPool threadPool = new BoundedThreadPool();
// 设置线程池
threadPool.setMaxThreads(threadPoolNum);
server.setThreadPool(threadPool);
// 设置连接参数
Connector connector = new SelectChannelConnector();
// 设置监听端口
connector.setPort(Integer.parseInt(port));
server.setConnectors(new Connector[] { connector });
WebAppContext context = new WebAppContext();
// 访问项目地址
context.setContextPath(contextName);
// 启动的war包
context.setWar(warPath);
server.addHandler(context);
server.setStopAtShutdown(true);
server.setSendServerVersion(true);
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 初始化服务器通过项目路径,线程池默认为100
*
* @param contextName
* @param webPath
* @param port
*/
@SuppressWarnings("deprecation")
public void initJettyHttpServer(String contextName, String webPath,
String port) {
initJettyHttpServer(contextName, webPath, port, 100);
}
/**
* 初始化服务器通过项目路径
*
* @param contextName
* @param webPath
* @param port
*/
@SuppressWarnings("deprecation")
public void initJettyHttpServer(String contextName, String webPath,
String port, int threadPoolNum) {
if (server != null && server.isRunning()) {
System.err.println("请关闭http服务器再重启");
return;
}
try {
server = new Server();
BoundedThreadPool threadPool = new BoundedThreadPool();
// 设置线程池
threadPool.setMaxThreads(threadPoolNum);
server.setThreadPool(threadPool);
// 设置连接参数
Connector connector = new SelectChannelConnector();
// 设置监听端口
connector.setPort(Integer.parseInt(port));
server.setConnectors(new Connector[] { connector });
WebAppContext context = new WebAppContext(webPath, contextName);
server.addHandler(context);
server.setStopAtShutdown(true);
server.setSendServerVersion(true);
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace();
}
}
public void shutdownJettyHttpServer() {
if (server == null) {
System.err.println("http没有初始化再重启");
return;
}
try {
if (server.isRunning())
server.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
public void restartJettyHttpServer() {
if (server == null) {
System.err.println("http没有初始化再重启");
return;
}
try {
if (!server.isRunning())
server.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
调用类
package com.shine.framework.HttpServer;
public class Example {
public static void main(String args[]) {
HttpServerManager manager = new HttpServerManager();
// manager.initJettyHttpServerByWar("/ManageSystemFlex",
// "C://Users//123//Desktop//ManageSystemFlex.war", "8080");
manager.initJettyHttpServer("/ManageSystemFlex",
"E://workspace//ManageSystemFlex//WebContent", "8080");
}
}
方法initJettyHttpServerByWar是调用一个war包的web应用程序;
方法initJettyHttpServer是调用一个webcontent的web应用程序;
具体用法再深入研究