设为首页 收藏本站
查看: 1215|回复: 0

[经验分享] Tomcat基本入门知识及发布,虚拟访问及启动碰到的错误,虚拟目录,虚拟路径,各种Tomcat的配置

[复制链接]

尚未签到

发表于 2017-12-26 14:15:10 | 显示全部楼层 |阅读模式
Tomcat容器入门介绍
  转自javaresearch.com由timgball 整理
  Tomcat是一个免费的开源Web服务器,最新版本是5.5.1,支持Servlet2.4,JSP2.0,非常适合初学者学习Java Web开发。下面是一个简单的Tutorial:[安装Tomcat],在安装Tomcat之前,必须首先安装JDK1.4,因为Tomcat本身是纯Java程序,需要JVM运行,此外JSP页面需要javac来编译运行,因此必须安装JDK(单装JRE不行)。然后从Tomcat官方站点下载最新版的Tomcat:Windows版本:http://apache.linuxforum.net/dist/jakarta/tomcat-5/v5.5.1/bin/jakarta-tomcat-5.5.1.zip ,Linux版本:http://apache.linuxforum.net/dist/jakarta/tomcat-5/v5.5.1/bin/jakarta-tomcat-5.5.1.tar.gz
  Tomcat不需安装,直接解压到某个目录即可(请注意整个路径不要有中文名)。
[配置Tomcat]

  先设置如下环境变量:
  JAVA_HOME = <JDK安装目录>
  TOMCAT_HOME = <Tomcat根目录>
  在Path最后附加:
  Path = ......;%JAVA_HOME%/bin
  如果使用linux,请用export设置环境变量。
  然后打开控制台窗口,输入javac,如果能够运行,说明能找到JDK的编译器,输入java -version,如果显示1.4.x_xx则配置正确,否则检查是否安装了低版本的JDK(比如1.3版本),如果有低版本的JDK,把它从Path中移除即可。
[启动和关闭Tomcat]

  打开目录%TOMCAT_HOME%/bin,运行startup.bat(linux下是startup.sh),稍等片刻,直到出现信息: Server startup in XXXXX ms表示启动成功!要关闭Tomcat,最好不要直接关掉控制台窗口,运行%TOMCAT_HOME%/bin/shutdown.bat(linux下是shutdown.sh)。
[第一个JSP程序]

  运行在Tomcat的Web程序全部放在%TOMCAT_HOME%/webapps下,每个应用单独一个目录,我们开始写第一个"Hello, world"JSP页面。
  首先,我们在%TOMCAT_HOME%/webapps下新建一个hello目录,作为整个Web应用程序的根目录,然后在hello目录下新建hello.jsp,用任何文本编辑器输入以下内容:
  <% out.println("Hello, world."); %>
  然后启动Tomcat,打开浏览器,输入http://localhost:8080/hello/hello.jsp,稍等片刻,浏览器显示“Hello, world.”我们的第一个JSP运行成功!
[Web开发基础]

  J2EE的Web应用程序有标准的格式,我们先创建如下结构的目录(请严格区分大小写):
  hello |
  +- WEB-INF     |
  +->  +- lib
  +- web.xml
  所有需要的class文件均以WEB-INF/classes/为根目录按包名存放,所有的jar文件全部放在WEB-INF/lib下,Web服务器(比如Tomcat)会自动把classes和lib下的所有jar文件动态添加到CLASSPATH中,其中classes目录优先级高,如果classes和lib中某个jar的class全名相同,则只会找到classes下的文件。
  WEB-INF/web.xml是标准配置文件,负责注册Servlet,Filter及其它用到的资源。在我们的hello应用中,因为没有web.xml,Tomcat会使用缺省的配置文件(就是tomcat自带的web.xml)。
  一般说来,自己写的class包括servlets,filter,javaBean等编译后放在classes目录下,用到的第三方jar(如struts.jar)放在lib下。
  JSP文件可放在根目录下的任意位置,但是位置不同会影响URL的格式。以上面的hello应用为例,我们指定hello/hello.jsp,则URL为http://localhost:8080/hello/hello.jsp,若是放在hello/admin/hello.jsp,则相应的URL变为http://localhost:8080/hello/admin/hello.jsp,若是放在WEB-INF下,则用户不可直接访问此JSP文件,只能通过RequestDispatch间接访问,此方法可向用户屏蔽真实的URL,在struts等Web框架中被广泛使用。
