Toc
  1. JavaWeb基本概念与名词
    1. Java的不同版本
      1. java SE
      2. java EE
      3. java ME
    2. JVM JRE 与 JDK 的关系
      1. JVM
      2. JRE
      3. JDK
    3. JavaWeb的相关知识
  2. Tomcat使用
    1. Tomcat目录
    2. Tomcat配置文件
      1. server.xml配置文件详细解析
    3. Tomcat工作机制动画演示
    4. web目录中各文件介绍
      1. META-INF
      2. WEB-INF
    5. 利用Tomcat搭建网站
      1. 利用Tomcat自动部署
      2. 利用控制台进行部署
      3. 增加自定义的Web部署文件
      4. 手动修改%Tomcat_Home%\conf\server.xml文件来部署web应用
Toc
0 results found
Rayi
JavaWeb基础知识-1
2021/04/16 学习笔记 java

[toc]

JavaWeb基本概念与名词

Java的不同版本

java SE

javaSE 是java标准版的简称,其定位是个人计算机应用(应用原生界面比较ugly)

全称:Java Platform Standard Edition 主要用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。

例如,Java应用程序开发平台Eclipse。

java EE

javaEE 是java企业版的简称,其定位是服务器端应用 (目前应用最广泛的版本)

全称:Java Platform Enterprise Edition

是在JavaSE的基础上构建的他提供Web 服务、组建模型、管理和通信API.可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和web2.0应用程序。

java ME

javaME 是java微型版的简称,主要定位是移动产品和车载产品等(基本没有使用,大部分移动产品使用Android)

全称:Java Platform Micro Edition

Java ME为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME包括灵活的用户界面、健壮的安全模式、许多内置的网络协议以及对于动态下载的连网和离线应用程序的丰富支持。基于Java ME规范的应用程序只需要编写一次,就可以用于许多设备,而且可以利用每个设备的本级功能。

JVM JRE 与 JDK 的关系

JVM

JVM 全称 Java Virtual Machine 是java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。

也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。

JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

JRE

JRE 全称 Java Runtime Environment

是java运行时环境,这里面包含了运行java程序所需要的所有类库,一台机器上只有安装了jre才可以运行java程序

JRE 是包含 JVM的,并且还包含了一些运行java程序所需要的类库和资源文件等。

JDK

JDK 全称 Java Development Kit 是java开发工具包

是Sun Microsystems针对Java开发员的产品。JDK 中包含了很多关于java程序开发的工具,例如编译工具javac,文档生成工具javadoc等等等等

同理,JDK是包含JRE 和 JVM 的,并且在此基础上还包括了一些开发工具,调试工具,以及用于管理程序的管理工具等。

JavaWeb的相关知识

JavaWeb

img

Tomcat使用

Tomcat目录

tomcat
  |---bin:存放启动和关闭tomcat脚本
  |---conf:存放不同的配置文件(server.xml和web.xml);
  |---doc:存放Tomcat文档;
  |---lib/japser/common:存放Tomcat运行需要的库文件(JARS);
  |---logs:存放Tomcat执行时的LOG文件;
  |---src:存放Tomcat的源代码;
  |---webapps:Tomcat的主要Web发布目录(包括应用程序示例);
  |---work:存放jsp编译后产生的class文件;

img

Tomcat配置文件

我们打开con文件夹可以看到Tomcat的配置文件:

 server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;

 web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;

 tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户  指定角色等将通过编辑此文件实现;

 catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;

 catalina.properties:Tomcat内部package的定义及访问相关控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;

 logging.properties: Tomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组  件级别以及日志文件的存在位置等;

 context.xml:所有host的默认配置信息;

server.xml配置文件详细解析

https://blog.csdn.net/qq_35713827/article/details/82585539

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- Note:  A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/server.html
 -->
