Java程序实现部署及应用

POSIX :可移植操作系统,编程操作系统接口规范,实现跨平台编译运行。

API:应用程序编程接口

ABI:应用程序二进制接口 描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口.

JAVA:包含四个独立又彼此相关的技术

Java设计语言

JavaAPI :Java应用程序编程接口

Java class 文件格式,需要运行在Java虚拟机中

jvm :Java虚拟机

JAVA流程

 

1、JavaAPI和程序设计语言开发出源程序

2、Java源程序文件,通常以.java结尾

3、使用Java编译器来编译Java源程序文件

4、编译完成之后保存为类文件,以.class结尾

5、这些类文件必须找一个Java虚拟机才能跑起来

6、这些类文件在Java虚拟机上还需要类库才能跑起来!

7、公共类需要用 class loader 才能加载!

 

JVM实现方式:

1、一次性解释器:解释的是字节码并执行,解释的过程是将字节码转换成二进制的过程。

2、即时编译器:每一个class类在运行的时候,解释完的内容要缓存下来,第二次执行时,去缓存中取。依赖于更多内存缓存解码后的结果。

3、自适应编译器:自动缓存20%的执行频率比较高的代码,提高80%的速度。

 

JDK :Java开发环境+运行,是实现Java开发的最小环境

Java应用领域的不同分为三类:

Java SE :Java标准版,

Java EE :Java企业版

Java ME :Java移动版

 

CGI(协议) :通用网关接口,将处理后的动态界面格式化成HTML格式显示给用户。

 

Servlet(Server Applet),全称Java Servlet,是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,

它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

.jsp ---> .java --->(JVM).class

jasper 帮助.jsp转换成.java,Java编译器帮助.java转换成.class,JVM帮助.class转换成程序文件。

JDK :提供了javac,能够帮助.java转换成.class。

 

servlet容器:包含了JDK,又包含了JDK不具备的额外的组件

基于servlet容器的工作流程:

1、前端有一个web应用程序,负责接收用户请求,一旦发现用户请求的是CGI的内容,

2、servlet程序负责通过CGI协议跟web程序进行交互

3、请求的内容接收进来之后,在JVM上完成程序的执行

servlet容器负责接收CGI传递过来的请求,负责监控本地的.Java程序是否发生了修改,若修改,负责把它转换成.class格式。(包含JDK)

web容器:包含了servlet与JSP框架的程序

连接器:真正想跟用户请求的http请求交互,前端还要依赖于web服务器,连接器可以实现就算没有web服务器解码http请求,封装http响应,也可以直接完成与用户交互,

 

若是直接面向大量用户请求,连接器压力会变的很大,若前端给他放一个web服务器,web服务器再带有缓存功能,那后端的连接器压力会小很多,这种模式称为Java的web容器,或者应用程序服务器!

 

安装JDK

1、默认安装在/usr/java/目录下,

2、使用rpm方式安装Java

3、在/etc/profile.d/创建java.sh,内容为:

export JAVA_HOME=/usr/local/jdk1.6.0_45

export PATH=$PATH:$JAVA_HOME/bin

4、执行一下文件:. /etc/profile.d/java.sh

5、使用命令查看Java版本号:java -version

 

Java配置参数方法:

-XX:+选项 :开启 此参数指定的功能

-XX:-选项 :关闭功能

         -XX:选项=值 :给指定的选项赋值

java -XX:+PrintFlagsFinal :显示Java全部选项及其参数

 

Tomcat详解

tomcat架构详解

整个Tomcat容器架构从外向内一共5层

Tomcat在自己内部开发了一个使用Java语言开发了一个web服务器。

Tomcat自身内部就有一个web服务器,而这个web服务器本身运行起来以后,完全可以直接工作在前台,让用户对本机发起web请求。

 

第一层是Tomcat服务器(server):每一个server就是一个Tomcat实例,意味着启动一个Tomcat就是启动一个serve。

可以直接响应解析http请求

第二层是Tomcat 服务(service):将一个或多个连接器关联至一个引擎,

连接器(Connector):贯穿第一层到第三层,用于将server和引擎建立起来关联关系,将server收到的请求转发给某一个引擎的组件。有多个!

第三层是Tomcat 引擎:就是一个具有servlet 容器的Java虚拟机,也是具备了web容器功能的容器,解码.java。

第四层是Tomcat 主机:可以有多个,用来在引擎内部实现虚拟主机

第五层是上下文 :定义类似于Apache的路径别名,配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。

 

容器类组件

Engine(引擎)

Host (主机)

Context(上下文)

顶级组件

server (服务器)

service (服务)

其余组件

Realm(领域):用户账户数据库,

Valve (阀门):实现用户的认证

Logger:日志记录器

 

常用组件

1、Loader(类加载器)

Java的动态装载功能是其语言功能强大表现之一,Servlet容器使用此功能在运行时动态装载servlet和它们所依赖的类。Loader可以用于Context中控制java类的加载

2、Manager

Manger对象用于实现HTTP会话管理的功能,Tomcat6中有5种Manger的实现:

