当前位置: 首页 > news >正文

互联网运营自学课程南京关键词seo公司

互联网运营自学课程,南京关键词seo公司,如何查询网站空间大小,勒流顺德网站建设文章目录一、Tomcat【开源的轻量级Web应用服务器】1.缺省端口是多少,怎么修改?2. 有哪几种Connector 运行模式(优化)?3.三种部署方式?4.Tomcat容器是如何创建servlet类实例?用到了什么原理?5.如何优化?5.1…

文章目录

    • 一、Tomcat
    • 【开源的轻量级Web应用服务器】
        • 1.缺省端口是多少,怎么修改?
        • 2. 有哪几种Connector 运行模式(优化)?
        • 3.三种部署方式?
        • 4.Tomcat容器是如何创建servlet类实例?用到了什么原理?
        • 5.如何优化?
          • 5.1 优化连接配置。
          • 5.2 内存调优
          • 5.3垃圾回收策略调优
          • 5.4 共享session处理
        • 6.关于Tomcat的session数目
        • 7.监视Tomcat的内存使用情况
        • 8.打印类的加载情况及对象的回收情况
        • 9.Tomcat一个请求的完整过程
        • 10.工作模式
    • 二、Servlet
    • 【用Java编写的Server端程序】
      • 1.Servlet的生存周期
      • 2.forward() 与redirect()的区别?
      • 3.JSP和Servlet有哪些相同点和不同点

一、Tomcat

【开源的轻量级Web应用服务器】

