• Linux动态Web服务器(Tomcat)



    默认情况下,Apache只支持CGI这种古老的动态网页技术;如果要使Apache支持目前因特网和企业应用中广泛运用的JSP、PHP等的动态网页技术,还要安装第三方的软件或模块。

    一、动态网页介绍

    在互联网初期,大多数网页都是静态的,这意味着它们的内容是固定不变的,除非手动更改HTML代码,否则页面展示的信息将一直相同;然而,随着技术的发展,特别是随着用户对个性化和动态内容需求的增加,动态网页技术应运而生并迅速发展。

    动态网页的核心特点包括交互性、自动更新能力和能够根据不同用户或时间显示不同内容的能力;这些特性使得网站能够提供更为丰富和个性化的用户体验。例如,电子商务网站利用动态网页技术展示个性化的商品推荐,社交网络通过动态内容展示好友的最新动态等。

    HTML语言是制作网页的基本语言,但它只能编写出静态的网页。而动态网页技术则可以使网页根据访问者输入的信息做出不同的处理,返回不同的响应信息。目前主流的动态网页技术包括CGI、JSP、PHP、ASP等。

    从技术实现角度来看,动态网页主要依赖于服务器端脚本语言来生成。这些技术各有其特点和适用场景:

    • ASP:由微软开发,主要用于Windows系统下的IIS服务器。它允许使用VBScript和JScript等脚本语言嵌入到HTML中,便于快速开发但通常受限于Windows环境。
    • PHP:是一种开源的服务器端脚本语言,具有平台无关性,支持多种数据库,且易于学习。PHP广泛应用于各种操作系统和Web服务器上,是开发动态网站的热门选择。
    • JSP:基于Java的技术,适用于需要强大企业级应用和高安全性的环境。JSP页面中可以包含Java代码和HTML,提供了强大的后端支持和高度的可重用性。
    • CGI:CGI技术的特点包括跨平台性、灵活性、动态内容生成等。其应用场景包括电影和电视制作、游戏开发、广告行业等。

    虽然动态网页技术带来了许多便利,但也面临一些挑战,如安全性问题、性能优化和搜索引擎优化(SEO)问题;动态网页由于其运行机制,可能成为安全攻击的目标,因此开发者需要采取有效的安全措施来保护网站和用户数据的安全;同时,动态内容的生成通常会消耗更多的服务器资源,这要求开发者优化代码和数据库查询,以提高响应速度和处理效率;此外,动态网页中的一些元素(如查询字符串)可能会影响搜索引擎的索引,因此需要在设计时考虑SEO的最佳实践。

    二、动态网页的工作原理

    动态网页的工作原理涉及客户端请求、服务器处理和内容生成等过程。

    动态网页技术是现代web开发中重要的一环,其核心在于能够根据用户的请求实时生成内容,从而实现高度的个性化和交互性;这种技术的应用使得网站能够针对不同的用户输入或环境条件展示不同的页面内容,极大地丰富了用户体验。

    • 当用户通过浏览器访问一个动态网页时,浏览器首先会发送一个HTTP请求到Web服务器;这个请求经过服务器插件的处理,以确定请求的是静态资源还是动态资源;如果请求的是动态资源(如.php、.asp、.jsp文件),服务器插件则将请求转交给Web容器处理。
    • 在Web容器中,服务器端脚本开始执行;这些脚本可以连接数据库,从数据库中检索数据,并根据这些数据动态地构造HTML页面;例如,用户在一个电商网站上浏览商品时,服务器端脚本会根据商品的ID从数据库中获取相关信息,然后生成一个包含这些商品信息的HTML页面。
    • 一旦HTML页面被生成,它就会被回传给Web服务器;Web服务器随后将此HTML页面作为响应发送回用户的浏览器;浏览器接收到这个HTML页面后,解析并渲染页面,最终将结果显示给用户。
    • 在整个过程中,动态网页的生成依赖于服务器端脚本的有效运行和数据库的正确响应;因此,服务器的性能和数据库的设计优化对于提高动态网页加载速度和改善用户体验至关重要。
    • 此外,由于动态网页的内容是在服务器端实时生成的,这就涉及到了数据的安全问题;开发者需要确保所有数据传输过程的安全性,防止数据泄露或其他安全风险;同时,为了提高网站的可访问性和搜索引擎的优化(SEO),开发者还需要对动态网页进行适当的处理,以确保它们能被搜索引擎正确索引。

    三、动态网页常见技术

    3.1、CGI技术

    CGI技术介绍

    公共网关接口(CGI)是一个允许Web服务器与外部应用程序交互的标准接口。

    CGI是Web服务器运行时外部程序的一种规范,它使得编写的程序可以扩展服务器的功能。这种技术的核心在于它的能力,即通过浏览器接收用户输入信息,并将这些信息传递给服务器端的程序进行处理。处理后的数据通常以HTML文档的格式发回给客户端浏览器,实现信息的动态展示和交互。几乎每个Web服务器都支持CGI,且可以用多种编程语言来实现,如C、C++、Java、VB和Delphi等,这为开发者提供了极大的灵活性。

    CGI技术工作原理

    CGI的工作过程可以分为几个关键步骤

    • 用户的浏览器向Web服务器发送请求
    • Web服务器根据请求执行相应的CGI程序
    • CGI程序处理请求并获取需要的数据(可能包括数据库操作)
    • CGI程序将处理结果以HTML或其他形式返回给服务器,再由服务器发送到客户端浏览器完成显示

    3.2、PHP技术

    PHP技术介绍

    PHP是一种强大的服务器端脚本语言,特别适合于Web开发。

    PHP(Hypertext Preprocessor)即“超文本预处理器”,是一种广泛使用的开源服务器端脚本语言,特别适合于Web开发。PHP的语法受到了C、Java和Perl的影响,同时它也发展出了自己的特色语法。PHP的核心优势在于它的灵活性,支持面向对象和面向过程的开发方式,使得开发者能够根据项目需求选择最合适的编程范式。

    PHP技术工作原理

    • 当用户通过浏览器访问一个PHP页面时,这个请求首先被发送至服务器,服务器上的Web服务器软件(如Apache)接收到这个请求;如果请求的是一个PHP文件,服务器会通过PHP引擎来处理这个文件,而不是直接提供文件内容。
    • 服务器上的PHP引擎,通常是通过SAPI(Server Application Programming Interface)与Web服务器交互的;SAPI是PHP与外界沟通的接口,它使得PHP可以与不同的服务器软件协同工作;在这个阶段,PHP引擎开始加载相应的PHP文件,并执行里面的代码。
    • PHP代码的执行包括几个关键步骤:词法分析、语法解析、编译以及执行;在词法分析阶段,PHP源代码被分解成许多词法单元,例如变量、函数调用等;接下来,在语法解析阶段,这些词法单元被组织成一个抽象语法树(AST),这个树描述了代码的结构;然后,在编译阶段,这个抽象语法树被转换成一系列Zend引擎可以直接执行的操作码(opcodes);最后,在执行阶段,Zend引擎按照这些操作码来执行实际的代码逻辑。
    • 在整个过程中,如果PHP代码需要访问数据库或调用其他外部资源,PHP引擎会通过相应的扩展来完成这些任务;这些扩展是PHP灵活性的关键所在,它们使得PHP能够与各种数据库和系统服务进行交互。
    • 执行完毕后,PHP引擎将生成的HTML或其他数据返回给Web服务器,然后Web服务器再将这些数据作为HTTP响应发送回用户的浏览器;浏览器接收到数据后,解析并显示网页,用户便可以看到请求的结果。

    3.3、JSP技术

    JSP技术介绍

    JSP技术介绍和工作原理是基于Java的动态网页开发技术,它允许开发者在HTML页面中嵌入Java代码,以实现动态内容的生成和管理。

    JSP(Java Server Pages)是一种建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共存,其中HTML用于展示静态内容,而Java代码则负责生成动态内容;这种结合方式使得JSP既能够提供动态的网页功能,又能保持网页结构的逻辑清晰。

    JSP技术工作原理

    • 客户端发出请求访问JSP文件
    • JSP容器将JSP文件转换成Servlet
    • 加载并执行这个Servlet,处理客户端请求
    • 将生成的HTML页面作为响应发送回客户端

    3.4、ASP技术

    ASP技术介绍

    ASP技术,全称为动态服务器页面(Active Server Pages),是由Microsoft公司开发的服务器端脚本环境。

    ASP技术允许开发者在HTML页面中嵌入服务器端脚本代码,这些脚本代码通常使用VBScript或JavaScript编写;当服务器收到对ASP文件的请求时,它会处理这些服务器端脚本代码,并构建发送给浏览器的HTML页面;这种方式极大地简化了动态网页的开发过程,使得开发者能够快速创建出交互式的Web应用。

    ASP技术工作原理

    • 当用户通过浏览器请求一个ASP文件时,这一请求首先被发送至Web服务器,如IIS
    • IIS识别出该请求需要ASP处理引擎来处理,并将之传递给相应的处理程序;此时,服务器端的脚本开始执行,可能包括数据查询、计算任务等
    • 脚本执行过程中,如需访问数据库或其他外部资源,则通过相关的ActiveX Data Objects (ADO) 或其他组件来完成;之后,根据脚本执行的结果,动态生成HTML内容
    • 生成的HTML页面作为响应被发送回用户的浏览器,用户见到的是经过服务器处理后的页面

    四、Tomcat

    4.1、什么是Tomcat

    Tomcat,全名为Apache Tomcat,是由Apache Software Foundation(ASF)维护的一个开源项目,主要用于提供Java Servlet和JavaServer Pages (JSP)技术的支持;Tomcat实现了Java EE(现Jakarta EE)中的几个关键规范,包括Servlet、JSP、EL和WebSocket等,使其成为开发和部署Java Web应用的理想环境。

    • 基本定义与功能:Tomcat是一个Web服务器,但更精确地说,它是一个Servlet容器;它负责接收用户的Web请求,然后通过调用相应的Servlet来处理这些请求,并返回响应数据;同时,Tomcat还支持JSP技术,允许开发者在HTML页面中嵌入Java代码,从而简化了动态内容的生成过程。
    • 体系结构与组件:Tomcat的架构主要由几个核心组件构成,包括Connector、Container以及Engine等;Connector负责监听客户端的请求并建立连接,Container则处理具体的Servlet和JSP,Engine则是协调Connector和Container的组件。
    • 应用场景与优势:由于其轻量级和高性能的特点,Tomcat尤其适合中小型企业使用;它支持Java语言开发,天然具备良好的跨平台特性;同时,作为一个开源项目,Tomcat拥有活跃的社区和持续的更新支持,这使得它在开发者中具有很高的人气。
    • 配置与部署:Tomcat的配置主要涉及修改其目录下的配置文件,如server.xml等,用户可以通过修改这些文件来调整服务器的端口、默认应用目录等;部署应用通常只需将应用包放置在Tomcat的webapps目录下,或通过管理界面进行操作。

    4.2、Tomcat安装

    Tomcat 是一个基于 Java 的应用服务器,因此需要先安装 JDK
    (两条命令都可以使用)

    [root@root ~]# yum install java-devel
    [root@root ~]# dnf install java-1.8.0-openjdk-devel
    

    下载Tomcat

    [root@root ~]# wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.71/bin/apache-tomcat-9.0.71.tar.gz
    --2024-06-15 10:40:01--  https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.71/bin/apache-tomcat-9.0.71.tar.gz
    Resolving archive.apache.org (archive.apache.org)... 65.108.204.189, 2a01:4f9:1a:a084::2
    Connecting to archive.apache.org (archive.apache.org)|65.108.204.189|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 11613392 (11M) [application/x-gzip]
    Saving to: ‘apache-tomcat-9.0.71.tar.gz’
    
    apache-tomcat-9.0.71.tar.gz                    100%[==================================================================================================>]  11.08M  4.30MB/s    in 2.6s    
    
    2024-06-15 10:40:05 (4.30 MB/s) - ‘apache-tomcat-9.0.71.tar.gz’ saved [11613392/11613392]
    

    解压下载的Tomcat

    [root@root ~]# tar -xzf apache-tomcat-9.0.71.tar.gz
    [root@root ~]# ls
    apache-tomcat-9.0.71  apache-tomcat-9.0.71.tar.gz
    

    移动解压后的 Tomcat 目录到合适的位置

    [root@root ~]# mv apache-tomcat-9.0.71 /opt/tomcat
    [root@root ~]# cd /
    [root@root /]# ls
    afs  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@root /]# cd /opt/
    [root@root opt]# ls
    tomcat
    [root@root opt]# ls tomcat/
    bin  BUILDING.txt  conf  CONTRIBUTING.md  lib  LICENSE  logs  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
    [root@root opt]# cd ~
    [root@root ~]# ls
    apache-tomcat-9.0.71.tar.gz
    

    设置 Tomcat 的所有者和权限

    [root@root ~]# chown -R $USER:$USER /opt/tomcat
    [root@root ~]# chmod -R u+x /opt/tomcat/bin
    

    编辑 /etc/profile 文件

    [root@root ~]# export CATALINA_HOME=/opt/tomcat
    [root@root ~]# export PATH=$PATH:$CATALINA_HOME/bin
    

    使环境变量生效

    [root@root ~]# source /etc/profile
    

    4.3、检查Tomcat进程

    [root@root ~]# ps -ef | grep tomcat
    root      115729  109403  0 10:49 pts/0    00:00:00 grep --color=auto tomcat
    

    4.4、编写Tomcat开机自动运行脚本

    创建一个 Tomcat 服务脚本文件

    [root@root ~]# vi /etc/systemd/system/tomcat.service
    [Unit] #表示这是一个单元文件,用于描述一个系统服务
    Description=Apache Tomcat Web Application Container #描述这个服务的功能,即Apache Tomcat Web应用容器
    After=network.target #表示在网络服务启动后再启动这个服务
    
    [Service] #表示接下来是服务的配置信息
    Type=forking #表示服务的类型是forking,即父进程会fork出子进程来执行任务
    Environment=JAVA_HOME=/usr/java/jdk-11 #设置环境变量JAVA_HOME的值为/usr/java/jdk-11
    Environment=CATALINA_HOME=/opt/tomcat #设置环境变量CATALINA_HOME的值为/opt/tomcat
    Environment=CATALINA_BASE=/opt/tomcat #设置环境变量CATALINA_BASE的值为/opt/tomcat
    ExecStart=/opt/tomcat/bin/startup.sh #指定启动脚本为/opt/tomcat/bin/startup.sh
    ExecStop=/opt/tomcat/bin/shutdown.sh #指定停止脚本为/opt/tomcat/bin/shutdown.sh
    User=tomcat #指定运行服务的用户为tomcat
    Group=tomcat #指定运行服务的组为tomcat
    RestartSec=10 #表示服务失败后10秒重启
    Restart=always #表示服务总是自动重启
    
    [Install] #表示接下来是安装配置信息
    WantedBy=multi-user.target #表示这个服务是在多用户模式下需要启动的服务
    

    (注:用户与用户组根据实际情况配置)
    重载系统服务配置

    [root@root ~]# systemctl daemon-reload
    

    启用 Tomcat 服务,设置开机自启动

    [root@root ~]# systemctl enable tomcat
    [root@root ~]# systemctl start tomcat
    [root@root /]# systemctl status tomcat
    ● tomcat.service - Apache Tomcat Web Application Container
         Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; preset: disabled)
         Active: activating (auto-restart) (Result: exit-code) since Sat 2024-06-15 11:12:34 CST; 8s ago
        Process: 117710 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
       Main PID: 117717 (code=exited, status=127)
            CPU: 11ms
    

    (注:这里只是激活,没有完全启动)

    4.4、解决激活状态

    • 确保Tomcat已经正确安装并配置。检查/opt/tomcat目录是否存在,以及/opt/tomcat/bin/startup.sh文件是否存在
    [root@root /]# ls /opt/tomcat/bin/
    bootstrap.jar  catalina-tasks.xml  commons-daemon.jar            configtest.sh  digest.sh     setclasspath.bat  shutdown.sh  tomcat-juli.jar       tool-wrapper.sh
    catalina.bat   ciphers.bat         commons-daemon-native.tar.gz  daemon.sh      makebase.bat  setclasspath.sh   startup.bat  tomcat-native.tar.gz  version.bat
    catalina.sh    ciphers.sh          configtest.bat                digest.bat     makebase.sh   shutdown.bat      startup.sh   tool-wrapper.bat      version.sh
    
    • 检查Tomcat的用户和用户组设置,确保Tomcat运行所需的用户和用户组存在
    [root@root /]# cat /etc/passwd
    [root@root /]# cat /etc/group
    
    • 运行/opt/tomcat/bin/startup.sh脚本来启动Tomcat服务器
    [root@root /]# cd /opt/tomcat/bin/
    [root@root bin]# ./startup.sh 
    Using CATALINA_BASE:   /opt/tomcat
    Using CATALINA_HOME:   /opt/tomcat
    Using CATALINA_TMPDIR: /opt/tomcat/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    [root@root bin]# systemctl status tomcat
    ● tomcat.service - Apache Tomcat Web Application Container
         Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; preset: disabled)
         Active: activating (auto-restart) (Result: exit-code) since Sat 2024-06-15 12:26:29 CST; 3s ago
        Process: 123569 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
       Main PID: 123576 (code=exited, status=127)
            CPU: 10ms
    
    • 查看/etc/systemd/system/tomcat.service中有没有配置错误的参数
    [root@root usr]# cat /etc/systemd/system/tomcat.service
    [Unit]
    Description=Apache Tomcat Web Application Container
    After=network.target
    
    [Service]
    Type=forking
    Environment=JAVA_HOME=/usr/java/jdk-11
    Environment=CATALINA_HOME=/opt/tomcat
    Environment=CATALINA_BASE=/opt/tomcat
    ExecStart=/opt/tomcat/bin/startup.sh
    ExecStop=/opt/tomcat/bin/shutdown.sh
    User=root
    Group=root
    RestartSec=10
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
    • 查看Environment=JAVA_HOME=/usr/java/jdk-11路径以及版本是否正确
    [root@root usr]# java -version
    openjdk version "11.0.20.1" 2023-08-24 LTS
    OpenJDK Runtime Environment (Red_Hat-11.0.20.1.1-2) (build 11.0.20.1+1-LTS)
    OpenJDK 64-Bit Server VM (Red_Hat-11.0.20.1.1-2) (build 11.0.20.1+1-LTS, mixed mode, sharing)
    [root@root usr]# rpm -qa| grep java
    tzdata-java-2024a-2.el9.noarch
    javapackages-filesystem-6.0.0-4.el9.noarch
    java-11-openjdk-headless-11.0.20.1.1-2.el9.x86_64
    java-11-openjdk-11.0.20.1.1-2.el9.x86_64
    java-11-openjdk-devel-11.0.20.1.1-2.el9.x86_64
    java-1.8.0-openjdk-headless-1.8.0.362.b09-4.el9.x86_64
    java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64
    java-1.8.0-openjdk-devel-1.8.0.362.b09-4.el9.x86_64
    [root@root usr]# echo $JAVA_HOME
    
    [root@root usr]# which java
    /usr/bin/java
    
    • 查看日志报错
    [root@root opt]# cd tomcat/logs
    [root@root logs]# cat localhost.2024-06-15.log 
    [root@root logs]# cat catalina.out 
    /opt/tomcat/bin/catalina.sh: line 504: /usr/java/jdk-11/bin/java: No such file or directory
    [root@root logs]# cat catalina.2024-06-15.log 
    

    (注:根据上述日志查找问题)

    • 查看是否是其他服务占用了8080端口,然后进行端口修改
    [root@root logs]# netstat -antp | grep 8080
    tcp6       0      0 :::8080                 :::*                    LISTEN      108025/httpd 
    
    • 重新安装java环境与tomcat
  • 相关阅读:
    国内项目管理中级证书CSPM-3正在报名!
    Java 面试之数据库篇 (offer 拿来吧你)
    青龙面板-快手极速版(每天3块脚本)
    【洛谷】P4331 数字序列
    Java 并发高频面试题:聊聊你对 AQS 的理解?
    作为Java程序员,阿里一面Synchronized连珠炮你是否能够顶住
    灵活用工小程序开发制作功能介绍
    2022-08-02 mysql/stonedb慢SQL-Q18-内存使用暴涨分析
    OD华为机试 19
    【Java合并图片】使用Java实现两张图片合并成一张图片的功能(水平合并、垂直合并、透明背景颜色)
  • 原文地址:https://blog.csdn.net/weixin_44774550/article/details/139694034