jetty(2) 容器实例部署时的问题解决方法

本贴最后更新于 2618 天前,其中的信息可能已经物是人非

jetty 应用部署时的注意点

本文的目的不是为了手把手教你部署一个 jetty 容器实例,而是为了让你在碰到部署问题是来查阅,节省网上搜索的时间,所以如果你发现并解决了本文未涵盖的部署问题,欢迎编辑此文。

  1. 在 start.d/http.ini 修改容器监听的端口号

     jetty.port=8046
    
  2. 向 jetty 实例中添加 jspjsp-impljstlplus 四个模块,命令:

      java -jar ../../jetty-distribution-9.2.21.v20170120/start.jar --add-to-start=jsp,jstl,jsp-impl,plus
    
  3. 配置**dataSource**,不用 META-INF/context.xml 了,换成 WEB-INF/jetty-env.xml,配置内容如下:

     <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
    
     <Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
       <New id="jdbc/mysql.demo" class="org.eclipse.jetty.plus.jndi.Resource">
          <Arg>jdbc/mysql.demo</Arg>
          <Arg>
          <New class="org.apache.commons.dbcp.BasicDataSource">
          <Set name="driverClassName">com.mysql.jdbc.Driver</Set>
          <Set name="url">jdbc:mysql://rds7niju37niju3.mysql.rds.aliyuncs.com:3306/clinic?characterEncoding=UTF-8&amp;autoReconnect=true&amp;zeroDateTimeBehavior=round</Set>
          <Set name="username">clinic</Set>
          <Set name="password">Clinic423</Set>
          <Set name="maxActive">20</Set>
          <Set name="maxIdle">3</Set>
          <Set name="maxWait">10</Set>
          <Set name="removeAbandoned">true</Set>
          <Set name="removeAbandonedTimeout">5</Set>
          <Set name="logAbandoned">false</Set>
          <Set name="validationQuery">select 1</Set>
          <Set name="testOnBorrow">false</Set>
          <Set name="testOnReturn">false</Set>
          <Set name="testWhileIdle">true</Set>
          <Set name="timeBetweenEvictionRunsMillis">60000</Set>
          <Set name="numTestsPerEvictionRun">100</Set>
     	 <Set name="connectionInitSqls">
     	  <New class="java.util.ArrayList">
     		<Call name="add">
     		  <Arg>set names utf8mb4</Arg>
     		</Call>
     	   </New>
     	  </Set>
          </New>
          </Arg>
       </New>
     </Configure>
    
  4. 修改 Spring 配置文件中的**jndi 名称**,去掉 java:comp/env/,否则 jetty 无法找到该资源。

     <!-- connection pool-->
     <jee:jndi-lookup id="dataSource" jndi-name="jdbc/mysql.demo"></jee:jndi-lookup>
    
  5. 如果 dataSource 配置的是**dbcp**连接池,需要在应用的 WEB-INF/lib 目录中放入 commons-dbcp.jarcommons-pool.jar 两个实现 jar 包。

  6. start.ini 中配置**jvm**选项

     --exec
     -Xms200m
     -Xmx200m
     -XX:MaxPermSize=256m
     -verbose:gc
     -Xloggc:/home/jetty/instance/njmatrix/logs/jvmgc.log
     -XX:+PrintGCDateStamps
     -XX:+PrintGCTimeStamps
     -XX:+PrintGCDetails
     -XX:+PrintTenuringDistribution
     -XX:+PrintCommandLineFlags
     -XX:+PrintReferenceGC
     -XX:+PrintAdaptiveSizePolicy
    
  7. 设置 jetty 运行使用的**JAVA_HOME**,在 ijetty.sh 文件中设置,如:

     javabin=/etc/alternatives/java_sdk_1.8.0/bin/java
    
  8. 应用内获取配置文件完整路径的方式,需要改为:

     String logfile = getInitParameter("log4j-init-file");
     String logfilepath = getServletContext().getRealPath("/"+logfile);
    

    旧的读取方式是:

     String prefix = getServletContext().getRealPath("/");
     String logfilepath = prefix + getInitParameter("log4j-init-file");
    

    这将导致 prefix 结尾少个"/"

  9. 静态文件编码设置

    在 web.xml 中加入配置:

     <locale-encoding-mapping-list>
     	<locale-encoding-mapping>
     		<locale>zh</locale>
     		<encoding>UTF-8</encoding>
     	</locale-encoding-mapping>
     </locale-encoding-mapping-list>
    
  10. web.xml删除无用的 Servlet 配置

    jetty 中,如果 web.xml 定义的 Servlet 类不存在,应用启动时会报错,注意将没用的配置删除。

结束

以上是一部分在部署 jetty 容器时碰到的问题,如果部署、启动时有其它问题,可以查看 logs 目录下的日志,找到运行错误并修复。

  • Jetty
    22 引用 • 48 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    175 引用 • 994 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 52 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 2 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7028 引用 • 31773 回帖 • 219 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 197 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 708 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 10 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 510 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    76 引用 • 37 回帖 • 1 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 614 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 511 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    333 引用 • 619 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 1 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    330 引用 • 1715 回帖 • 3 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 353 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 194 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 616 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    21 引用 • 58 回帖 • 1 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 321 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    942 引用 • 1458 回帖 • 108 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 42 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 20 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 396 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 689 关注