Tomcat(二).web容器Tomcat知识点

目录

  1. WEB服务器介绍
  2. Tomcat服务器介绍
  3. Tomcat下载、安装、启动
  4. 端口修改
  5. 手动创建静态web应用
  6. Eclipse配置Tomcat
  7. 使用eclipse开发Javaweb项目
  8. 注意:eclipse部署项目后,项目文件并不在tomcat中的webapps文件夹下
  9. tomcat加入项目后首次启动报错:
    Java项目启动时候报Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 解决办法:Java项目启动时候报Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 解决办法 - 大象无形01 - 博客园

一.WEB服务器介绍

Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache、 Nginx 、IIS。

注意:web服务器、Servlet引擎/JSP引擎等于Servlet/JSP容器

  1. Tomcat是常见的免费的web服务器,是一个Servlet/JSP容器.(Web服务器是可以向发出请求的浏览器提供文档的程序)。
  2. JSP引擎与JSP容器指的是同样的东西,是用来管理和运行Web应用程序的软件,而安装了JSP引擎/Servlet引擎的计算机就是Web服务器。
  3. Servlet容器是运行Servlet、jsp、filter等的软件环境。主要任务是创建Servlet、管理servlet的生命周期
  4. Jsp经编译后就变成了Servlet。(Jsp的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将Jsp的代码编译成JVM能够识别的java类)

二.Tomcat服务器介绍

一.概念

Tomcat是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。Tomcat Server是根据servlet和JSP规范进行执行的,因此我们就可以说Tomcat Server也实行了Apache-Jakarta规范且比绝大多数商业应用软件服务器要好。

Tomcat是Java Servlet 2.2和JavaServer Pages 1.1技术的标准实现,是基于Apache许可证下开发的自由软件。Tomcat是完全重写的Servlet API 2.2和JSP 1.1兼容的Servlet/JSP容器。Tomcat使用了JServ的一些代码,特别是Apache服务适配器。随着Catalina Servlet引擎的出现,Tomcat第四版号的性能得到提升,使得它成为一个值得考虑的Servlet/JSP容器,因此许多WEB服务器都是采用Tomcat。