[发布Web应用程序]

  发布Web应用程序非常简单,直接使用jar命令将整个hello目录打包,命名为xxx.war,然后复制到另一台计算机的%TOMCAT_HOME%/webapps/下(或者别的Web服务器如Resin,WebLogic也可),启动服务器,它会自动找到这个war文件并解压安装。
  ./catalina.sh start  开启tomcat服务
  ./catalina.sh stop   关闭tomcat服务

Tomcat配置异常及其解决

Tomcat配置异常及其解决
1、JAVA_HOME 配置错误,或者没有配置
  这时候,可以按照上面的步骤在来一次,在命令行中输入Java -version,如果显示
DSC0000.jpg

  就表示成功了。
2、如果你的机器已经占有了8080 端口,则无法启动
  解决方法
  (1) 你可以8080 先关闭
  netstat –an
  netstat –anb 来查看谁占用该8080
  (2) 主动改变tomcat的端口.
  到 conf/server.xml 文件中修改
DSC0001.jpg

3、 能够正常启动,但是会导航到另外一个页面
  去修改工具->管理加载项,把默认的导航给禁用即可
4、浏览器显示404 Not Found
  在访问 tomcat时候,一定要保证 tomcat 服务器是启动,不然就会出现这种错误。

Tomcat的目录结构文件
DSC0002.jpg
  bin: 启动和关闭tomcat的bat文件
  conf: 配置文件
  -->server.xml : 该文件用于配置和 server 相关的信息, 比如 tomcat启动端口后,配置Host,  配置Context (容器,它装载的有Wrapper,通过它可以对所有资源进行访问)即web应用
  -->web.xml : 该文件配置与 web应用(web应用就相当于是一个 web站点)
  -->tomcat-users.xml: 该文件用户配置tomcat 的用户密码 和 权限
  lib 目录: 该目录放置运行tomcat 运行需要的jar包
  logs 目录:存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息.
  webapps 目录: 该目录下,放置我们的web应用(web 站点), 比如:
  建立  web1 目录  下面放置我们的html 文件 jsp 文件..图片... 则 web1就被当做一个web应用管理起来(☞ 特别说明tomcat 6.0 以后支持 tomcat 5 版本 还有别的设置)
  work: 工作目录: 该目录用于存放jsp被访问后 生成的对应的 server文件 和.class文件

如何访问一个web应用的某个文件
DSC0003.jpg   应用程序通过端口与操作系统进行连接,因此可以通过系统的端口号访问到应用程序,这是应用程序之间通信的途径
  PS:想要访问一个WEB应用中的某个文件可以采用url(Uniform Resource Locator)统一资源定位符来访问,其格式如上。

Tomcat应用部署目录结构规范
DSC0004.jpg Tomcat管理虚拟目录
  需求:当希望将web应用部署到非webapps目录下时,换句话说,就是希望把非webapps目录下的web项目部署到tomcat中怎么解决这问题。
  PS:可以通过虚拟目录配置技术解决。
DSC0005.jpg

配置步骤
  1、找到server.xml文件
  2、编辑host节点,添加Context path
  //这里配置的设置都将成为,服务器找不到资源的第二方案,或者覆盖默认配置的方式
  <Context path="/应用名" docBase="web应用所在的绝对路径"/>
  例如:要访问该web应用根目录下的hello.html文件
  实际访问时输入的地址:http://localhost:8088/应用名/hello.html
  3、重启、重新部署生效
  还可以参考http://www.cnblogs.com/w-wfy/p/6242329.html
context的几个属性的说明
  path: 应用名称
  docbase:  web应用所在的绝对路径
  reloadable: 如果设为ture ,表示 tomcat 会自动更新 web应用,但是这个开销大,建议在开发过程中,可以设为true, 但是真的发布了,则应当设为false
  upackWAR: 如果设为 ture ,则自动解压,否则不自动解压.
  PS:war包的打包和Tomcat怎么部署war包可以使用搜索引擎找到。