1) StandardManager(标准管理器)

Tomcat6的默认会话管理器,用于非集群环境中对单个处于运行状态的Tomcat实例会话进行管理。当Tomcat关闭时,这些会话相关的数据会被写入磁盘上的一个名叫SESSION.ser的文件,并在Tomcat下次启动时读取此文件。

2) PersistentManager(持久会话管理器)

当一个会话长时间处于空闲状态时会被写入到swap会话对象,这对于内存资源比较吃紧的应用环境来说比较有用。

3)DeltaManager

用于Tomcat集群的会话管理器,它通过将改变了会话数据同步给集群中的其它节点实现会话复制。这种实现会将所有会话的改变同步给集群中的每一个节点,也是在集群环境中用得最多的一种实现方式。

4) BackupManager

用于Tomcat集群的会话管理器,与DeltaManager不同的是,某节点会话的改变只会同步给集群中的另一个,而非所有节点。

5)SimpleTcpReplicationManager

Tomcat4时用到的版本,过于老旧了。

3、Stores(存储)

持久管理器必须包含一个Store元素以指定将会话数据存储至何处。这通常有两种实现方式:FileStore(文件存储)和JDBCStore(数据库存储)。

4、Resources

经常用于实现在Context中指定需要装载的但不在Tomcat本地磁盘上的应用资源,如Java类,HTML页面,JSP文件等。

5、Cluster

专用于配置Tomcat集群的元素,可用于Engine和Host容器中。在用于Engine容器中时,Engine中的所有Host均支持集群功能。在Cluster元素中,需要直接定义一个Manager元素,这个Manager元素有一个其值为org.apache.catalina.ha.session.DeltaManager或org.apache.catalina.ha.session.BackupManager的className属性。同时,Cluster中还需要分别定义一个Channel和ClusterListener元素。

5.1、Channel(通告)

用于Cluster中给集群中同一组中的节点定义通信"信道"。Channel中需要至少定义Membership、Receiver和Sender三个元素,此外还有一个可选元素Interceptor。

5.2、Membership(成员关系管理)

用于Channel中配置同一通信信道上节点集群组中的成员情况,即监控加入当前集群组中的节点并在各节点间传递心跳信息,而且可以在接收不到某成员的心跳信息时将其从集群节点中移除。Tomcat6中Membership的实现是org.apache.catalina.tribes.membership.McastService。

5.3、Sender(心跳发送)

用于Channel中配置"复制信息"的发送器,实现发送需要同步给其它节点的数据至集群中的其它节点。发送器不需要属性的定义,但可以在其内部定义一个Transport元素。

5.4、 Transport(发送集群事务信息)

用于Sender内部,配置数据如何发送至集群中的其它节点。Tomcat6有两种Transport的实现:

1) PooledMultiSender

基于Java阻塞式IO,可以将一次将多个信息并发发送至其它节点,但一次只能传送给一个节点。

2)PooledParallelSener

基于Java非阻塞式IO,即NIO,可以一次发送多个信息至一个或多个节点。

5.5 Receiver(接受集群事务信息)

用于Channel定义某节点如何从其它节点的Sender接收复制数据,Tomcat6中实现的接收方式有两种BioReceiver和NioReceiver。

 

Tomcat的主配置文件(server.xml)及其各组件之间的关系

<server>

<service>

<Connector />

<Engine>

<Host>

<Context> </Context>

</Host>

</Engine>

</service>

</server>

安装Tomcat之前需要先安装JDK,因为要依赖于开发环境!

 

Tomcat的安装配置

1、解压包:tar xf apache-tomcat-7.0.69.tar.gz -C /usr/local/

2、包名太长,进行软连接:ln -sv apache-tomcat-7.0.69 tomcat

3、目录结构

bin :二进制程序路径,里面有 .jar文件(Java归档压缩包),shell脚本,还有 .bat(windows的批处理脚本)

conf :配置文件

server.xml:主配置文件

tomcat-users.xml:用户认证

web.xml:默认的应用程序部署描述符 (部署:将一个web应用程序所依赖到的类装载进JVM)

context.xml :默认为上下文所提供的配置文件

logging.properties :定义日志属性

catalina.properties :定义应用程序本身属性

catalina.policy :定义Tomecat自身安全策略,资源授权

lib :类库文件

logs :日志文件

temp :临时文件目录

webapps :应用程序目录,每一个程序文件夹中都有一个WEB-INF,这是程序的私有目录。

work :工作目录,

4、启动Tomcat

4.1、输出一个变量:vim /etc/profile.d/tomcat.sh ,内容为:

export CATALINA_HOME=/usr/local/tomcat

export PATH=$PATH:$CATALINA_HOME/bin

4.2、 启动 catalina.sh start ,然后查看端口:netstat -lnpt中的8080、8009

5、访问网页: 格式为(IP地址:8080)

5、使用service启动Tomcat:vim /etc/rc.d/init.d/tomcat

脚本:

#!/bin/sh

# Tomcat init script for Linux.

#

# chkconfig: 2345 96 14

