总字符数: 12.88K

代码: 1.91K, 文本: 3.72K

预计阅读时间: 24 分钟

服务器简介

WEB服务器

主要支持的协议就是HTTP协议,Web服务器专门处理HTTP请求,通常情况下WEB服务器和HTTP服务器说的是同一回事.如:Apache、Nginx、IIS、Tomcat都属于Web服务器.

应用服务器

应用服务器通过各种协议来为客户端提供业务逻辑.

如:JBoss、Weblogic、WebSphere都属于应用服务器.

综上:

  1. Apache和Nginx是纯粹的Web服务器,而IIS和Tomcat因为具有了解释和执行服务器端代码的能力,可以称作为轻量级应用服务器.

  2. JBoss、Weblogic和WebSphere因为能提供强大的J2EE API功能,毫无疑问是绝对的应用服务器.

  3. Tomcat,它可以配合Web服务器Apache/Nginx一起使用,也可以作为应用服务器的辅助与应用服务器一起使用.

  4. Web服务器主要处理静态页面以及作为Servlet容器,解释和执行servlet/JSP,而应用服务器主要运行业务逻辑.

Tomcat与Web服务器

Apache是普通服务器,本身只支持静态网页(HTML普通网页),像php,cgi,jsp等动态网页就需要Tomcat来处理. Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,servlet).Tomcat是Apache的扩展.

Tomcat是一个支持Servlet和JSP技术的容器.Web服务器Apache、Nginx仅仅支持静态网页,对于支持动态网页就会显得无能为力,而Tomcat(Servlet和JSP能根据实时需要产生动态网页)既能为动态网页服务,又能为静态网页提供支持.尽管Tomcat没有通常的Web服务器快(通常的Web服务器都是用底层语言(如C/C++)编写,而Tomcat用纯Java编写)、功能也不如通常的Web服务器丰富.

一般来说,大型网站都是将Tomcat与Apache/Nginx结合,Apache/Nginx负责接受来自客户端的HTTP请求,然后将HTTP请求转发给Tomcat来处理.

为了提高性能,可以将一台Apache/Nginx连接多台tomcat实现负载均衡.

Tomcat与应用服务器

目前,Tomcat一直被认为是Servlet容器.然而,Tomcat并不仅仅如此,它还提供了JNDI和JMX的实现机制.尽管如此,Tomcat仍然还不能算是应用服务器,因为它不提供J2EE API的其他大多数支持.

目前许多的应用服务器通常把Tomcat作为它们Servlet容器.

对于开发者来说,如果是为了寻找Servlet、JSP、JNDI和JMX技术来生成Java Web应用的话,选择Tomcat是一个优秀的解决方案;但是为了寻找其他的J2EE API的支持,那么寻找一个应用服务器或者把Tomcat作为应用服务器的辅助是一个不错的解决方案;第三种方式是找到独立的J2EE API实现,然后把它们跟Tomcat结合起来使用,虽然整合会带来相关的问题,但是这种方式是最为有效的.

Tomcat web服务器软件

安装

Linux安装

1
2
3
4
5
6
7
8
9
10
# 新建目录
mkdir /usr/local/tomcat
# 进入目录
cd /usr/local/tomcat/
# 下载tomcat文件,具体版本可自行选择,这里我用的是8.0.30
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.30/bin/apache-tomcat-8.0.30.tar.gz
# 解压压缩包
tar -zxvf apache-tomcat-8.0.30.tar.gz
# 进入配置文件目录
cd /usr/local/tomcat/apache-tomcat-8.0.30/conf/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 修改tomcat端口,tomcat的默认端口号是8080
vim server.xml
# 以下选中的这个代码片段是设置HTTP请求的配置,其中可以看到8080和8443两个端口,8080就是HTTP的端口.
# 那么redirectPort属性的作用是什么呢?当用户用http请求某个资源,而该资源本身又被设置了必须要https方式访问,此时Tomcat会自动重定向到这个redirectPort设置的https端口.
# 可以将8080改为自己需要设置的端口号

# 启动tomcat
## 进入bin目录下
cd /usr/local/tomcat/apache-tomcat-8.0.30/bin/
# 启动tomcat
./startup.sh
# 后台启动
nohup ./shutdown.sh &
# 访问网址
http://192.168.64.170:8080/
# 关闭tomcat
./shutdown.sh
1
2
3
4
# 启动项目
# 进入安装包所放在的文件夹
cd /usr/local/tomcat/apache-tomcat-8.0.30/webapps/
# 将war包放置到此目录,如果是新tomcat将里面的文件全部删掉

Windows安装

