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>