二.程序管理

  1. Tomcat是常见的免费的web服务器.(file:d:/test.html与http://12306.com/index.html 这样的形式的差别就是应为web服务器的差别)
  2. Tomcat提供另一个管理程序:manager,用于部署到Tomcat服务器中的web应用程序。
  3. 要访问manager web应用程序,需要添加具有管理员权限的账号,编辑conf目录下的Tomcat-users.xml文件,添加manager角色,设置用户名和密码

三.目录结构

Tomcat的目录结构详细介绍

tomcat logs 目录下各日志文件的解析

tomcat每次启动时,自动在logs目录下生产以下日志文件,按照日期自动备份。可以帮助我们更好的找出错误。

几个重要文件说明: 

  1. catalina.out:linux下所有的日志都在catalina.out中
  2. catalina.日期.log
    主要是记录tomcat启动时候的信息;
    启动的JVM参数以及操作系统等日志信息;
  3. host-manager.日期.log
    估计是放tomcat的自带的manager项目的日志信息的,也没有看到有什么重要的日志信息。
  4. localhost.日期.log
    类似于catalina日志,可是信息没有catalina全;
  5. localhost_access_log.日期.txt
    存放访问tomcat的请求的所有地址以及请求的路径、时间,请求协议以及返回码等信息(重要)
  6. manager.日志.log
    估计也是manager项目专有的日志文件,看不出有什么重要的信息。

四.web程序结构

说明:

  • 一个web应用程序是由一组Servlet,HTML页面,类,以及其他的资源组成的运行在web服务器上的完整的应用程序,以一种结构画的层次的目录形式存在
  • 组成web应用程序的这些文件要部署在相应的目录层次中,根目录代表整个web应用程序的“根”
  • 通常将web应用程序的目录放在tomcat/webapps目录下,在webapps目录下的每一个子目录都是一个独立的web应用程序,子目录的名字就是web应用程序的名字,也即是web应用程序的“根”。用户通过web应用程序的“根”来访问应用程序的资源。

三.Tomcat下载、安装、启动

  1. 官网下载
  2. 安装
    注意有安装版和解压版,本人使用的解压版
  3. 解压后,双击bin/startup启动
  4. 成功启动Tomcat后,通过访问http://localhost:8080/便可以使用Tomcat自带的一些web应用了。假如一切顺利的话,应该能够看到以下的页面:
  5. 点击Manager App,可以看到发布的项目,需要设置密码,具体步骤linux下安装tomcat-8.5_yiguang_820的博客-CSDN博客_linux安装tomcat8.5

四.端口修改

端口大全:TCP/UDP常见端口

tomcat默认的端口号是8080,可以通过配置把端口号修改成80

  1. tomcat的端口配置相关信息在 Tomcat安装目录\conf\server.xml中
    server.xml 记录了非常多的tomcat配置信息,其中就包括端口
  2. 重启tomcat,80端口就是web服务默认的端口号,所以就不需要显式写这个端口号了。
  3. 端口被占用
    1. 方法一:可以修改端口
    2. 方法二:找到端口被占用的程序是哪一个 ,然后再关闭对应的程序即可
      1. 步骤 1 : 查看80端口被哪些程序占用了
        使用命令 netstat -ano|findstr "80" ,查看 端口号包含"80"的占用情况
        查看80端口被哪些程序占用了
        查询结果找到 80,8009,8005 (这三个都包含80)。 
        对应的pid(process id) 进程id 是182
      2. 步骤2:根据pid(进程id) 查询对应的应用程序
        使用命令: tasklist|findstr "1828",1828根据上一步找到的对应的pid
        根据pid(进程id) 查询对应的应用程序
        发现是一个java.exe程序占用了80端口
      3. 步骤3:根据名称 结束该程序
        最后使用  taskkill /f /t /im java.exe,结束java.exe
        结束成功会提示:
        成功: 已终止 。。。
        根据名称 结束该程序

五.手动创建静态web应用

详细步骤:

  1. 在eclipse新建一个Java project
  2. 在Java项目下创建web开发的目录结构

  3. 将servlet-api.jar包放在lib目录下,并导入。(servlet-api.jar在 apache-tomcat-8.5.39\lib 目录下)
  4. 在src下新建test包,创建一个TestServlet类
    package test;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class TestServlet implements Servlet{
    
    	@Override
    	public void destroy() {
    		// TODO Auto-generated method stub
    	}
    
    	@Override
    	public ServletConfig getServletConfig() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public String getServletInfo() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public void init(ServletConfig arg0) throws ServletException {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
    		String name=request.getParameter("username");
    		String password=request.getParameter("pwd");
    		
    		response.setContentType("text/html");
    		response.setCharacterEncoding("utf8");
    		PrintWriter out=response.getWriter();
    		out.println("<html><head></head>");
    		out.println("<body>");
    		out.println("<h1>使用get方法读取数据</h1><p>用户名:"+name+"</p><p>密码:"+password+"</p>");
    		out.println("</body>");
    		out.println("</html>");
    		
    		out.flush();
    		out.close();
    
    	}
    
    }
    
  5. 需要的将TestServlet类编译后的class文件(含包)复制到classes的目录下
    1. 方法一:手动复制
      1. 先复制一份servlet-api.jar放在TestServlet.java文件的同一目录下
      2. 在命令行编译的时候带上classpath的路径如下: 
        javac -classpath servlet-api.jar TestServlet.java
      3. 然后将编译后的class文件放在classes目录下(需要带上包)
    2. 方法二:​​​​使用Eclipse可以如下操作
      步骤: 
      项目右键->properties->Java Build Path->Source->右下角的 Brower-> 指定位置是 helloServelt1/helloServlet/WEB-INF/classes。
      为什么要有这一步? 在ecilpse中默认输出的class是在bin目录下,但是tomcat启动之后,在默认情况下,不会去bin目录找这些class文件,而是到WEB-INF/classes这个目录下去寻找。 所以通过这一步的配置,使得eclipse的class文件输出到WEB-INF/classes目录下,那么这样就和tomcat兼容了。
  6. 在WebContent目录下新建一个login.html文件:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>登录页面</title>
    </head>
    <body>
    	<form action="login">
    		用户名:<input type="text" name="username"/></br>
    		密码:<input type="password" name="pwd"/></br>
    		<input type="submit" value="登录"/>
    	</form>
    </body>
    </html>
  7. 配置web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app>
     
        <servlet>
            <servlet-name>Servlet1</servlet-name>
            <servlet-class>test.TestServlet</servlet-class>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>Servlet1</servlet-name>
            <url-pattern>/login</url-pattern>
        </servlet-mapping>
    
        <welcome-file-list>
            <welcome-file>login.html</welcome-file>
            <welcome-file>login.xhtml</welcome-file>
            <welcome-file>login.htm</welcome-file>
            <welcome-file>login.jsp</welcome-file>
        </welcome-file-list>
     
    </web-app>
  8. 把helloServlet目录(注意不是helloServlet1项目)复制到Tomcat的webapps目录下
  9. 在浏览器的地址栏中输入:http://localhost:8080/helloServlet/login.html

六.Eclipse配置Tomcat

  1. 使用javaee版的eclipse开发动态的web工程(Javaweb项目)
  2. 把开发选项切换到Javaee
  3. 可以在window -> show view 中找到package Explorer,并把其拖到开发取得左边
  4. 将Eclipse关联安装的Tomcat
    File ->new -> other -> server (选择安装的版本号,然后关联到Tomcat安装的目录)
  5. 在Window ——> show view —>控制台中servers—>tomcat可以关闭、开启、修改
  6. 完成

七.使用eclipse开发Javaweb项目

  1. 新建一个Dynamic Web Project
  2. 将web.xml放在WEB-INF目录下
  3. 在WebContent目录下创建一个hello.jsp文件,添加一行如下代码:
    <b>hello world</b>
  4. 项目结构
  5. 可以通过run on server来运行web项目(如果控制台server->tomcat是关闭的,运行项目的时候会自动开启)
  6. 同样可以将此项目复制到Tomcat安装目录下/webapps下访问

八.eclipse部署项目后,项目文件并不在tomcat中的webapps文件夹下

一、发现问题 
在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并没有出现所建立的工程名字。 
二、验证 
很明显项目并没有自动部署到Tomcat的Webapps中而是部署在了别的容器中。在内置浏览器中输入http://localhost:8080/webDemo/login.jsp可正常打开。但在外部浏览器上打开http://localhost:8080时确没有出现所期望的小猫画面。 
三、原因 
eclipse不像MyEclipse默认将项目部署到tomcat安装目录下的webapps中,而默认部署到工作目录下的.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps中,tmp1文件夹里面存放着该项目的信息。 
四、修改 
为了使项目默认部署到tomcat安装目录下的webapps中,show view—>servers—>找到需要修改的tomcat—>右击 

  1. 停止eclipse内的Tomcat服务器(stop) 
  2. 删除该容器中部署的项目(add and remove) 
  3. 清除该容器相关数据(clean) 
  4. 打开tomcat的修改界面(open) 
  5. 找到servers location,选择第二个(User tomcat Installation) 
  6. 修改deploy path为webapps 
  7. 保存关闭 

需要说明的是①②③必须操作,否则下面的步骤会被置灰无法操作。

九.tomcat加入项目后首次启动报错

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 

At least one of these environment variable is needed to run this program

这种情况了,

解决办法:

首先查看环境变量:

vim  /etc/profile

找到JAVA_HOME

把路径记录下,编辑文件/usr/local/tomcat/bin/catalina.sh  (有可能你的路径和我的不一样,按照自己的路径来修改)

添加到文件中的第二行

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值