Tomcat管理虚拟路径配置
  请问高人
  如何在项目里面的JSP页面显示D盘的图片,项目部署在E 盘,就是说 图片不是放在项目下的文件夹?
  解决方法:
  虚拟路径啊,假设你的工程叫 abc
  在 tomcat 的 server.xml 中设置
  <Context docBase="e:/pic" path="/abc/pic" />
  这样的话,就可以使用 http://localhost:8080/abc/pic 这个前缀访问 e:/pic 中的图片了。即jsp中
  <Context path="/" docBase="d:\web3" />
  //这里是说,如果上述path路径访问不到,就到docBase路径下访问
  </Host>
  (3) 在d:\web3 加入了一个 /WEB-INF/web.xml 把 hello2.html设为首页面,如果连端口都不希望带,则可以把tomcat的启动端口设为80即可.
  (4) 重启生效

Tomcat框架机制
DSC0006.jpg Tomcat配置默认主机
  在tomcat/conf/server.xml 文件
  <Engine name="Catalina" defaultHost="主机名">
  如:<Engine name="Catalina" defaultHost="www.myweb.com">
Tomcat配置线程池
  Connector是可以配置共享线程池的,其作用是在访问量多的情况下,自动增加线程数量,直到maxThread为止,访问量趋于平缓之后渐渐减少线程数量,最少到minSpareThreads。开启Tomcat,该线程池即有minSpareThread条线程。
[html] view plain copy  https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg

  • <Service name="Catalina">
  •   <Executor name="myThreadPool" namePrefix="catalina-exec-"
  •       maxThreads="50" minSpareThreads="10"/>
  •   <Connector port="8181" protocol="HTTP/1.1"
  •              connectionTimeout="20000"
  •              redirectPort="8443"
  •              executor="myThreadPool" />
  • </Service>

  Executor标签即为线程池
  maxThreads属性即为最大线程数
  minSpareThreads即为最小空闲的线程数
  Connector标签即为连接器
  executor属性即为指定线程池
  PS:Connector标签可以配置,maxThread,minSpareThreads两个属性,其作用和配置executor属性一样,但同时配置了executor和maxThread,minSpareThread。Connector会优先选择executor配置的线程池。
  PS:建议使用executor属性和Executor标签来配置线程池,这样不仅可设置的线程池参数更多,而且也可以实现几个Connector共享一个线程池的配置,注意:不是共享一个线程池。
Tomcat配置访问日志
[html] view plain copy  https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg

  • <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  •        prefix="localhost_access_log." suffix=".txt"
  •        pattern="%h %l %u %t "%r" %s %b" />
该配置为server.xml中的默认配置,其在Host标签下。
  className:类名,默认的访问日志类为org.apache.catalina.valves.AccessLogValve
  directory:文件存放目录,默认是:logs,其相对路径是Tomcat的主目录
  prefix:前缀
  suffix:后缀
  fileDateFormat:按照什么时间给日志切片(分成不同日志文件,防止单一日志文件过大)。官方文档的描述:The default value is yyyy-MM-dd. If you wish to rotate every hour, then set this value to yyyy-MM-dd.HH.
  rotatable:该属性是与fileDateFormat配套使用的,默认为true,如果设置为false,日志文件将不切片。
  pattern:输出文件的模式(格式)。
  有以下模式:(截取自官方文档)

  • %a - Remote IP address
  • %A - Local IP address
  • %b - Bytes sent, excluding HTTP headers, or '-' if zero
  • %B - Bytes sent, excluding HTTP headers
  • %h - Remote host name (or IP address if enableLookups for the connector is false)
  • %H - Request protocol
  • %l - Remote logical username from>
  • %m - Request method (GET, POST, etc.)
  • %p - Local port on which this request was received. See also %{xxx}p below.
  • %q - Query string (prepended with a '?' if it exists)
  • %r - First line of the request (method and request URI)
  • %s - HTTP status code of the response
  • %S - User session>
  • %t - Date and time, in Common Log Format
  • %u - Remote user that was authenticated (if any), else '-'
  • %U - Requested URL path
  • %v - Local server name
  • %D - Time taken to process the request, in millis
  • %T - Time taken to process the request, in seconds
  • %F - Time taken to commit the response, in millis
  • %I - Current request thread name (can compare later with stacktraces)
  There is also support to write information incoming or outgoing headers, cookies, session or request attributes and special timestamp formats. It is modeled after the Apache HTTP Server log configuration syntax. Each of them can be used multiple times with different xxx keys:

  • %{xxx}i write value of incoming header with name xxx
  • %{xxx}o write value of outgoing header with name xxx
  • %{xxx}c write value of cookie with name xxx
  • %{xxx}r write value of ServletRequest attribute with name xxx
  • %{xxx}s write value of HttpSession attribute with name xxx
  • %{xxx}p write local (server) port (xxx==local) or remote (client) port (xxx=remote)
  • %{xxx}t write timestamp at the end of the request formatted using the enhanced SimpleDateFormat pattern xxx

