zoukankan      html  css  js  c++  java
  • tomcat使用方法大全

    一、安装tomcat之后

    tomcat压缩包解压之后,进入webapps目录,可以看到如下webapp:

    • docs文档:这是一个静态页面集,不用启动tomcat也可以阅读
    • examples样例
    • hostmanager主机管理器
    • manager应用管理器
    • ROOT根目录:这个app可以访问以上四个app,这个app是默认的app,这个app十分简单,只有一些资源文件和一个jsp页面。

    安装完tomcat之后,在bin目录下启动startup.bat。在浏览器地址栏输入localhost:8080,仔细阅读首页,此页面包罗万象,可以进入到文档,可以进入到配置,是十分重要的资源索引。
    有了文档,不需要百度,不需要从官网上下载文档doc-full.zip,仔细阅读之,一切问题在这里都能找到答案。

    二、tomcat端口映射

    众所周知,在unix下,非root用户不能监听1~1024的端口号,原因是这些端口号都有特殊用途,是许多默认协议的默认端口号。tomcat默认端口号是8080,最好不要更改tomcat的端口号,通过端口映射的方式可以把80端口的请求转发到8080。

    方法一:配置iptables,把80端口转到8080

    在root账户下面运行一下命令:
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    注意:网上朋友的命令dport 前面都是 一个 -,通常都会报错。另外如果防火墙重新启动,该命令就会失效。
    可以使用下面的命令把该规则保存到iptables里面 :
    service iptables save

    方法二:使用Nginx

    这种方式是最为正规完善的方式,详见此文

    三、tomcat修改端口号

    强烈建议不要修改端口号,而是通过端口映射的方式:将80端口的请求转发到8080端口。
    tomcat默认端口号为8080,http服务的默认端口号为80。在浏览器地址栏输入ip或者域名之后,如果不输入端口号,默认就是80端口。
    修改tomcat目录下的conf/server.xml文件,service标签下的Connector可以有多个,再添加一个80端口的连接就可以了

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
      
    <Connector port="80" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    

    四、设置默认应用

    修改tomcat目录下的conf/server.xml文件,添加Context标签并设置docBase,需要注意在java中路径分隔符一律按照'/'来总是正确的。

    <Host name="localhost"  appBase="webapps"  
               unpackWARs="true" autoDeploy="true">  
           <!-- SingleSignOn valve, share authentication between web applications  
                Documentation at: /docs/config/valve.html -->  
           <!-- 
           <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> 
           -->  
           <!-- Access log processes all example.  
                Documentation at: /docs/config/valve.html  
                Note: The pattern used is equivalent to using pattern="common" -->  
           <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
                  prefix="localhost_access_log." suffix=".txt"  
                  pattern="%h %l %u %t "%r" %s %b" />  
        <Context path="" docBase="D:apacheapache-tomcat-7.0.26webappsOnlineExam">  
                <WatchedResource>WEB-INF/web.xml</WatchedResource>  
        </Context>  
    </Host> 
    

    实际上,上面介绍的这种方法乃是下策,上策是把webapp的名称直接改为ROOT,tomcat默认ROOT目录是默认webapp

    五、tomcat远程部署

    Tomcat安装成功后,在ip地址:8080上就可以看见熟悉的首页,在这个首页中,上方有一个manage app按钮,点击就可以进行应用管理了.这样就不需要使用ftp把war包传上去了.

    要想远程部署,需要更改两个地方,第一个地方比较容易发现,只要点击按钮,就会跳到一页,这页内容指导我们更改TOMCAT_HOME/conf/tomcat-users.xml目录,照着来就可以了.

    仍旧发现无法访问manage app,这是因为tomcat 8.5以后的版本,默认manage app这个应用不许远程访问,需要更改这个应用的配置文件,即:TOMCAT_HOME/webapps/manager/META-INF/context.xml,把这个文件中的ip地址限制那句话注释掉就可以了.

    <Context antiResourceLocking="false" privileged="true" >
      <!--Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1" /-->
    </Context>
    

    六、Tomcat解决中文乱码问题

    Tomcat默认使用的编码时ISO88591。
    URLEncode是一种将byte数组转化为ASCII码字符串的方式,而byte数组转化为真正的字符串是需要编码的。
    URLEncode+GBK、URLEncode+UTF8结果是不一样的。
    保守点的方法:把乱码用ISO88591转换回byte数组,将byte数组用utf8进行解码。

    String city = new String(request.getParameter("city").getBytes("ISO-8859-1"),"utf-8");  
    

    彻底一点的方法:把tomcat的默认URL编码设置为UTF8。
    在TOMCAT中的conf/server.xml中的Connector中添加两个设置

    useBodyEncodingForURI="true" //设置POST和GET使用相同编码
    URIEncoding="UTF-8" //对URI使用utf-8编码处理。
    

    七、tomcat启动太慢解决方案

    解决方法

    方法一:只在Tomcat环境中解决

    可以通过配置JRE使用非阻塞的Entropy Source。
    在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。
    加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。

    方法二:在JVM环境中解决

    在/dev目录下,ls | grep random可以找到random和urandom,查看random文件内容head random很慢,会卡住一段时间,head urandom却很快,我们需要做的就是更改随机源。

    打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:

    securerandom.source=file:/dev/random
    

    替换成

    securerandom.source=file:///dev/urandom
    

    问题原因

    原因
    Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID,这里花去了342秒,也即接近6分钟。

    SHA1PRNG算法是基于SHA-1算法实现且保密性较强的伪随机数生成器。

    在SHA1PRNG中,有一个种子产生器,它根据配置执行各种操作。

    1)如果java.security.egd属性或securerandom.source属性指定的是file:/dev/randomfile:/dev/urandom,那么JVM会使用本地种子产生器NativeSeedGenerator,它会调用super()方法,即调用SeedGenerator.URLSeedGenerator(/dev/random)方法进行初始化。

    2)如果java.security.egd属性或securerandom.source属性指定的是其它已存在的URL,那么会调用SeedGenerator.URLSeedGenerator(url)方法进行初始化。

    这就是为什么我们设置值为file:///dev/urandom或者值为file:/./dev/random都会起作用的原因。

    在这个实现中,产生器会评估熵池(entropy pool)中的噪声数量。随机数是从熵池中进行创建的。当读操作时,/dev/random设备会只返回熵池中噪声的随机字节。/dev/random非常适合那些需要非常高质量随机性的场景,比如一次性的支付或生成密钥的场景。

    当熵池为空时,来自/dev/random的读操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。

    那么什么是环境噪声?

    随机数产生器会手机来自设备驱动器和其它源的环境噪声数据,并放入熵池中。产生器会评估熵池中的噪声数据的数量。当熵池为空时,这个噪声数据的收集是比较花时间的。这就意味着,Tomcat在生产环境中使用熵池时,会被阻塞较长的时间。
    参考资料

  • 相关阅读:
    学习bootsect.s中经常会问到的问题
    c++资源之不完全导引(全文) (转载)
    bootsect.S (读核笔记系列)
    WAP开发FAQ
    学习使用groovy(翻译稿之第一章)
    "革命尚未成功,同志仍需努力!"
    JAVA中this用法小结(转)
    Android <Button>样式的设置方法
    最新SDK android开发环境搭建
    Android中的数据存取(一)Preference
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/6392324.html
Copyright © 2011-2022 走看看