# description: The Apache Tomcat servlet/JSP container.

JAVA_HOME=/usr/java/jdk1.7.0_67

CATALINA_HOME=/usr/local/tomcat

export JAVA_HOME CATALINA_HOME

exec $CATALINA_HOME/bin/catalina.sh $*

 

Tomcat优化

Tomcat的优化分成两块:

Tomcat启动命令行中的优化参数即JVM优化(catalina.sh)

ü 系统响应时间增快

ü JVM回收速度增快同时又不影响系统的响应率

ü JVM内存最大化利用

ü 线程阻塞情况最小化

 

Tomcat容器自身参数的优化(server.xml)

详解CentOS6.7部署Tomcat及主配置文件的更多相关文章

  1. Nginx中文详解、配置部署及高并发优化

      一.Nginx常用命令: 1. 启动 Nginx          /usr/local/nginx/sbin/nginxpoechant@ubuntu:sudo ./sbin/nginx2. 停 ...

  2. Tomcat详解系列(2) - 理解Tomcat架构设计

    Tomcat - 理解Tomcat架构设计 前文我们已经介绍了一个简单的Servlet容器是如何设计出来,我们就可以开始正式学习Tomcat了,在学习开始,我们有必要站在高点去看看Tomcat的架构设 ...

  3. http服务详解(2)——httpd2.2的配置文件常见设置

    摘要:一个服务的配置文件非常重要,弄懂配置文件是熟练掌握服务的必要前提. 一.httpd-2.2常见文件介绍 (1)配置文件: 主配置文件尽量别改,改自己的子配置文件 /etc/httpd/conf/ ...

  4. 一文详解CentOS6.5搭建DNS服务

    本文详细介绍DNS服务在Linux Operation System 中的搭建过程 一.DNS服务器的工作原理 客户机提出域名解析请求,并将该请求发送给本地的域名服务器.当本地的域名服务器收到请求后, ...

  5. Git详解之服务部署

    前言 到目前为止,你应该已经学会了使用 Git 来完成日常工作.然而,如果想与他人合作,还需要一个远程的 Git 仓库.尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做,因为一不留心 ...

  6. 详解zabbix安装部署(Server端篇)

    原文:http://blog.chinaunix.net/uid-25266990-id-3380929.html Linux下常用的系统监控软件有Nagios.Cacti.Zabbix.Monit等 ...

  7. zabbix 2.2.20 安装详解(Centos6.9)

    环境说明 [root@centos ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@centos ~]# uname -a L ...

  8. ServletContextListener使用详解(监听Tomcat启动、关闭)

    在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期. 当Serv ...

  9. 详解centos6和centos7防火墙

    CentOS6.5查看防火墙的状态: ? 1 [zh@localhost ~]$service iptable status 显示结果: ? 1 2 3 4 5 6 7 8 9 [zh@localho ...

随机推荐

  1. 第08组 Beta冲刺(2/5)

    队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述 ?按照时间进度的安排进行相应的检查 展示GitHub当日代码/文档签入记 ...

  2. vue自学小demo----前端

    vue学习的小demo,实现简单的页面项目的增删 代码如下 <!DOCTYPE html> <html> <head> <meta charset=" ...

  3. 【转】Web实现前后端分离,前后端解耦

    一.前言 ”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦.并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构 ...

  4. Spring Boot进阶系列二

    上一篇文章,主要分析了怎么建立一个Restful web service,系列二主要创建一个H5静态页面使用ajax请求数据,功能主要有添加一本书,请求所有书并且按照Id降序排列,以及查看,删除一本书 ...

  5. docker 学习操作记录 2

    记录2 [BEGIN] // :: Connecting to ... Connection established. To escape to local shell, press Ctrl+Alt ...

  6. Laravel jwt 多表验证隔离

    为什么要做隔离 当同一个laravel项目有多端(移动端.管理端......)都需要使用jwt做用户验证时,如果用户表有多个(一般都会有),就需要做token隔离,不然会发生移动端的token也能请求 ...

  7. 树模型常见面试题(以XGBoost为主)

    参考资料: 珍藏版 | 20道XGBoost面试题 推荐系统面试题之机器学习(一) -----树模型 1. 简单介绍一下XGBoost2. XGBoost与GBDT有什么不同3. XGBoost为什么 ...

  8. ElasticSearch 线程池类型分析之 ResizableBlockingQueue

    ElasticSearch 线程池类型分析之 ResizableBlockingQueue 在上一篇文章 ElasticSearch 线程池类型分析之 ExecutorScalingQueue的末尾, ...

  9. python之路——阅读目录

    阅读目录 希望大家多多交流,有错误的地方请随时指正,笔记记得可能有点杂 一.python入门 计算机基础 编程语言发展史和python安装  二.数据类型.字符编码.文件处理 python基础数据类型 ...

  10. php for循环a到z

    首先先介绍2个php内置函数 ord(string):函数返回字符串的首个字符的 ASCII 值.//string:必需.要从中获得 ASCII 值的字符串. chr(ascll): 函数从指定的 A ...