安装jdk8
  1. 双击安装,并记住安装目录

  2. 配置环境变量

    1. 安装完成后,右击”我的电脑”,点击”属性”,选择”高级系统设置”;

    2. 选择”高级”选项卡,点击”环境变量”;

    3. 在 “系统变量” 中设置 3 项属性,JAVA_HOME、PATH、CLASSPATH(大小写无所谓),若已存在则点击”编辑”,不存在则点击”新建”.

      变量设置参数如下:

      • 变量名:JAVA_HOME

      • 变量值:C:\Program Files\Java\jdk1.8.0_201 // 要根据自己的实际路径配置

      • 变量名:CLASSPATH

      • 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; //记得前面有个”.”

        • 如果是新建的话不要输.;只需要输:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

      • 变量名:Path

      • 变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

    4. JAVA_HOME

    5. CLASSPATH输入/在已有的变量值后面添加

    6. 修改Path 变量由于 win10 的不同,当选中Path 变量的时候,系统会很方便的把所有不同路径都分开了,不会像 win7 或者 win8 那样连在一起

    7. 检查 打开 cmd,输入 java -version,出现以下版本号,说明配置成功了

安装tomcat
  1. 确定型号
  1. 型号讲解(通常下载最新版之前的那一版)

  2. 找到下载位置

  3. 进行下载这里下载Windows-64位

  4. 解压文件即可

  5. 配置Tomcat环境变量

    1. 配置jdk:如果使用Tomcat必须配置javahome

    2. 配置Tomcat:环境变量新建:变量名:CATALINA_HOME变量值:Tomcat所在路径(能看到目录简介页面的路径)

  6. 检验是否安装成功:打开目录bin下的startup.bat,出现启动时间则说明安装完成注意:bat是windows里面的,sh是Linux里面的

访问网址,成功显示http://localhost:8080/

Tomcat目录简介

1
2
3
4
5
6
7
bin      # 可执行文件(startup.bat-启动 shutdown.bat 关闭)
conf # 配置文件(server.xml)
lib # tomcat依赖的jar文件
log # 日志文件(记录出错等信息)
temp # 临时文件
webapps # 可执行的项目(将我们开发的项目放入该目录)
work # 存放由jsp翻译成的java,以及编辑成class文件(jsp->java->class)

Tomcat使用注意:

运行Tomcat时(startup.bat),可能会出现报错.

报错原因:Tomcat端口号冲突(默认端口号为8080,比较常见),建议修改端口号

修改方法:进入目录下的conf配置文件,进入到server.xml里面将端口号进行修改(修改为8888).

修改完重新运行即可因为我是全新环境,就不修改了

常见状态码:

404:资源部存在(常见)

200:一切正常(一般看不见)

403:权限不足(比如访问a目录,a目录设置不可见)

300/301/302:页面种定向(跳转)

500:服务器内部错误(代码错误,常见)502 网关错误

其他编码:积累

创建项目

在目录的webapps里面创建项目.

1、配置文件

需要有WEB-INF文件夹

1、进入ROOT里面复制WEB-INF文件夹

2、在新建的文件里面粘贴复制的WEB-INF文件夹,并进入添加两个文件夹,分别是classes和lib

2、创建项目

在JspProject-test下创建jsp项目记得显示出文件扩展名后在把后缀名改成.jsp

index.jsp内容:

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<title>测试</title>
</head>
<body>
hello jsp...
<!--这里面为jsp脚本,里面存放java代码-->
<%
out.print("hello word...");
%>
</body>
</html>

3、运行项目

  1. bin–>startup.bat 运行Tomcat

  2. 网页输入:localhost:8888/项目文件夹名称

  3. 运行完毕

  4. 关闭

    1. 正常关闭:

      1. bin/ shutdown. bat
      2. bin/startup.bat 进入到里面点击 ctrl+c
    2. 强制关闭:

      点击启动窗口的x

5、假如我在JspProject目录下再创建一个jsp文件

index2.jsp内容

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<title>jsp2</title>
</head>
<body>
hello jspla;sl;akdlaskdl;sakdl;sdlaksdlkl...
<%
out.print("hello word...");
%>
</body>
</html>

运行结果:

默认还是第一个文件

4、更改默认访问的jsp文件

问题:我们发现,浏览器默认访问index.jsp这个文件,那么该如何修改设置呢

解决:在项目的WEB-INF的web.xml中添加以下代码

1
2
3
4
5
//根据顺序优先打开,如果第一个打不开,就打开第二个,一次往下
<welcome-file-list>
<welcome-file>index2.jsp</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

完成

5、访问指定jsp文件