<Server port="8005" shutdown="SHUTDOWN">
  <!-- 	Listener(即监听器)定义的组件,可以在特定事件发生时执行特定的操作;被监听的事件通常是Tomcat的启动和停止。 -->
  <!-- VersionLoggerListener:当Tomcat启动时,该监听器记录Tomcat、Java和操作系统的信息。该监听器必须是配置的第一个监听器。 -->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <!-- AprLifecycleListener:Tomcat启动时,检查APR库,如果存在则加载。APR,即Apache Portable Runtime,是Apache可移植运行库,可以实现高可扩展性、高性能,以及与本地服务器技术更好的集成。 -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <!-- JreMemoryLeakPreventionListener:与类加载器导致的内存泄露有关。 -->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <!-- 通过该监听器,初始化< GlobalNamingResources>标签中定义的全局JNDI资源;如果没有该监听器,任何全局资源都不能使用。< GlobalNamingResources>将在后文介绍。 -->
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <!-- 当Web应用因thread-local导致的内存泄露而要停止时,该监听器会触发线程池中线程的更新。当线程执行完任务被收回线程池时,活跃线程会一个一个的更新。只有当Web应用(即Context元素)的renewThreadsWhenStoppingContext属性设置为true时,该监听器才有效。 -->
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <!-- GlobalNamingResources元素定义了全局资源,通过配置可以看出,该配置是通过读取$TOMCAT_HOME/ conf/tomcat-users.xml实现的。 -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <!-- A "Service" is a collection of one or more "Connectors" that share
       a single "Container" Note:  A "Service" is not itself a "Container",
       so you may not define subcomponents such as "Valves" at this level.
       Documentation at /docs/config/service.html
   -->
 <!-- 通过在Server中配置多个Service服务,可以实现通过不同的端口号来访问同一台机器上部署的不同Web应用。

  在server.xml中配置多服务的方法非常简单,分为以下几步:
  
  (1)复制<Service>元素,放在当前<Service>后面。
  
  (2)修改端口号:根据需要监听的端口号修改<Connector>元素的port属性;必须确保该端口没有被其他进程占用,否则Tomcat启动时会报错,而无法通过该端口访问Web应用。
  
  (3)修改Service和Engine的name属性
  
  (4)修改Host的appBase属性
  
  (5)Web应用仍然使用自动部署

  (6)将要部署的Web应用(WAR包或应用目录)拷贝到新的appBase下。 -->
  <Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->


    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <!--  Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。通过配置Connector,可以控制请求Service的协议及端口号。 -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation. The default
         SSLImplementation will depend on the presence of the APR/native
         library and the useOpenSSL attribute of the
         AprLifecycleListener.
         Either JSSE or OpenSSL style configuration may be used regardless of
         the SSLImplementation selected. JSSE style configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->
    <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
         This connector uses the APR/native implementation which always uses
         OpenSSL for TLS.
         Either JSSE or OpenSSL style configuration may be used. OpenSSL style
         configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />
    -->

    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host).
         Documentation at /docs/config/engine.html -->

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <!-- Engine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。 -->
    <Engine name="Catalina" defaultHost="localhost">

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <!-- Host是Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。作用是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。 -->

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
            <!-- 检查Web应用更新

			一个Web应用可能包括以下文件:XML配置文件,WAR包,以及一个应用目录(该目录包含Web应用的文件结构);其中XML配置文件位于xmlBase指定的目录,WAR包和应用目录位于appBase指定的目录。

			Tomcat按照如下的顺序进行扫描,来检查应用更新:

			A、扫描虚拟主机指定的xmlBase下的XML配置文件

			B、扫描虚拟主机指定的appBase下的WAR文件

			C、扫描虚拟主机指定的appBase下的应用目录 -->

        <!-- 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 &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

Tomcat工作机制动画演示

img

web目录中各文件介绍

以网鼎杯filejava题目的目录为例

.
├── META-INF
│   ├── MANIFEST.MF
│   └── maven
│       └── cn
│           └── abc
│               ├── pom.properties
│               └── pom.xml
├── WEB-INF
│   ├── classes
│   │   └── cn
│   │       └── abc
│   │           └── servlet
│   │               ├── DownloadServlet.class
│   │               ├── ListFileServlet.class
│   │               └── UploadServlet.class
│   ├── lib
│   │   ├── commons-codec-1.5.jar
│   │   ├── commons-fileupload-1.3.1.jar
│   │   ├── commons-io-2.2.jar
│   │   ├── dom4j-1.6.1.jar
│   │   ├── javax.annotation.jar
│   │   ├── javax.ejb.jar
│   │   ├── javax.jms.jar
│   │   ├── javax.persistence.jar
│   │   ├── javax.resource.jar
│   │   ├── javax.servlet.jar
│   │   ├── javax.servlet.jsp.jar
│   │   ├── javax.servlet.jsp.jstl.jar
│   │   ├── javax.transaction.jar
│   │   ├── jstl-1.2.jar
│   │   ├── poi-3.10-beta2.jar
│   │   ├── poi-ooxml-3.10-beta2.jar
│   │   ├── poi-ooxml-schemas-3.10-beta2.jar
│   │   ├── stax-api-1.0.1.jar
│   │   ├── xml-apis-1.0.b2.jar
│   │   └── xmlbeans-2.3.0.jar
│   ├── temp
│   ├── upload
│   └── web.xml
├── index.jsp
├── listfile.jsp
└── message.jsp

12 directories, 30 files

META-INF

配置jar文件中的信息描述,好像暂时没啥大用

WEB-INF

  • WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。
  • 如果想在页面中直接访问其中的文件,必须通过 web.xml 文件对要访问的文件进行相应映射才能访问。