手工方式打WAR包
  第一步:进入到要打包的目录下,注意,目录结构必须符合Tomcat规范。
  SwitchdeMacBook-Pro:webapps switch$ cd Restaurant/
  第二步:使用jar cvf 打包后文件名 打包的文件夹
  SwitchdeMacBook-Pro:Restaurant switch$ jar cvf Restaurant.war .
  已添加清单
  正在添加: SoybeanMilk.html(输入 = 58) (输出 = 48)(压缩了 17%)
  正在添加: WEB-INF/(输入 = 0) (输出 = 0)(存储了 0%)
  正在添加: WEB-INF/classes/(输入 = 0) (输出 = 0)(存储了 0%)
  正在添加: WEB-INF/classes/com/(输入 = 0) (输出 = 0)(存储了 0%)
  正在添加: WEB-INF/classes/com/netease/(输入 = 0) (输出 = 0)(存储了 0%)
  正在添加: WEB-INF/classes/com/netease/NoodlesServlet.class(输入 = 1114) (输出 = 608)(压缩了 45%)
  正在添加: WEB-INF/classes/com/netease/NoodlesServlet.java(输入 = 740) (输出 = 318)(压缩了 57%)
  正在添加: WEB-INF/web.xml(输入 = 361) (输出 = 173)(压缩了 52%)
  PS:可以看到打包成功了
  SwitchdeMacBook-Pro:Restaurant switch$ ls
  Restaurant.war        SoybeanMilk.html    WEB-INF
  第三步:将打包好的文件移动至应用目录,默认为:Tomcat主目录下的webapps
  SwitchdeMacBook-Pro:Restaurant switch$ mv Restaurant.war ..
  PS:可以看到移动到了webapps目录下
  SwitchdeMacBook-Pro:Restaurant switch$ cd ..
  SwitchdeMacBook-Pro:webapps switch$ ls
  ROOT        Restaurant    Restaurant.war    docs        examples    host-manager    manager
  PS:这是将原来的应用删除
  SwitchdeMacBook-Pro:webapps switch$ rm -rf Restaurant
  PS:原来的应用已被删除
  SwitchdeMacBook-Pro:webapps switch$ ls
  ROOT        Restaurant.war    docs        examples    host-manager    manager
  PS:启动Tomcat
  SwitchdeMacBook-Pro:webapps switch$ ../bin/startup.sh
  Using CATALINA_BASE:   /Users/switch/apache-tomcat-7.0.70
  Using CATALINA_HOME:   /Users/switch/apache-tomcat-7.0.70
  Using CATALINA_TMPDIR: /Users/switch/apache-tomcat-7.0.70/temp
  Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

  Using>  Tomcat started.
  PS:访问该应用
  SwitchdeMacBook-Pro:webapps switch$ curl http://localhost:8080/Restaurant/noodles
  <html><body>
  <h1> Noodles with Tomcat</h1>
  </body></html>
  PS:可以看到webapps目录下自动生成了该war包对应的应用
  SwitchdeMacBook-Pro:webapps switch$ ls
  ROOT        Restaurant    Restaurant.war    docs        examples    host-manager    manager
  SwitchdeMacBook-Pro:webapps switch$
  ----------参考《Apache Tomcat 7 Configuration Reference (7.0.70) - The Valve Component》
  ----------参考《韩顺平.细说Servlet》

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-428248-1-1.html 上篇帖子: tomcat 组件研究二 下篇帖子: shell脚本重启tomcat
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表