精华内容
下载资源
问答
  • 文章目录总结:Apache/Tomcat/JBOSS/Nginx区别 .一、Apache+Tomcat二、Jetty三、Nginx四、JBossWebLogic、WebSphere、JBOSS、Tomcat之间的区别1:产品介绍:2...8:安全性问题9数据库的紧密结合性:服务:三、 ...

    总结:Apache/Tomcat/JBOSS/Nginx区别 .

    1、Apache是Web服务器,Tomcat是应用(Java)服务器。Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用。Apache支持静态页,Tomcat支持动态的。
    2、Jetty:Tomcat内核作为其Servlet容器引擎,并加以审核和调优.大中型系统可以应用。能够提供数据库连接池服务,还支持其他 Web 技术的集成,譬如PHP、.NET 两大阵营.
    3、JBoss是一个管理EJB的容器和服务器,但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
    4、Nginx是目前性能最高的HTTP服务器。其特点是占有内存少,并发能力强。Nginx代码完全用C语言从头写成。

    所以:Apache–Nginx;Tomcat–Jetty;JBoss。这三组可以组合了。

    具体描述:

    一、Apache+Tomcat

    Apache支持静态页,Tomcat支持动态的,比如Servlet等,
      一般使用Apache+Tomcat的话,Apache只是作为一个转发,对JSP的处理是由Tomcat来处理的。
    Apche可以支持PHPcgiperl,但是要使用Java的话,你需要Tomcat在Apache后台支撑,将Java请求由Apache转发给Tomcat处理。
    Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

    这两个有以下几点可以比较的:
    ◆两者都是Apache组织开发的
    ◆两者都有HTTP服务的功能
    ◆两者都是免费的
      不同点:
    Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等)
    Tomcat是符合Java EE的JSP、Servlet标准下开发的一个JSP服务器:Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用。

    二、Jetty

    而Jetty采用业界最优的开源Java Web引擎,将Java社区中下载量最大,用户数最多,标准支持最完备的Tomcat内核作为其Servlet容器引擎,并加以审核和调优。单纯的Tomcat性能有限,在很多地方表现有欠缺,如活动连接支持、静态内容、大文件和HTTPS等。除了性能问题,Tomcat的另一大缺点是它是一个受限的集成平台,仅能运行Java应用程序。企业在使用时Tomcat,往往还需同时部署Apache WebServer以与之整合。此配置较为繁琐,且不能保证性能的优越性。
    Jetty通过使用APR和Tomcat本地技术的混合模型来解决Tomcat的诸多不足。混合技术模型从最新的操作系统技术里提供了最好的线程和事件处理。结果,Jetty达到了可扩展性,性能参数匹配甚至超越了本地Apache HTTP服务器或者IIS。譬如Jetty能够提供数据库连接池服务,不仅支持 JSP 等 Java 技术,同时还支持其他 Web 技术的集成,譬如PHP、.NET 两大阵营。

    三、Nginx

    Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。就稳定性而言,nginx比lighthttpd更胜一筹。

    四、JBoss

    JBoss一个基于J2EE的开放源代码的应用服务器.JBoss是一个管理EJB的容器和服务器,但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
    JBoss与Web服务器在同一个Java虚拟机中运行 JBoss运行后后台管理界面,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能。

    WebLogic、WebSphere、JBOSS、Tomcat之间的区别

    1:产品介绍:

    weblogic

    WebLogic是美国bea公司出品的一个application server确切的说是一个基于j2ee架构的中间件。BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

    webSphere

    WebSphere是 IBM 的集成软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。WebSphere 提供了可靠、灵活和健壮的集成软件。

    JBoss

    JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。2006年,Jboss公司被Redhat公司收购。

    Tomcat

    Tomcat是Apache 软件基金会的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

    2:价位不同:

    JBoss与Tomcat的是免费的。

    WebLogic与WebSphere是收费的,而且价格不菲。

    3:开源性不同:

     JBoss与Tomcat的是完全开源的,而其他两个不是。
    

    4:对技术的支持:

      Tomcat不支持EJB,JBoss是实现了EJB容器,再集成了Tomcat。
    

    WebLogic与WebSphere都是对业内多种标准的全面支持,包括EJB、JSB、JMS、JDBC、XML和WML,使Web应用系统的实施更为简单,并且保护了投资,同时也使基于标准的解决方案的开发更加简便。

    5:扩展性的不同:

    WebLogic和WebSphere都是以其高扩展的架构体系闻名于业内,包括客户机连接的共享、资源 pooling以及动态网页和EJB组件群集。

    6:应用范围的区别:

    Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

    WebLogic和WebSphere是商业软件,功能齐全强大,主要应用于大型企业的大型项目。

    JBOSS 主要应用于EJB服务的中小型公司。

    7:商业服务和技术支持的区别:

    因为JBoss和Tomcat都是开源免费的,所有它俩也就没有任何商业服务和技术支持,而WebLogic和WebSphere的技术文档和相关服务还是很到位,如果你的服务器哪一天出问题了,只要你能出的起钱,他们的技术工程师立刻就能出现在你面前。

    8:安全性问题

    因为JBoss和Tomcat都是开源的,所以它们的安全性相对来说比较低,万一应用服务器本身有什么漏洞,你是没办法向Apache索赔的。

    而WebLogic和WebSphere其容错、系统管理和安全性能已经在全球数以千记的关键任务环境中得以验证。

    9:与数据库的紧密结合性:

    如果硬件成本比软件成本高许多,那不如使用weblogic/Websphere。其中的道理太简单了,为什么电信/银行/移动之类的公司使用Oracle或DB2数据库,而不选用mysql。单靠tomcat是无法支持那么多的并发量,有钱的话还是选择商业产品。

    ================================================================

    WebLogic Server 完全实现了 Sun Microsystems Java EE 5.0 规范,提供了一组标准的 API 以用于创建分布式的 Java 应用程序,这些应用程序可访问多种服务,如数据库、消息传递服务和与外部企业系统的连接。最终用户客户端可使用 Web 浏览器客户端或 Java 客户端访问这些应用程序。请参阅编程模型。
    除了实现 Java EE 之外,WebLogic Server 可使企业在一个可靠、安全、具有高可用性和可伸缩性的环境中部署关键任务应用程序。当出现硬件故障或其他故障时,企业可通过这些功能配置 WebLogic Server 实例群集以分配负载并提供额外的容量。新的诊断工具允许系统管理员监视和调整已部署的应用程序的性能和 WebLogic Server 环境自身。还可以将 WebLogic Server 配置为自动监视和调整应用程序吞吐量而无需人工干预。广泛的安全功能会保护对服务的访问、保持企业数据安全和防止恶意攻击。

    服务:

    Websphere:
    三种:
    1、 产品自带的电话支持。
    2、 现场支持,需要额外付费购买。
    3、 找总代级的代理商。
    Weblogic:
    两种:
    4、 电话。
    5、 邮件。
    没有现场支持。
    费用计算方式:产品报价的18%。
    首先,他们的共同之处是都是支持JSP的服务器软件。

    不同之处:
    Tomcat:是Apache Group Jakarta小组开发的一个免费服务器软件,适合于嵌入Apache中使用,而且,它的源代码是可以免费获得的,不足之处是它的配置十分麻烦,弄不好连Apche都会摊掉,而且有一些安全性的问题没有解决,初学者可以用它来调试JSP文件,但是用作商业应用的服务器就不太妥当了。

    BEA WebLogic Sever:是一款十分强大的服务器软件,配置比较简单,而且对JSP的扩展十分强大,附带了数据库的JDBC驱动程序,支持JHTML,是目前市场占有率最高的服务器,目前最新版本是6.1版,价格很贵,不过嘿嘿…有破解版哦:)

    IBM WebSphere Application Server:是IBM的产品,功能很强大,而且有IBM的开发工具相配套,开发Web程序十分方便,不过价格上万元。

    JBoss、Geronimo及Tomcat比较分析
    在开源的Java应用服务器领域,像JBoss、Tomcat及Apache的Geronimo,他们不仅仅是商业领域的领跑者,同时是技术领域的先行者。当然,所有的Java EE应用服务器的实现不尽相同,但其很多方面具有一定程度的可比性。本文对JBoss4.2、Geronimo 2及Tomcat 6三种开源的Java EE应用服务器,就他们的特性、部署及性能等方面进行一一比较。

    1.Java EE 5一致性

    Sun公司的Java EE 5标准是一种行业标准,而作为这种标准的实现,开源的Java EE 5应用服务器应该与其尽量的保持一致,因此Java EE 5的一致性是一个很重要的指标。在这三种开源的实现中,Geronimo是实现得最好,与Java EE 5标准最贴近的应用服务器。JBoss 4.2支持绝大部分Java EE 5的特性,当然,不久即将发布的JBoss 5将完全支持Java EE 5的所有特性。而Tomcat一般看成是JSP/servlet的容器,仅仅支持Java应用服务器的基本特性。
    2.支持EJB3
    EJB(Enterprise JavaBeans)是指能在Java EE服务器部署的Java组件。它通常将一些业务功能打包成可重用的组件。新发布的EJB3提供了许多新功能,解决了旧版本中许多问题。JBoss 4.2及Geronimo 2均支持EJB3。Tomcat 6本身并不支持EJB3,但Apache OpenEJB项目可以使Tomcat支持EJB3,据称Tomcat可以运行一种嵌入式的JBoss EJB3容器。

    3.支持JSP 2.1/Servlet2.5
    对JSP/servlet的支持是绝大部分Java服务器应提供的最基本功能。JSP2.1和Servlet2.5是Java EE 5对JSP/servlet的升级功能。JBoss 4.2、Geronimo 2及Tomcat 6均支持JSP/servlet这一特性。

    4.支持JSF 1.2
    JSF(Java Server Faces)是一种在Java EE应用部署的组件式架构。提供基本的Web开发的用户界面。与请求驱动的MVC(Model-View-Controller)的架构不同的是,JSF采用了组件驱动的模式。就目前的JSF1.2而言,JBoss 4.2及Geronimo 2都有很好的支持,而运行在Tomcat 6时有不少的问题待解决。

    5.支持客户化插件
    客户化插件支持,意味着可以在原有应用服务器功能的基础上,开发新的功能,并能很好的协同使用。在JBoss中使用MBeans(managed beans)来处理插件开发。而Geronimo也采用类似的处理方式,只是名称不一样,叫GBeans。这些客户的Beans为开发及部署客户资源时,提供一系列统一的接口。

    6.支持业务规则引擎
    几乎所有的应用程序都是建立在一系列业务规则之上,或称之为业务逻辑。而业务规则引擎组件则能帮助管理与简化业务逻辑编程。一般的编程过程中,程序员最常见的逻辑有如if/then逻辑。而有了业务规则引擎,则可以实现许多更加智能的业务逻辑。Drools作为一种业内很流行、标准化的业务规则引擎,在JBoss 4.2、Geronimo 2及Tomcat 6中均可得到支持。Geronimo完全支持Drools,而JBoss支持Drools的历史最久,已达三年之久,并使JBoss/Drools成为了一种非常有市场竞争力的业务规则解决方案。

    7.支持Hibernate 3.x
    Hibernate为Java编程提供了强有力的关系/对象模型(ORM,Object-relational mapping)。Hibernate可以将面向对象的模型映射为关系型数据库,这对Java开发来说是最有吸引力的。Hibernate作为一种开源的软件,最早就是由于JBoss的一个团队所开发(Gavin King)。当然,JBoss 4.2、Geronimo 2及Tomcat 6均支持Hibernate 3。

    8.支持JBoss Seam
    JBoss Seam是一种著名的应用框架,集成了众多的Java及Web技术,例如Ajax、JSF、Java Portlets、BPM(Business-process management)等技术。Seam是JBoss的项目,理所当然,JBoss 4.2自然支持它,同样Geronimo 2也支持JBoss Seam。据JBoss Seam的开发团队称,Tomcat可以通过使用JBoss嵌入式EJB 3容器来支持JBoss Seam。

    9.支持集群
    集群通过并行在多台服务器运行同样的服务,从而大大的提高应用的吞吐量,达到所谓的高负荷的效果。由于采用了数台服务器同时运行,所以当其中的某台服务暂时或死机时,对客户不会造成服务停止,从而达到业务的可持续。集群极大的提高了企业级的Java应用的性能、吞吐量等能力。
    JBoss 4.2、Geronimo 2及Tomcat 6均以同样的方式来支持集群。JBoss在集群层使用及时复制的方式来达到集群的目的。而Geronimo所发布的集群,还处于测试阶段,需要时间的考验,如果有兴趣,可以与Apache基金组织联系。

    10.支持Eclipse IDE
    Eclipse是目前最流行的Java开发工具,自然,与Eclipse的集成是众多Java EE 5应用服务器应该提供的功能。JBoss、Geronimo及Tomcat均支持与Eclipse整合。特别地,JBoss还有自己的Eclipse版本,称为Red Hat Developer Studio,目前正处于测试的阶段。利用Geronimo提供的工具,可以省去手工配置XML文件的烦琐。同时,数据库连接池工具都可以自动的下载所需要的数据库连接驱动。

    三、 部署

    这三种应用服务器的安装均十分简单。在相关的网站上下载zip或tar包进行解压,唯一需要配置的是设置JAVA_HOME环境变量(不过一般均有配置)。注意,在Linux/Unix系统下,需要先发送chmod命令。

    1.Geronimo
    对Geronimo 2来说,进行配置及部署Java应用程序非常的简单,特别是通过它提供的Web控制台更加简单。Geronimo控制提供了许多简单的功能来帮助开发人员进行应用程序的配置。可以进行数据库的连接池测试及安全设置或配置等。

    2.JBoss
    JBoss 4.2有非常漂亮的Web管理控制台,但它所提供的管理功能及特性与Geronimo不尽相同。首先看到的是JBoss的状态及其监测信息,但并没有提供部署功能。而部署Java应用时,只需要将它复制到default/deploy文件夹下面,JBoss会自动的检测到它并进行相关的快速部署。当然,也可以通过修改配置jboss-service.xml来进行客户应用程序所在目录的映射。

    3.Tomcat
    Tomcat 6不愧为一款快速的轻量级的应用服务器。它的控制台提供了基本的部署功能。可以通过Tomcat的控制台进行服务的启动/停止及WAR包的deploy/undeploy操作。当然也提供了Tomcat的运行状态及监测信息,同时有很好的用户授权系统。

    四、 小结

    在本文中,笔者比较了主流的Java EE应用服务器的特性、部署及性能方面的内容,特性方面的比较应该有利于读者选择更加适合自己项目的Java EE应用服务器,做到有目的性的选择服务器,从而达到适合的效果。
    同时,笔者测试比较了商用或开源的Java应用服务器,发现商业的Java应用服务器不一定比开源的好,反而在商业的应用服务器(如Sun的Java应用服务器或BEA的WebLogic)中的Bug比开源的的应用服务器更多些。
    JBoss、Geronimo及Tomcat是快速可靠的可用于处理部署大规模的Java企业级应用的服务器。特别值得一提的是,很多的高性能Java服务器技术都是从这些开源的应用服务器中总结与借鉴过来,而不是从那些商业的应用服务器中发展而来。

    tomcat: Tomcat是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。Tomcat由Apache-Jakarta子项目支持并由来自开放性源代码Java社区的志愿者进行维护。Tomcat Server是根据servlet和JSP规范进行执行的,因此我们就可以说Tomcat Server也实行了Apache-Jakarta规范且比绝大多数商业应用软件服务器要好。做为web容器轻量小巧,如果你不是使用ejb开发,那就可以用它,快速方便。

    jboss:JBoss服务器是一种优秀的J2EE服务器,和BEA的Weblogic,IBM的Websphere属于同类产品, JBoss的优势在于具有良好的性价比,实现了所有j2ee的规范和api,支持的标准新,版本快,有开放源码的所有优点,支持热deploy,适合开发环境,尤其是大的团队开发,deploy会拖掉整个团队的效率。文档太少。启动快。
    JBoss为完全开放源码的免费软件,而且具有良好的运行效率和可靠性,因此已经得到越来越多的J2EE应用开发者的青睐。

    他其中的web容器就是用tomcat,不过支持了ejb,速度慢一些,不适合开发阶段,可以用于真实运行环境(免费)。

    weblogic: WebLogic 是一套基于JAVA功能强大的电子商务套件,提供了许多功能强大的中间件以方便编程人员编写的JSP、SERVLET 等电子商务应用,可以为企业提供一个完整的商务应用解决方案。不适合开发阶段,太慢了,适合于运行环境(收费)。

    展开全文
  • 本文转自:http://blog.itpub.net/26230597/viewspace-1243233/前言:...1,查看tomcat后台日志,核心报错信息如下: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' ...

    本文转自:http://blog.itpub.net/26230597/viewspace-1243233/
    前言:手机app应用评论的时候,恢复表情符号,提示失败。

    1,查看tomcat后台日志,核心报错信息如下: 
     Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
    at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:80)
    at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
    at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)
    ... 46 more 
     
    [root@mysqlvm2 ~]# mysql -root -p
    mysql> use test;
    Database changed
    mysql> show tables;
    Ignoring query to other database
    mysql> Ctrl-C -- exit!
    Aborted
    忘记输入-u参数了,冲洗你输入,OK,如下所示:
    [root@mysqlvm2 ~]# mysql -uroot -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 4
    Server version: 5.6.12-log Source distribution
    Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    mysql>  
    mysql> use test;
    Database changed
    mysql> show tables;
    +------------------------+
    | Tables_in_test         |
    +------------------------+
    | c                      | 
    | lubin_test             | 
    | test                   | 
    | tt                     | 
    +------------------------+
    10 rows in set (0.00 sec)
    这种输入Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...'的问题,多数都是字符集的,以前从latain改成gbk,从gbk改成utf8,而我的CONTENT字段已经utf8了,那么比utf8更多的就只有utf8mb4了,所以去修改表字段的字符集吧。

    mysql>


    2,先去修改表字段字符集为utf8mb4: 
    ALTER TABLE UGC_REVIEW_CONTENT MODIFY `CONTENT` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '评论内容';
    执行完后,再在手机端的app测试,依然报同样的错误。


    3,再去修改表字符集utf8mb4:
    ALTER TABLE UGC_REVIEW_CONTENT  CHARSET=utf8mb4 COMMENT='晒单/推荐的评论内容';
    执行完后,再在手机端的app测试,依然报同样的错误。


    4,再去修改数据库的字符集utf8mb4:
    vim my.cnf
    init-connect='SET NAMES utf8mb4'
    character-set-server=utf8mb4

    重启mysql数据库
    [root@mysqlvm4 ~]# service mysql restart
    Shutting down MySQL....                                    [确定]
    Starting MySQL.............................................[确定]..
    [root@mysqlvm4 ~]# 

    查看db的字符集
    mysql> show variables like '%char%';
    +--------------------------+----------------------------------+
    | Variable_name            | Value                            |
    +--------------------------+----------------------------------+
    | character_set_client     | utf8mb4                          |
    | character_set_connection | utf8mb4                          |
    | character_set_database   | utf8mb4                          |
    | character_set_filesystem | binary                           |
    | character_set_results    | utf8mb4                          |
    | character_set_server     | utf8mb4                          |
    | character_set_system     | utf8                             |
    | character_sets_dir       | /usr/local/mysql/share/charsets/ |
    +--------------------------+----------------------------------+
    8 rows in set (0.00 sec)
    mysql> 

    在手机app端重新评论,输入表情符号,点击提交提示评论成功。

    5,问题分析总结:
        ㈠ 原因
            普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机 遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集,这必须要作为移动互联网行业的一个技术选型的要点
        ㈡ 限制
            需要 >= MySQL 5.5.3版本、从库也必须是5.5的了、低版本不支持这个字符集、复制报错。

    参考文章地址:http://bbs.csdn.net/topics/390055415

    转载于:https://www.cnblogs.com/patf/p/5148016.html

    展开全文
  • SpringBoot 1.5.x 2.x区别

    千次阅读 2018-07-18 22:16:44
    1、jdk版本:2.x 至少需要 JDK 8 的支持,2.x 里面的许多方法应用了 JDK 8 的许多高级新特性。另外,2.x 开始了对 JDK 9 的支持。 2、第三方库: 1) Spring Framework 5+ 2) Tomcat 8.5+ 3) Flyway 5+ 4) ...

    一、依赖jdk及第三库升级

    1、jdk版本:2.x 至少需要 JDK 8 的支持,2.x 里面的许多方法应用了 JDK 8 的许多高级新特性。另外,2.x 开始了对 JDK 9 的支持。

    2、第三方库:

            1) Spring Framework 5+
            2) Tomcat 8.5+
            3) Flyway 5+
            4) Hibernate 5.2+
            5) Thymeleaf 3+

    二、各类报错信息

    1、配置文件报错

            现象:如:server.context-path: /spring

            原因:大量的Servlet专属的server.* properties被移到了server.servlet下:

            解决方案:server.context-path: /spring     -->    server.servlet.context-path: /spring

     

    2、WebMvcConfigurerAdapter过时

            原因:升级后的springBoot,使用了java8的特性 default 方法,所以直接实现 WebMvcConfigurer 这个接口即可。

            解决方案:由 extends WebMvcConfigurerAdapter 改为 implements WebMvcConfigurer

    旧:
    public class MvcConfig extends WebMvcConfigurerAdapter 
    
    
    新:
    public class MvcConfig implements WebMvcConfigurer 

     

    3、静态资源被拦截

            现象:访问系统的时候css等样式没有加载

            原因:1.5版本时候META-INF/resources / resources / static / public 都是spring boot 认为静态资源应该放置的位置,会自动去寻找静态资源,而在spring boot 2.0则对静态资源也进行了拦截,当拦截器拦截到请求之后,但controller里并没有对应的请求时,该请求会被当成是对静态资源的请求。此时的handler就是 ResourceHttpRequestHandler,就会抛出上述错误。

            解决方案:在拦截器那里排除静态资源的请求路径(assets是放静态资源的路径)

    /**  
    * 拦截器 
    * @param registry 
    */ 
    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
    
        // addPathPatterns 用于添加拦截规则 
        // excludePathPatterns 用户排除拦截 
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatternss("/toLogin","/login","/assets/**","/js/**");
    }

     

    4、全局异常特殊处理 找不到对应的类

    原因:新版本后此方法去掉了,需要换成新的方法处理

    解决方案:

    //旧代码
    @Configuration
    public class ContainerConfig {
        @Bean
        public EmbeddedServletContainerCustomizer containerCustomizer(){
            return new EmbeddedServletContainerCustomizer(){
                @Override
                public void customize(ConfigurableEmbeddedServletContainer container) {
                    container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500"));
                    container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404"));
                    }
                };
            }
        }
    
    
    //新代码
    @Configuration
    public class ContainerConfig implements ErrorPageRegistrar {
        @Override
        public void registerErrorPages(ErrorPageRegistry registry) {
            ErrorPage[] errorPages = new ErrorPage[2];
            errorPages[0] = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500");
            errorPages[1] = new ErrorPage(HttpStatus.NOT_FOUND, "/error/404");
            registry.addErrorPages(errorPages);
        }
    }

    三、参考文献

    http://tengj.top/2018/07/23/springboot2to1/

    展开全文
  • Jetty一些问题

    2020-02-13 21:08:21
    文章目录1.说说 jetty tomcat区别。2.如何修改 jetty 默认端口?如何修改 tomcat 默认端口?3.如何启动 jetty 服务器?...8.说说请求重定向请求转发的区别9. jsp 有哪九大内置对象?servle...

    1.说说 jetty 与 tomcat 的区别。

    • 先说说 Servlet:Servlet 就是一种用来处理网络请求的一套规范。

    • Jetty 是一个开源的 HTTP 服务器和 Servlet 容器,它可以为 JSP 和 Servlet 提供运行时环境。简单来说,Jetty Server就是由多个Connector(连接器)、多个Handler(处理器),以及一个线程池组成。整体结构请看下面这张图。

    在这里插入图片描述

    • Tomcat 是 Servlet 容器,同时它也包括了 web 服务器的功能,在 tomcat 上部署应用程序时,我们是把应用程序放在 tomcat 根路径下的 webapps 文件夹下, 而这个文件下可以放置多个应用程序,我们可以通过请求来决定具体访问那个应用。
      在这里插入图片描述

    • 相同点:都是一种 Servlet 容器,他们都支持标准的 servlet 规范和 JavaEE 规范;

    • 不同点:

      • 由上边图可以看出,Jetty 的架构比 Tomcat 更为简单,Jetty 是基于 Handler 来实现的,主要的扩展功能都可以用 Handler 来实现,扩展简单;Tomcat 的架构是基于容器设计的,进行扩展时需要了解 Tomcat 的整体设计结构,不易扩展;
      • Jetty 和 Tomcat 性能方面差异不大,Jetty 可以同时处理大量连接而且可以长时间保持连接,适合于 web 聊天应用等,Jetty 的架构简单,可以按需加载组件,减少不需要的组件,减少服务器内存开销,从而提高服务器性能,Jetty 默认采用 NIO 结束在处理 I/O 上更占优势,在处理静态资源时,性能较高;Tomcat适合处理少数非常繁忙的连接,也就是说如果生命周期短的话,Tomcat 性能更高,Tomcat 默认采用 BIO 处理 I/O 请求,在处理静态资源时,性能较差。
      • Jetty 默认使用 utf-8 字符集,不存在中文乱码情况;Tomcat 默认使用 ISO_8859_1 字符集,经常有中文乱码。
      • Jetty 更满足有云的分布式环境需求,而 Tomcat 更符合企业级环境。

    2.如何修改 jetty 默认端口?如何修改 tomcat 默认端口?

    • Jetty:首先,下载安装 Jetty 之后,打开其安装文件夹,会看到 start.ini 配置文件,找到jetty.http.port 这一配置项,将其去掉注释修改为自定义的端口,修改完之后,保存并退出,重启 Jetty 后生效;
      在这里插入图片描述

    • Tomcat:首先,下载安装 Tomcat 之后,进入 conf 目录,打开 server.xml 文件,修改port 这项,将 8080 修改为自己想要的端口号, 修改完记得保存重新启动 tomcat 服务器,打开浏览器在最上面的地址栏输入http://localhost:xxxx/ 出现 Tomcat 页面就修改成功;
      在这里插入图片描述

    3.如何启动 jetty 服务器?

    • 在 DOS 窗口进入到安装 Jetty 的目录下,输入java -jar start.jar 启动欧冠 Jetty:
      在这里插入图片描述

    4.简述 Servlet 的生命周期。

    • 生命周期一般分为三个阶段:
      • 初始化阶段:调用 init() 方法;
      • 响应客户请求阶段:调用 service() 方法(doGet() 和doPost() );
      • 终止阶段:调用 destroy() 方法;
    • doGet() 是通过 http 和 header 来传输数据,doPost() 是通过 http 和 body 来传输数据;

    5.Servlet如何处理用户的请求?

    在这里插入图片描述

    • 浏览器向 web 服务器发送了 HTTP 请求;
    • web 服务器(Servlet 容器)接受浏览器的请求;
    • web 服务器创建一个 HttpServletRequest 对象,将浏览器请求的信息封装到这个对象中;
    • web 服务器创建一个 HttpServletResponse 对象;
    • web 服务器调用 Servlet 对象的 service() 方法,把 HttpServletRequest 对象和 HttpServletResponse 作为参数传给 Servlet 对象;
    • Servlet 调用 HttpServletRequest 对象的有关方法,获取 Http 的请求信息;
    • Servlet 调用 HttpServletResponse 对象的有关方法,生成响应数据;
    • web 服务器把 Servlet 响应结果传给浏览器。

    6.说说 get 请求和 post 的请求的区别。

    • get 用于获取数据,而 posy 一般用于提交数据;
    • get 参数有长度限制(受限于 url 长度),而 post 无限制;
    • get 产生一个 TCP 数据包,而 post 产生两个数据包;
    • 后退页面时,get 没有影响, post 会再次提交请求;

    7.说说相对地址与绝对地址的区别。

    • 相对地址:就是被链接文件相对于当前页面的地址;
    • 绝对地址:就是文件在网络或本地的绝对位置;
    • 一般来说,比较少用绝对地址,绝对地址只针对自己的电脑有用,放到别的设备上就不起作用了,除非在别人的设备上相同路径下有相同的文件。大部分选择使用相对路径,即使换了一台设备,也是可以继续使用的。

    8.说说请求重定向与请求转发的区别。

    • 请求重定向:

      客户端行为,response.sendRedirect() 从本质上讲等同于两次请求,前一次请求对象不会保存,地址栏的 URL 会变,客户端请求服务器,服务器返回重定向,客户端再自动请求重定向地址;

    • 请求转发:

      服务器行为,request.getRequestDispather().forward(req,resp) 是一次请求,转发后请求对象会保存,地址栏的 URL 地址不会变,客户端请求服务器,服务器内部请求其他地址。

    9. jsp 有哪九大内置对象?servlet 如何获取 session 和application 对象?

    • 九大内置对象:

      Jsp 内置对象 功能
      out 向客户端输出数据
      request 向客户端请求数据
      response 封装了 jsp 产生的响应,然后被发送到客户端以响应客户的请求
      application 从servlet配置对象中获得servlet上下文
      config 表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet
      page Jsp实现类的实例,它是jsp本身,通过这个可以对它进行访问
      pagecontext 为JSP页面包装页面的上下文。管理对属于JSP中特殊可见部分中己经命名对象的该问
      session 用来保存每个用户的信息,以便跟踪每个用户的操作状态
      exception 反映运行的异常
    • 获取 session 和 application 对象:

      session 可以通过 request.getSession(); 来获取
      application 可以通过 this.getServletContext() 来获取
      

    10.什么是单例?单例有哪些设计模式?

    • 单例:就是独一无二的意思,放到生活中比如太阳,进入程序中,就是在这个程序运行中,最多只能有一个实例化对象;

    • 设计模式:

      • 饿汉式:

        public class Hungry{
            private static Hungry hungry = new Hungry();
            
            private Hungry(){
                
            }
            
            public static Hungry instance(){
                return hungry;
            }
        }
        

        这种方式不会产生线程安全问题,因为在 JVM 中,对类的加载和类初始化,由虚拟机保证线程安全;

        优点:没有枷锁,执行效率会提高;

        缺点:浪费内存;

      • 懒汉式:

        public class Lazy {
            private static Lazy lazy;
        
            private Lazy() {
            }
        
            public static Lazy instance() {
                if (lazy == null) {
                    lazy = new Lazy();
                }
                return lazy;
            }
        
        }
        

        可以在 instance() 时再创建对象,所以称为懒汉式。这种实现最大的问题就是不支持多线程,存在线程安全问题。

    展开全文
  • 第5章 servlet与tomcat 182 5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行...
  • 数字证书笔记

    万次阅读 2020-09-07 09:33:29
    【1】非对称加密、数字签名、数字证书、keytool自签名证书 ...【3】tomcat开发环境配置启用https...【8】利用OpensslKeytool制作Tomcat数字证书 【9】SSL工作原理 【10】NIO模式和BIO模式实现SSL协议通信 【11】Java Key
  • 目录 1、jsp中两种注释的区别: 、<%--注释内容--%> 2、如何修改tomcat端口号...8、如何解决get请求post请求中文乱码问题 9、Servlet的生命周期(*) 10、jspServlet的区别(*) 11、jsp中的9大内置对象 12
  • 2020年linux经典面试题集锦

    千次阅读 2020-01-02 15:19:40
    文章目录1 redismemcached对比2 MySQL存储引擎3 数据库索引优点4 事务隔离级别5 session 和 cookie6 Tomcat组成7 buffer 和 cache8 CDN9 发现台linux主机无法上网,将做些什么检查和排错10 符号链接和硬链接的区别...
  • 1. maven多项目搭建2. web.xml文件的配置3. servlet的实现方式4. req 和 resp的编码问题5. servlet的三种实现方式6.... url-pattern 地址 / /*的区别10. classpath classpath*的区别11. log4j...
  • Java Web学习笔记

    千次阅读 2013-04-10 11:18:33
    javaWeb笔记(1) 第一章 Web应用程序----概述 在这一章里面,我们要学习以下几点: 1:Web应用程序桌面应用程序的区别 2:Web服务器客户端 ...6:GetPost提交方式 ...8:Web应用程序开发过程 ...9:如何在TomCat5
  • 2. 正向代理反向代理区别 3. Linux下安装nginx(超详细) 4. nginx配置虚拟主机概述 5. nginx基于域名配置虚拟主机 6. nginx基于端口配置虚拟主机 7. nginx+tomcat反向代理 8. nginx实现负载均衡 9. nginx编译参.....
  • Linux相关文章

    2016-06-16 16:32:00
    1、linux 中特殊符号用法详解 2、linux之vim命令 3、linux各文件夹的作用 4、修改linux文件权限命令:chmod ...8、Linux命令行下安装Maven配置 9、Win7+VMware Workstation环境下的CentOS-L...
  • JSP

    2021-04-10 15:21:09
    和javaEE8最大的区别是包名称,原来的javax.servlet全部变为jakarta.servlet JSP ####ServletJSP区别 简单的说,SUN首先发展出Servlet,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI...
  • 2021-04-10

    2021-04-10 15:21:29
    和javaEE8最大的区别是包名称,原来的javax.servlet全部变为jakarta.servlet JSP ####ServletJSP区别 简单的说,SUN首先发展出Servlet,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI...
  • 2020JAVA中级面经

    2020-05-11 16:35:12
    自我介绍 离职原因 最近项目 1.String方法取后三位,日期转换 2.intinteger 区别、项目中的使用 3.map的遍历 ...9.关于的tomcat的配置,你配置过哪些?如何配两个? 10.讲一下分布式锁? 11.zookeeper有哪些
  • 8、HTTP请求的GETPOST方式的区别 34 9、forward 和redirect的区别? 34 10、servlet中怎么定义forward 和redirect 35 11、过滤器有哪些作用? 35 12、JSP的常用指令? 35 13、JSP和Servlet中的请求转发分别如何实现...
  • 注解方式配置(servlet3.0后支持)8.request对象9.get中文乱码问题(tomcat7及以下版本会有此问题)10.post中文乱码问题11.解决xml自动提示,和自动补全问题11.response对象 1.状态码 状态码 含义 100 ...
  • java面试题

    2018-01-01 15:35:15
    2. String 和StringBuffer的区别 8 3. 运行时异常一般异常有何异同? 8 4. 说出ArrayList,Vector,LinkedList的存储性能和特性 8 5. EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean...
  • Java面试宝典2010版

    2011-06-27 09:48:27
    8、说说struts1struts2的区别9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 11、iBatis...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    8、说说struts1struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...
  • java基础题 很全面

    2009-05-09 09:24:24
    2. BSCS的联系与区别。 24 3. JDO是什么? 25 4. Cookies 25 5. Sessions 25 6. Cookies和Sessions的比较 26 7. 过滤器 26 8. 什么是事件监听器? 27 9. EJB 28 10. CORBA是什么?用途是什么? 29 11. Spring ...
  • 8、说说struts1struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...
  • java面试题典 java 面试题 经典

    热门讨论 2010-06-18 13:42:36
    8. &和&&的区别 8 9. HashMap和Hashtable的区别8 10. final, finally, finalize的区别9 11. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 9 12. error和exception有什么区别? 9 13....
  • 1.6.1 集成Eelipse与Tomcat 1.6.2 完善web项目开发所需配置 1.7 实战检验 1.7.1 创建第一个Java Web项目 1.7.2 将图片输出到JSP页面之中 1.8 疑难解惑 1.8.1 Tomcat端口被占用导致不能启动 1.8.2 Eelipse没有创建JSP...
  • 1.6.1 集成Eelipse与Tomcat 1.6.2 完善web项目开发所需配置 1.7 实战检验 1.7.1 创建第一个Java Web项目 1.7.2 将图片输出到JSP页面之中 1.8 疑难解惑 1.8.1 Tomcat端口被占用导致不能启动 1.8.2 Eelipse没有创建JSP...
  • spring4.1核心包

    2017-09-19 17:50:35
    9.spring-instrument-tomcat-4.1.1.RELEASE.jar Spring对tomcat连接池的集成 10. spring-jdbc-4.1.1.RELEASE.jar 对jdbc简单封装 11.spring-jms-4.1.1.RELEASE.jar 简单封装jms api接口 jms: Java消息服务(Java ...
  • java初学者必看

    热门讨论 2012-02-24 16:07:34
    10.1.10 抽象类接口区别 10.2 内部类概念 10.3 成员内部类 10.3.1 创建内部类对象 10.3.2 内部类的this引用 10.3.3 成员内部类的修饰符 10.4 方法内部类 10.5 匿名内部类 10.5.1 继承式 10.5.2 接口式 ...
  • 2.1.1 引用指针有什么区别? 2.1.2 描述实时系统的基本特性 2.1.3 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 2.1.4 什么是平衡二叉树? 2.1.5 堆栈溢出一般是由什么原因导致的? 2.1.6 ...
  • React学习笔记_React中元素组件的区别 React学习笔记_无状态组件(Stateless Component) 高阶组件 React学习比较_初识React中的High Order Component es6 javascript对象的扩展运算符 React学习笔记_...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

tomcat9与tomcat8区别