package com.chenlb.demo.jetty;
import java.io.File;
import java.net.URL;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.Servlet;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.FilterMapping;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.webapp.WebAppContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
/**
* 内 嵌 jetty http 服务
*
* @author chenlb(chenlb2008@gmail.com) 2012-5-17
*/
public class JettyEmbedServer {
private static final Logger logger = LoggerFactory.getLogger(JettyEmbedServer.class);
//===========set
private int port = 8983;
private String contextPath = "/";
private String webPath;
private int threadNum = 50;
private Map<String, Filter> filters;
private Map<String, Servlet> servlets;
//===========
private Server server;
private void init() throws Exception {
server = new Server();
//连接池
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(port);
connector.setMaxIdleTime(30000);
connector.setRequestHeaderSize(8192);
QueuedThreadPool threadPool = new QueuedThreadPool(threadNum);
threadPool.setName("embed-jetty-http");
connector.setThreadPool(threadPool);
server.setConnectors(new Connector[] { connector });
//Context context = null;
ServletContextHandler context = null;
if(webPath != null) {//webapp 可以支持 jsp
logger.info("load webPath={}", webPath);
final URL warUrl = new File(webPath).toURI().toURL();
final String warUrlString = warUrl.toExternalForm();
context = new WebAppContext(warUrlString, contextPath);
server.setHandler(context);
} else {
context = new ServletContextHandler(server, contextPath);
}
//add filter
if(filters != null) {
for(Map.Entry<String, Filter> eFilter : filters.entrySet()) {
logger.info("add filter={}, path={}", eFilter.getValue().getClass(), eFilter.getKey());
context.addFilter(new FilterHolder(eFilter.getValue()), eFilter.getKey(), FilterMapping.DEFAULT);
}
}
//add servlet
if(servlets != null) {
for(Map.Entry<String, Servlet> eServlet : servlets.entrySet()) {
logger.info("add servlet={}, path={}", eServlet.getValue().getClass(), eServlet.getKey());
context.addServlet(new ServletHolder(eServlet.getValue()), eServlet.getKey());
}
}
if(webPath == null) {
context.addServlet(DefaultServlet.class, "/*");
}
}
public void start() throws Exception {
init();
server.start();
logger.info("jetty embed server started, port={}", port);
}
public void stop() throws Exception {
server.stop();
server.destroy();
}
public static void main(String[] args) {
String contextFile = "classpath:spring-context.xml";
if (args.length > 0) {
contextFile = args[0];
}
ApplicationContext context = null;
try {
context = new FileSystemXmlApplicationContext(contextFile);
} catch (Exception e) {
System.out.println("RunMain [spring-conf-file]");
logger.warn("", e);
}
String jettyEmbedServerBeanName = "jettyEmbedServer";
if (args.length > 1) {
jettyEmbedServerBeanName = args[1];
}
final JettyEmbedServer jettyEmbedServer = (JettyEmbedServer) context.getBean(jettyEmbedServerBeanName);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
try {
jettyEmbedServer.stop();
} catch (Exception e) {
logger.error("run main stop error!", e);
}
}
});
try {
jettyEmbedServer.start();
logger.info("server started");
} catch (Throwable e) {
logger.warn("has exception!", e);
System.exit(-1);
}
}
public void setPort(int port) {
this.port = port;
}
public void setContextPath(String contextPath) {
this.contextPath = contextPath;
}
public void setWebPath(String webPath) {
this.webPath = webPath;
}
public void setThreadNum(int threadNum) {
this.threadNum = threadNum;
}
public void setFilters(Map<String, Filter> filters) {
this.filters = filters;
}
public void setServlets(Map<String, Servlet> servlets) {
this.servlets = servlets;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Jetty嵌入项目代码中示例
共16个文件
prefs:4个
xml:3个
java:3个
4星 · 超过85%的资源 需积分: 10 30 下载量 156 浏览量
2013-08-10
15:23:06
上传
评论
收藏 11KB ZIP 举报
温馨提示
Jetty嵌入项目代码中示例,现我有一示例项目 e:/workspace/web-demo(称为project_home),里面的Web根目录是WebContent。 在project_home建一个jetty目录,子目录如:contexts、etc、lib。 把${jetty_home}/etc目录下的jetty.xml、webdefault.xml文件复制到${project_home}/jetty/etc目录中。 把${jetty_home}/lib/jsp-2.1目录复制到${project_home}/jetty/lib目录下(如果不复制jsp-2.1或jsp-2.0也可以正常启动,只是不能解析jsp,打开主页时提示 JSP not support)。 同样把jetty-6.1.14.jar、jetty-util-6.1.14.jar、servlet-api-2.5-6.1.14.jar复制到${project_home}/jetty/lib目录下。 把${jetty_home}/start.jar复制到${project_home}/jetty目录下。 接下来在${project_home}/jetty/contexts目录下加一个文件。
资源推荐
资源详情
资源评论
收起资源包目录
master.zip (16个子文件)
demo-master
jetty-embed-demo
pom.xml 2KB
.settings
org.eclipse.m2e.core.prefs 116B
org.eclipse.core.resources.prefs 90B
org.maven.ide.eclipse.prefs 241B
org.eclipse.jdt.core.prefs 268B
src
main
webapp
WEB-INF
web.xml 273B
index.jsp 87B
resources
log4j.properties 271B
spring-context.xml 2KB
java
com
chenlb
demo
jetty
servlet
HelloServlet.java 965B
LogFilter.java 1KB
JettyEmbedServer.java 4KB
README 515B
.project 717B
.classpath 601B
.gitignore 8B
共 16 条
- 1
资源评论
- fuguofeng2014-11-02还算可以,参考使用
duanft2013
- 粉丝: 8
- 资源: 121
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现车牌识别程序,和论文,自己做的,做毕业设计的可以看看 .rar
- Windows系统下安装与配置Neo4j的步骤
- 基于matlab实现潮流计算和最优潮流计算的程序1,对毕业设计有一定用处.rar
- 基于大数据学习资源推荐系统的设计与实现(部署视频)-kaic.mp4
- 哈工大形式语言和自动机2022期末含答案
- Windows系统下安装与配置Neo4j的步骤
- 哈希算法(Hash Algorithm)是一种将任意长度的二进制数据映射为较短的、固定长度的二进制值的函数.txt
- Windows系统下安装与配置Neo4j的步骤
- 在二叉树或更复杂的树形结构中,先序输出叶结点.txt
- 列出所有祖先结点的概念通常与树形结构或图论中的节点相关.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功