很多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应用程序;
具体用法再深入研究