其中包含的文件目录作用为:

  • /WEB-INF/web.xml
    • Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
    • 类似于php框架中的路由
  • /WEB-INF/classes/
    • 包含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中。
    • 类似于php中后端各种类
  • /WEB-INF/lib/
    • 存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件。
    • 类似于python中import需要用到的包
  • /WEB-INF/src/
    • 源码目录,按照包名结构放置各个Java文件。
    • 非必须,放置java源码
  • /WEB-INF/database.properties
    • 数据库配置文件
  • /WEB-INF/tags/
    • 存放了自定义标签文件,该目录并不一定为 tags,可以根据自己的喜好和习惯为自己的标签文件库命名。
    • 当使用自定义的标签文件库名称时,在使用标签文件时就必须声明正确的标签文件库路径。例如:当自定义标签文件库名称为 simpleTags 时,在使用 simpleTags 目录下的标签文件时,就必须在 jsp 文件头声明为:<%@ taglibprefix="tags" tagdir="/WEB-INF /simpleTags" % >
  • /WEB-INF/jsp/
    • jsp 1.2 以下版本的文件存放位置。改目录没有特定的声明,同样,可以根据自己的喜好与习惯来命名。
    • 此目录主要存放的是 jsp 1.2 以下版本的文件,为区分 jsp 2.0 文件,通常使用 jsp 命名,当然你也可以命名为 jspOldEdition 。
  • /WEB-INF/jsp2/
    • 与 jsp 文件目录相比,该目录下主要存放 Jsp 2.0 以下版本的文件,当然,它也是可以任意命名的,同样为区别 Jsp 1.2以下版本的文件目录,通常才命名为 jsp2。

jsp存放于网站目录根目录下

javaweb中,jsp相当于php框架中的模板(MVC中的view),class相当于modelcontroller,jar相当于php中安装的扩展依赖啥的

要获取网站源码并对其进行修改,首先需要反编译class文件

反编译class文件可以用jd-guiXjadBytecode-Viewer等进行反编译

利用Tomcat搭建网站

通过tomcat部署网站有三种方式

首先要启动tomcat

image-20210416212303319

利用Tomcat自动部署

利用Tomcat自动部署方式是最简单的、最常用的方式。若一个web应用结构为D:\workspace\WebApp\AppName\WEB-INF\,只要将一个Web应用的WebContent级的AppName直接扔进%Tomcat_Home%\webapps文件夹下,系统会把该web应用直接部署到Tomcat中。所以这里不再赘述。

# rayi @ Rayi-de-ShenChuan in /mnt/c/Users/Rayi/Desktop/Tmp/java_web/apache-tomcat-8.5.54/webapps [21:23:41]
$ ls -la
total 0
drwxrwxrwx 1 rayi rayi 4096 Apr 15 20:28 .
drwxrwxrwx 1 rayi rayi 4096 Apr  3  2020 ..
drwxrwxrwx 1 rayi rayi 4096 Apr 15 20:20 ROOT
drwxrwxrwx 1 rayi rayi 4096 Apr  3  2020 docs
drwxrwxrwx 1 rayi rayi 4096 Apr  3  2020 examples
drwxr-xr-x 1 rayi rayi 4096 Apr 16 21:20 file_in_java
drwxrwxrwx 1 rayi rayi 4096 Apr  3  2020 host-manager
drwxrwxrwx 1 rayi rayi 4096 Apr  3  2020 manager

类似于/var/www/html,可以直接往里面扔jsp

image-20210416212407907

直接访问webshell.jsp

image-20210416212525093

利用控制台进行部署

若一个web应用结构为D:\workspace\WebApp\AppName\WEB-INF\,利用控制台进行部署的方式如下:进入tomcat的manager控制台的deploy区域
在Context path中键入”XXX”(可任意取名)
在WAR or Directory URL:键入D:\workspace\WebApp\AppName (表示去寻找此路径下的web应用)
点击deploy按钮。

然后在%Tomcat_Home%\webapps路径下将会自动出现一个名为XXX的文件夹

其内容即是D:\workspace\WebApp\AppName的内容,只是名字是XXX而已(这就是前面在Context path键入XXX的结果)。

以上说明利用控制台进行部署的实质仍然是利用Tomcat的自动部署。

一般不会开启控制台的

增加自定义的Web部署文件

太麻烦了,暂时先不弄了

https://www.cnblogs.com/xiohao/p/3689832.html

手动修改%Tomcat_Home%\conf\server.xml文件来部署web应用

此方法即打开%Tomcat_Home%\conf\server.xml文件并在Host其中增加以下元素:

<Context docBase="/mnt/c/Users/Rayi/Desktop/Tmp/java_web/apache-tomcat-8.5.54/webapps/file_in_java" path="/" debug="0" reloadable="true" />  

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

image-20210416214251557

然后启动Tomcat即可。

当然如果使用Eclipse,在Eclipse中的设置也有改变:打开菜单栏window选择preference(首选项)——左侧选择Tomcat——可以看到上图中高亮画出的Context declaration mode(Context 声明模式)中选择以Server.xml文件来部署web应用。

这种方法可以改变网站的根目录

image-20210416214122778

参考链接

https://www.cnblogs.com/xiohao/p/3689832.html

https://www.cnblogs.com/hzg110/p/6851523.html

https://www.cnblogs.com/hgzero/p/13149665.html

https://blog.csdn.net/qq_35713827/article/details/82585539

本文作者:Rayi
版权声明:本文首发于Rayi的博客,转载请注明出处!