现在的位置: 首页 > 综合 > 正文

java webapp嵌入jetty

2013年07月21日 ⁄ 综合 ⁄ 共 5708字 ⁄ 字号 评论关闭

java web为啥在学生群体不是很吃香?回想几乎在大学的时候很少用java来做网站。为什么呢?

一、开发、调试不方便

二、太笨重、需要依赖太多的jar,搭一个空的环境,写个hello world就要经历吐血。。。

三、各种中文乱码

解决开发调试问题,这里给大家介绍一种把jetty集成到webapp的方法,只要有jdk和webapp代码可以快速的开发、调试,这里的jetty嵌入是直接嵌入jetty的启动代码到工程中,而不是用eclipse插件或者mvn插件的形式来实现。

优点:开发快捷、轻便、debug启动调试很方便

一、依赖的jar

		<dependency>
			<groupId>org.mortbay.jetty</groupId>
			<artifactId>jetty</artifactId>
			<version>6.1.24</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mortbay.jetty</groupId>
			<artifactId>jsp-2.1-jetty</artifactId>
			<version>6.1.22</version>
			<scope>provided</scope>
		</dependency>

二、启动类

/**
 * webapp内嵌的jetty容器启动类。
 * 
 * @author lywybo
 * @version $Id: JettyStarter.java, v 0.1 2012-8-26 下午02:39:38 lywybo Exp $
 */
public class JettyStarter {

    /** 日志对象 */
    private static Log log = LogFactory.getLog(JettyStarter.class);

    /**
     * @param args
     */
    public static void main(String[] args) {

        Server jettyServer = null;
        try {
            // 加载jetty配置信息
            URL jettyConfig = ClassLoader.getSystemResource("jetty/jetty-config.xml");
            if (jettyConfig == null) {
                log.fatal("Unable to locate jetty-config.xml on the classpath");
            }

            // 启动jetty服务
            jettyServer = new Server();
            XmlConfiguration configuration = new XmlConfiguration(jettyConfig);
            configuration.configure(jettyServer);
            jettyServer.start();
        } catch (Exception e) {
            log.fatal("Could not start the Jetty server: " + e);
        }
    }
}

三、jetty服务器的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
	<Set name="ThreadPool">
		<New class="org.mortbay.thread.BoundedThreadPool">
			<Set name="minThreads">10</Set>
			<Set name="maxThreads">250</Set>
			<Set name="lowThreads">25</Set>
		</New>
	</Set>

	<Property name="org.mortbay.util.URI.charset" default="UTF-8" />
	<Call name="addConnector">
		<Arg>
			<New class="org.mortbay.jetty.nio.SelectChannelConnector">
				<Set name="host">
					<SystemProperty name="jetty.host" />
				</Set>
				<Set name="port">
					<SystemProperty name="jetty.port" default="80" />
				</Set>
				<Set name="maxIdleTime">30000</Set>
				<Set name="Acceptors">2</Set>
				<Set name="statsOn">false</Set>
				<Set name="confidentialPort">8443</Set>
				<Set name="lowResourcesConnections">5000</Set>
				<Set name="lowResourcesMaxIdleTime">5000</Set>
			</New>
		</Arg>
	</Call>

	<Set name="handler">
		<New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
			<Set name="handlers">
				<Array type="org.mortbay.jetty.Handler">
					<Item>
						<New id="Contexts" class="org.mortbay.jetty.handler.ContextHandlerCollection" />
					</Item>
					<Item>
						<New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler" />
					</Item>
					<Item>
						<New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler" />
					</Item>
				</Array>
			</Set>
		</New>
	</Set>

	<Set name="handler">
		<New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
			<Set name="handlers">
				<Array type="org.mortbay.jetty.Handler">
					<Item>
						<New class="org.mortbay.jetty.webapp.WebAppContext">
							<Set name="contextPath">/</Set><!-- ContextPath -->
							<Set name="resourceBase">./src/main/resources</Set><!-- Web应用根目录 -->
							<Set name="descriptor">./src/main/resources/WEB-INF/web.xml</Set>
							<!--
								Web应用根目录
							-->
							<Call name="addServlet">
								<Arg>org.mortbay.jetty.servlet.DefaultServlet</Arg>
								<Arg>/</Arg>
							</Call>
							<!-- 增加其它的Servlet -->
						</New>
					</Item>
				</Array>
			</Set>
		</New>
	</Set>

	<Set name="UserRealms">
		<Array type="org.mortbay.jetty.security.UserRealm" />
	</Set>

	<Set name="stopAtShutdown">true</Set>
	<Set name="sendServerVersion">true</Set>
	<Set name="gracefulShutdown">1000</Set>
	
</Configure>

四、运行

把上面的信息配置成功之后就可以,在jettyStart.java右键run或者debug。debug的时候只要不改变方法、接口的名字,可以做到不用重启服务器,直接调试,非常方便,快捷。

五、可能遇到的问题

Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
	at org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:105)
	at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:924)
	at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:757)
	at org.apache.jasper.compiler.AntCompiler.generateClass(AntCompiler.java:219)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:297)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:451)

在嵌入jetty并且需要运行jsp,需要依赖下面的包,否则会报上面的错误

<dependency>
	<groupId>org.mortbay.jetty</groupId>
	<artifactId>jsp-2.1-jetty</artifactId>
	<version>6.1.22</version>
	<scope>provided</scope>
</dependency>

抱歉!评论已关闭.