Jetty学习 【八】 使用start.jar启动webapp

前面的文章中提到了如何嵌入式的使用Jetty,也就是通过自己编写main函数,建立server,并且让server加载war或者为server编写handler。这里的方式和Tomcat等服务器相似,将编写好的webapp放置到特定的目录下面,由容器自动去添加webapp。

1、jetty-web.xml


每一个webapp都可以添加一个jetty-web.xml文件。这个文件用于配置org.eclipse.jetty.webapp.WebAppContext,也就是webapp的上下文。

jetty-web.xml的格式如下,顶级元素是<Configure>。

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
 
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
 ..
</Configure>

2、jetty.xml


jetty.xml用于配置jetty。不是针对某个特定的webapp。
主要进行如下的配置:
  • the Server class (or subclass if extended) and global options
  • a ThreadPool (min & max thread)
  • connectors (ports, timeouts, buffer sizes, protocol, etc.)
  • the handler structure (default handlers and/or a contextHandlerCollections, etc.)
  • the deployment manager that scans for and deploys webapps and contexts
  • login services that provides authentication checking
  • a request log

默认的jetty.xml文件在jetty根目录下的etc文件夹中。同时这个文件夹中,还有其他许多的样例文件。用于开启不同的功能

3、jetty-env.xml


用于JNDI资源的定义,比如数据库资源。

4、start.ini


启动的配置。

1)JVM参数
在start.ini中已经配置好了一些推荐的VM参数,不过都是注释掉的。需要自己手动开启。

<span style="font-size:14px;"> --exec
 -Dorg.apache.jasper.compiler.disablejsr199=true
 -Dcom.sun.management.jmxremote
 -Dorg.eclipse.jetty.util.log.IGNORED=true
 -Dorg.eclipse.jetty.LEVEL=ERROR       //日志级别,默认是DEBUG,这里修改为ERROR
 -Dorg.eclipse.jetty.util.log.stderr.SOURCE=true
 -Xmx1024m
 -Xmn512m
 -verbose:gc                           //开始日志,打印GC情况
 -XX:+PrintGCDateStamps
 -XX:+PrintGCTimeStamps
 -XX:+PrintGCDetails
 -XX:+PrintTenuringDistribution
 -XX:+PrintCommandLineFlags
 -XX:+DisableExplicitGC                //-XX:+DisableExplicitGC标志自动将System.gc()调用转换成一个空操作
 -XX:+UseConcMarkSweepGC               //使用CMS
 -XX:ParallelCMSThreads=2              //并发线程数
 -XX:+CMSClassUnloadingEnabled         //允许CMS 收集方法区 (PermGen)
 -XX:+UseCMSCompactAtFullCollection    //在Full垃圾回收时采用CMS压缩算法
 -XX:CMSInitiatingOccupancyFraction=80 //CMS启动阈值</span>



2)启动模块
启动模块的方式是,
etc/xxxx.xml

比如想要启动JMX监控模块,etc/jetty-jmx.xml

5、例子

a)建立工程

b)配置jetty-web.xml,如下

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Call class="org.eclipse.jetty.util.log.Log" name="debug"><Arg>executing jetty-web.xml</Arg></Call>
  <Set name="contextPath">/webapp1</Set>
</Configure>

c)打包war

d)将打包好的war包放置到jetty根目录下的webapps目录下

e)运行


直接使用java -jar start.jar运行时,会出现问题,

org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac.  A full JDK (not just JRE) is required
	at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:92)
	at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:378)
	at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:119)
	at org.apache.jasper.compiler.Jsr199JavaCompiler.compile(Jsr199JavaCompiler.java:208)
	at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:384)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:453)
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
	at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:276)
	at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:103)
	at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:572)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
	at org.eclipse.jetty.server.Server.handle(Server.java:370)
	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
	at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971)
	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1033)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
	at java.lang.Thread.run(Unknown Source)

解决方法

"C:\Program Files\Java\jdk1.7.0_09\bin\java" -jar start.jar

在运行java的时候,指定java.exe的目录。

f)在浏览器输入

http://localhost:8080/webapp1/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值