localhost:8888/项目文件夹名称/jsp文件名

配置虚拟路径

我们知道,我们所创建的项目都是在webapps里面创建的,其实这里的webapps就是一个虚拟路径,如果我想在别处创建项目,那么该如何修改虚拟路径呢?

方式一:任意地方创建项目

第一步:介绍

在conf文件夹中的server.xml中修改

1
2
3
<Host name="localhost"  appBase="webapps" # name="localhost" 本地虚拟路径在webapps里面
# appBase="webapps" 本身存在的虚拟路径
unpackWARs="true" autoDeploy="true">
第二步:配置其他虚拟路径

在Service.xml中host内配置Context标签,path+docbase属性。

  1. **path:**虚拟路径(相对路径[相对于webapps]和绝对路径)

  2. **docBase:**实际路径 实际的项目在哪里

  3. **reloadable:**如果这个属性设为 true,tomcat 服务器在运行状态下会监视在WEB-INF/classes 和 WEB-INF/lib 目录下 class 文件的改动,如果监测到有 class 文件被更新的,服务器会自动重新加载 Web 应用.

  4. **crossContext:**如果想在应用内调用 ServletContext.getContext()来返回在该虚拟主机上运行的其他 web application 的 request dispatcher,设为 true.在安全性很重要的环境中设为 false,使得 getContext()总是返回 null.缺省值为 false.

  5. **Debug:**与这个 Engine 关联的 Logger 记录的调试信息的详细程度.数字越大,输出越详细.如果没有指定,缺省为 0.

访问path,也就是访问docBase

path的相对路径:

1
<Context docBase="" path="/JspProject-test" /> # 一定要注意后面是一个/

path的绝对路径:

1
<Context docBase="" path="D:\JspProject-test" />

一般都用path的相对路径

实际路径:项目所在位置

1
<Context docBase="D:\JspProject-test" path="/JspProject"  reloadable = "true"/>

表示 我以后访问/JspProject,就是访问E:\Tomcat\虚拟路径文件夹\JspProject

配置后记得重启

将Tomcat集成到IDEA中,并创建和部署JavaEE项目

创建web项目

新版本IDEA
  1. 创建普通的Java工程文件
  1. 添加框架支持
  1. 选择Web Application,勾选web.xml
  1. 生成目录
  1. 将index.jsp内的内容改掉

  2. 配置tomcat

    1. 第一步:

    2. 第二步:引入选择本地

    3. 选择Tomcat的安装目录

  3. 点击修正

  4. 点击应用–>确定

  5. 导入jsp的jar包

  1. 启动测试

热部署

更新资源,不需要关闭原来运行的服务.比如我把网页进行一下改动,那么就不用关闭原来已经运行的服务,直接运行即可

URL访问地址设置

这个时候需要重启服务器

Tomcat运行原理分析

  1. Tomcat 是运行在 JVM 中的一个进程.它定义为[中间件],顾名思义,是一个在Java项目与JVM之间的中间容器.

  2. Web 项目的本质,是一大堆的资源文件和方法.Web 项目没有入口方法 ( main 方法),,意味着 Web 项目中的方法不会自动运行起来.

  3. Web项目部署进 Tomcat 的 webapp 中的目的是很明确的,那就是希望 Tomcat 去调用写好的方法去为客户端返回需要的资源和数据.

  4. Tomcat 可以运行起来,并调用写好的方法.那么,Tomcat 一定有一个 main 方法.

  5. 对于Tomcat 而言,它并不知道我们会有什么样的方法,这些都只是在项目被部署进 webapp下后才确定的,由此分析,必然用到了 Java 的反射来实现类的动态加载、实例化、获取方法、调用方法.但是我们部署到 Tomcat 的中的Web项目必须是按照规定好的接口来进行编写,以便进行调用.

  6. Tomcat 如何确定调用什么方法呢.这取决于客户端的请求,http://127.0.0.1:8080/JayKing.Tomcat.Study/index.java?show 这样的一个请求,通过 http 协议,在浏览器发往本机的 8080 端口,携带的参数 show 方法,包含此方法的路径为 JayKing.Tomcat.Study,文件名为:index.java.

原理总结

  1. Tomcat 需要 main 方法启动.

  2. Tomcat 需要监听本机上的某个端口.

  3. Tomcat 需要抓取此端口上来自客户端的链接并获得请求调用的方法与参数.

  4. Tomcat 需要根据请求调用的方法,动态地加载方法所在的类,完成类的实例化并通过该实例获得需要的方法最终将请求传入方法执行.

    1. 将结果返回给客户端( jsp/html 页面、 json/xml 字符串).