(参考了这篇https://blog.csdn.net/qq_25934401/article/details/81536958)

    主要组件:服务器Server,服务Service,连接器Connector、容器Container。
在这里插入图片描述
    一个Container容器和一个或多个Connector组合在一起,加上其他一些支持的组件共同组成一个Service服务,有了Service服务便可以对外提供能力了,但是Service服务的生存需要一个环境,这个环境便是Server服务器,Server组件为Service服务的正常使用提供了生存环境,Server组件可以同时管理一个或多个Service服务。

1.缺省端口是多少,怎么修改?

答:
    找到Tomcat目录下的conf文件夹
    进入conf文件夹里面找到server.xml文件
    打开server.xml文件
    在server.xml文件里面找到下列信息

  <Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

    把port=”8080″改成port=”8888″,并且保存。启动Tomcat,并且在IE浏览器里面的地址栏输入http://127.0.0.1:8888/。

2. 有哪几种Connector 运行模式(优化)?

答:
(1)bio(blocking I/O)【同步且阻塞IO】。
(2)nio(non-blocking I/O)【默认,同步阻塞或同步非阻塞IO】
(3)apr(Apache Portable Runtime/Apache可移植运行库)【Tomcat将以 JNI 的形式调用 Apache HTTP 服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地 提高Tomcat对静态文件的处理性能】
    下面是配置Tomcat运行模式改成是NIO模式,并配置连接池相关参数来进行优化:

 <!--<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />--><!-- protocol 启用 nio模式,(tomcat8默认使用的是nio)(apr模式利用系统级异步io) --><!-- minProcessors最小空闲连接线程数--><!-- maxProcessors最大连接线程数--><!-- acceptCount允许的最大连接数,应大于等于maxProcessors--><!-- enableLookups 如果为true,requst.getRemoteHost会执行DNS查找,反向解析ip对应域名或主机名--><Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"redirectPort="8443maxThreads=500” minSpareThreads=100” maxSpareThreads=200”acceptCount="200"enableLookups="false"       />

    apr模式启动起来是比较复杂的,详情可参考:http://blog.csdn.net/wanglei_storage/article/details/50225779
    对于bio,nio,nio.2的理解可参考:http://blog.csdn.net/itismelzp/article/details/50886009

3.三种部署方式?

(1)直接把Web项目放在webapps下,Tomcat会自动将其部署
(2)在server.xml文件上配置节点,设置相关的属性即可:
path表示的是访问时输入的web项目名,docBase表示的是站点目录的绝对路径

(3)通过 Catalina 来进行配置:
进入到 conf\Catalina\localhost 文件下,创建一个 xml 文件, 该文件的名字就是站点的名字。
编写XML的方式来进行设置。
在这里插入图片描述

xml文件的代码如下,docBase是你web站点的绝对路径
<?xml version="1.0" encoding="UTF-8"?> 
<Context docBase="D:\web1" reloadable="true"> 
</Context> 

4.Tomcat容器是如何创建servlet类实例?用到了什么原理?

答:
    当容器启动时,会读取在 webapps 目录下所有的web应用中的 web.xml 文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。

5.如何优化?

答:

5.1 优化连接配置。

    这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,修改连接数,关闭客户端DNS查询。(在聊天室项目里我改了,两个参数最好是运行内存的一半。)

参数解释:
(1)URIEncoding=”UTF-8″ :使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译。
(2)maxSpareThreads : 如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。
(3)minSpareThreads : 最小备用线程数,tomcat启动时的初始化的线程数。
(4)enableLookups: 这个功效和Apache中的HostnameLookups一样,设为关闭。
(5)connectionTimeout : connectionTimeout为网络连接超时时间毫秒数。
(6)maxThreads : maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。
(7)acceptCount : acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection
(8)maxProcessors与minProcessors : 在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。通常Windows是1000个左右,Linux是2000个左右。
(9)useURIValidationHack:
    我们来看一下tomcat中的一段源码:

if (connector.getUseURIValidationHack()) {String uri = validate(request.getRequestURI());if (uri == null) {res.setStatus(400);res.setMessage(Invalid URI);throw new IOException(Invalid URI);} else {req.requestURI().setString(uri);// Redoing the URI decodingreq.decodedURI().duplicate(req.requestURI());req.getURLDecoder().convert(req.decodedURI(), true);

    可以看到如果把 useURIValidationHack 设成”false”,可以减少它对一些 url 的不必要的检查从而减省开销。
(10)enableLookups=”false”
    为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值。
(11)disableUploadTimeout :类似于Apache中的keeyalive一样
(12)给Tomcat配置gzip压缩(HTTP压缩)功能

compression=”on”【打开压缩功能】compressionMinSize=2048″【启用压缩的输出内容大小】
compressableMimeType=”text/html,text/xml,text/JavaScript,text/css,text/plain”【压缩类型】

    HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,javascript , Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。
(    最后不要忘了把8443端口的地方也加上同样的配置,因为如果我们走https 协议的话,我们将会用到8443端口这个段的配置。 ???我怎么没懂 )

<!–enable tomcat ssl–><Connector port=8443″ protocol=HTTP/1.1URIEncoding=UTF-8″ minSpareThreads=25″ maxSpareThreads=75″enableLookups=false” disableUploadTimeout=true” connectionTimeout=20000″acceptCount=300″ maxThreads=300″ maxProcessors=1000″ minProcessors=5″useURIValidationHack=false”compression=”on” compressionMinSize=2048″compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”SSLEnabled=true”scheme=”https” secure=true”clientAuth=false” sslProtocol=TLS”keystoreFile=”d:/tomcat2/conf/shnlap93.jks” keystorePass=”aaaaaa”/>
5.2 内存调优

    内存方式的设置是在 catalina.sh 中,调整一下JAVA_OPTS变量即可,因为后面的启动参数会把JAVA_OPTS作为JVM的启动参数来处理。
具体设置如下:

JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4" 

其各项参数如下:
-Xmx3550m:设置JVM最大可用内存为3550M。
-Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m:设置持久代大小为16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

5.3垃圾回收策略调优

    垃圾回收的设置也是在catalina.sh中,调整JAVA_OPTS变量。
    具体设置如下:

JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC  -XX:MaxGCPauseMillis=100" 

    具体的垃圾回收策略及相应策略的各项参数如下:
串行收集器(JDK1.5以前主要的回收方式)
-XX:+UseSerialGC:设置串行收集器
并行收集器(吞吐量优先)
示例:

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC  -XX:MaxGCPauseMillis=100 

-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集
-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。
-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。
并发收集器(响应时间优先)
示例:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC
-XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。
-XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。
-XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片

5.4 共享session处理

    目前的处理方式有如下几种:
(1).使用Tomcat本身的Session复制功能
参考http://ajita.iteye.com/blog/1715312(Session复制的配置)
方案的有点是配置简单,缺点是当集群数量较多时,Session复制的时间会比较长,影响响应的效率
(2).使用第三方来存放共享Session
目前用的较多的是使用memcached来管理共享Session,借助于memcached-sesson-manager来进行Tomcat的Session管理
参考http://ajita.iteye.com/blog/1716320(使用MSM管理Tomcat集群session)
(3).使用黏性session的策略
    对于会话要求不太强(不涉及到计费,失败了允许重新请求下等)的场合,同一个用户的session可以由nginx或者apache交给同一个Tomcat来处理,这就是所谓的session sticky策略,目前应用也比较多 。参考:http://ajita.iteye.com/blog/1848665(tomcat session sticky)
nginx默认不包含session sticky模块,需要重新编译才行(windows下我也不知道怎么重新编译)
    优点是处理效率高多了,缺点是强会话要求的场合不合适 。
    对于部署在局域网内其它机器上的Tomcat,可以打开JMX监控端口,局域网其它机器就可以通过这个端口查看一些常用的参数(但一些比较复杂的功能不支持),同样是在JVM启动参数中配置即可,配置如下:

-Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false 

-Djava.rmi.server.hostname=192.168.71.38 设置JVM的JMS监控监听的IP地址,主要是为了防止错误的监听成127.0.0.1这个内网地址
-Dcom.sun.management.jmxremote.port=1090 设置JVM的JMS监控的端口
-Dcom.sun.management.jmxremote.ssl=false 设置JVM的JMS监控不实用SSL
-Dcom.sun.management.jmxremote.authenticate=false 设置JVM的JMS监控不需要认证

6.关于Tomcat的session数目

    这个可以直接从Tomcat的web管理界面去查看即可 ;或者借助于第三方工具Lambda Probe来查看,它相对于Tomcat自带的管理稍微多了点功能,但也不多 。

7.监视Tomcat的内存使用情况

    使用JDK自带的jconsole可以比较明了的看到内存的使用情况,线程的状态,当前加载的类的总量等;
    JDK自带的jvisualvm可以下载插件(如GC等),可以查看更丰富的信息。如果是分析本地的Tomcat的话,还可以进行内存抽样等,检查每个类的使用情况。

8.打印类的加载情况及对象的回收情况

    这个可以通过配置JVM的启动参数,打印这些信息(到屏幕(默认也会到catalina.log中)或者文件),具体参数如下:

-XX:+PrintGC:输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs] 
-XX:+PrintGCDetails:输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs] 

-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上面两个混合使用,输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用。输出形式:Application time: 0.5291524 seconds
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间。可与上面混合使用。输出形式:Total time for which application threads were stopped: 0.0468229 seconds
-XX:PrintHeapAtGC: 打印GC前后的详细堆栈信息
-Xloggc:filename:与上面几个配合使用,把相关日志信息记录到文件以便分析
-verbose:class 监视加载的类的情况
-verbose:gc 在虚拟机发生内存回收时在输出设备显示信息
-verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息

9.Tomcat一个请求的完整过程

Ng:(nginx)upstream yy_001{server 10.99.99.99:8080; server 10.99.99.100:8080; hash $**; healthcheck_enabled; healthcheck_delay 3000; healthcheck_timeout 1000; healthcheck_failcount 2; healthcheck_send 'GET /healthcheck.html HTTP/1.0' 'Host: wo.com' 'Connection: close'; }server {include base.conf;server_name  wo.de.tian;...location /yy/ { proxy_pass http://yy_001;}

    首先 DNS 解析 wo.de.tian机器,一般是ng服务器ip地址 。
    然后 ng根据 server 的配置,寻找路径为 yy/的机器列表,IP和端口
    最后 选择其中一台机器进行访问—->下面为详细过程:
(1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector 获得
(2) Connector 把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
(3) Engine 获得请求 localhost/yy/index.jsp,匹配它所拥有的所有虚拟主机Host
(4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
(5) localhost Host获得请求/yy/index.jsp,匹配它所拥有的所有Context
(6) Host匹配到路径为/yy的Context(如果匹配不到就把该请求交给路径名为”“的Context去处理)
(7) path=”/yy”的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
(8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
(9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
(10)Context把执行完了之后的HttpServletResponse对象返回给Host
(11)Host 把 HttpServletResponse 对象返回给Engine
(12)Engine 把 HttpServletResponse 对象返回给Connector
(13)Connector 把 HttpServletResponse 对象返回给客户 browser

10.工作模式

    Tomcat是一个 JSP/Servlet 容器。其作为Servlet 容器,有三种工作模式:

  • 独立的Servlet容器、
  • 进程内的Servlet容器、
  • 进程外的Servlet容器

    进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:
    Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;
    Tomcat作为独立服务器:请求来自于web浏览器。

二、Servlet

【用Java编写的Server端程序】

在这里插入图片描述
    Tomcat 的容器等级中,Context 容器直接管理 Servlet 在容器中的包装类 Wrapper,所以 Context 容器如何运行将直接影响 Servlet 的工作方式。
    从上图可以看出 Tomcat 的容器分为四个等级,真正管理 Servlet 的容器是 Context 容器,一个 Context 对应一个 Web 工程,每个 Web 应用只有一个上下文,在 Tomcat 的配置文件中可以很容易发现这一点,如下:

 <Context path="/projectOne " docBase="D:\projects\projectOne" reloadable="true" />

1.Servlet的生存周期

    Servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。
    Web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。
在这里插入图片描述
    Servlet处于服务器进程中,它通过多线程方式运行其 service 方法,一个实例可以服务于多个请求,并且其实例一般不会销毁。

2.forward() 与redirect()的区别?

    forward是 服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,其实客户端浏览器只发了次请求,所以它的地址栏中还是原来的地址,session,request参数都可以获取。
    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,相当于 客户端浏览器发送了次请求。
    redirect()方法会创建一个新的请求,而forward()方法只是把请求转发到一个新的目标上。重定向(redirect)以后,之前请求作用域范围以内的对象就失效了,因为会产生一个新的请求,而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。

3.JSP和Servlet有哪些相同点和不同点

    JSP 是 Servlet 技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。    Servlet 和 JSP 最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。 JSP侧重于视图,Servlet主要用于控制逻辑。

http://www.lbrq.cn/news/2632609.html

相关文章:

  • 二人对战的微信小程序seo网站免费优化软件
  • 建设政府网站目标在线域名查询网站
  • 建个网站平台需要多少钱最近新闻今日头条
  • 苏州新区网站制作建设推旺道seo优化
  • 用微信公众平台做分类广告网站长春网站制作推广
  • WordPress多种类文件上传推广seo公司
  • 南充哪里做网站排超联赛积分榜
  • 网站建设方案平台架构网站优化推广方法
  • 怎么用phpcmf做网站网络运营与推广
  • 仿网站视频教程重庆seo排名技术
  • 官方网站的推广策划怎么做广州网站营销推广
  • 求一个网站怎么申请域名建立网站
  • 织梦cms怎么搭建网站网站首页制作网站
  • 做3d效果图有什么好网站网站展示型推广
  • 阿里云企业网站怎么建设写一篇软文多少钱
  • intitle 网站建设优化服务是什么意思
  • 北京移动官网网站建设推广网络广告
  • 做开发房地产网站可行吗株洲24小时新闻
  • wordpress中调用分类目录文章列表seo优化排名
  • 摄影网站app外贸网站推广与优化
  • 政府网站集约化建设情况四种营销策略
  • 防伪网站怎么做爱站seo工具包下载
  • 适合国人的wordpress主题福州百度快照优化
  • 酒店网站的建设企业培训网
  • 商丘网站建设略奥网服装市场调研报告
  • 家用电脑做网站免费seo网站诊断免费
  • 南昌网站建设有限公司网站流量统计系统
  • 北京工商局网站如何做股东变更百度网站排名搜行者seo
  • 给网站做备案合肥网站推广优化公司
  • 泉州高端网站建设小程序开发一个多少钱啊
  • Java学习进阶--集合体系结构
  • 【LeetCode】set和map相关算法题 前K个高频单词、随机链表的复制、两个数组的交集、环形链表
  • 高并发内存池 设计PageCache(4)
  • 内网穿透原理和部署教程
  • 笔记html模板
  • Java Stream API 详解(Java 8+)