Bootstrap

JavaWeb简介、TomCat的安装配置、IDEA创建web项目整个TomCat

Java知识点总结:想看的可以从这里进入

1、基本概念


1.1、简介

​ WEB(World Wide Web)万维网,它是一种基于超文本和HTTP协议的、全球性的、动态交互的、跨平台的分布式图形信息系统。简单来说web就是网页的意思,所以web开发就是基于网页上进行数据交互的一种开发模式。而以Java语言编写的可以通过浏览器访问的程序叫JavaWeb,核心是请求响应.

1、请求(Request):客户端发送给服务器的数据。
2、响应(Response):服务器给客户端回传的数据。
请求响应成对出现,当用户根据页面向服务器发送请求,服务器根据请求,从数据库获取相应的数据,再回传到客户端,经浏览器渲染后显示给用户

​ 在Internet上供外界访问的Web资源共有两种:

  • 静态web资源:指web页面中那些始终不变的数据。当用户在访问界面时,不需要关联数据库,而返回的必要数据,这些数据无论在什么地方、什么人、什么机器访问都始终不变。

    一般是.html和.css类型文件,页面无法动态更新,用户看到的界面不变,数据无法实现持久化,交互性差。

  • 动态web资源:指web页面中随着需求始终在变化的数据。这些数据基本根据用户的需求或其他原因,通过对数据的操作,处理后返回的不同信息,是人机交互的一个重要标志。

    一般是Servlet/JSP类型文件,更新起来比较麻烦,需要重写后台程序,但是与用户有良好的交互性,它可以个数据库相连接,实现数据的持久化。

    JavaWeb的开发是指对动态web资源开发的技术,如何运用不同的技术实现一个友好交互的动态页面。

    网站访问的步骤:
    	当在浏览器输入一个域名时,服务器检查C:\Windows\System32\drivers\etc\hosts文件内相应的域名映射,如果存在返回相应的IP地址,如果不存在会去DNS(管理域名)服务器寻找,都找不到则显示不存在。
    

1.2、程序结构

​ web开发一般采用B/S(Broswer/Servlet)(浏览器/服务器)结构, 分为前台、后台。用户操作浏览器,发送相应请求给服务器,服务器根据请求调取所需数据返回浏览器渲染样式。

​ 一般用HTML来显示内容、CSS渲染样式、JavaScript进行数据的交换。 主要是供外界访问,提供服务。而这些可以访问的页面本质其实就是一个个的文件(html、css、js、jsp、servlet、java程序、jar包、配置文件等),这些文件部署在服务器(Tomcat)中统一管理运行,供外界访问。

​ js/Servlet是sun公司主推的一种B/S架构,基于java语言,可以承载高并发、高可用、高性能带来的影响。

在这里插入图片描述

1.3、Tomcat服务器


Tomcat是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,由Apache、Sun 和其他一些公司及个人共同开发而成,是Apache软件基金会的Jakarta项目中的一个核心项目。它适用于中小型和并发量不大的程序使用,是开发JSP的首选服务器。

服务器主要是用于处理用户的请求,执行Java代码,将所得的数据响应给客户端。

常见的服务器:
	1、Tomcat:免费开源的Web应用服务器,轻量级应用服务器,在中小型系统和并发用户不是很大的场景下适用,是目前比较流行的web应用服务器。
	2、Jboss:遵从JavaEE规范开发、免费开源、纯Java的EJB服务器,支持所以JavaEE规范,学习的曲线较高。
	3、GlassFish:Oracle公司开发的JavaWeb服务器,属商业级服务器,产品级量,应用少。
	4、Resin:CAUCHO公司产品,非常流行的服务器,性能优良,应用较多。
	5、WebLogic:Oracle公司产品,应用广泛的web服务器,支持JavaEE规范,适合大型项目使用,适合大公司使用。
1.3.1、下载安装

Tomcat官网:进行下载安装
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

​ conf下的Server文件内可以修改端口号、主机等基础信息。

 //Tomcat的默认端口号为8080,Mysql为3306,http为80,https为443
//端口号范围1~65535,其中1·1000一般是系统使用的
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
//主机名127.0.1.1(localhost)(可改),网站存放位置webapps
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

​ 配置环境变量:配置环境变量:在系统变量中配置TMOCAT_HTME 值为TomCat的安装路径,然后在在path中设置bin路径

在这里插入图片描述

在path中设置如下:在这里插入图片描述

1.3.2、访问测试

在cmd中cd到tomcat的bin目录下使用 service.bat install 命令安装服务。
在这里插入图片描述

​启动Tomcat,然后访问网址http://localhost:8080/ ,进入即为启动成功

在这里插入图片描述

​ 启动成功

在这里插入图片描述

启动失败的常见原因:
	1、Tomcat已经启动
	2、webapps中的项目有错误:可以将项目删除再重启,如果可以重启则为项目错误
		内部文件夹名称出错:WEB-INF、classes、web.xml等
		web.xml配置文件的配置信息错误
	3、JDK等所需环境有误
1.3.3、配置文件
1、server文件

server.xml 是tomcat 服务器的核心配置文件,包含了Tomcat的 Servlet容器的所有配置。根标签是

<server>
    ....
</server>

内嵌的标签为:

  1. Listener:监听器

    <Listener className="路径" />
    
  2. GlobalNamingResources:全局命名资源

    <GlobalNamingResources>
        <!-- 可编辑的用户,也可以使用UserDatabaseRealm用来认证用户 -->
        <Resource  />
    </GlobalNamingResources>
    
  3. Service:Service 实例,默认名为 Catalina。(一个Server服务器,可以包含多个Service服务。)

    <Service name="Catalina">
        ....
    </Service>
    

    内嵌标签为:

    1. Executor:Executor 用于配置Service 共享线程池

      <Executor name="tomcatThreadPool" 	线程池名称
                namePrefix="catalina‐exec‐" 	每个线程的名称前缀
                maxThreads="150" 			最大线程数
                minSpareThreads="4" 		核心池线程数
                maxIdleTime="6000" 		线程空闲时间,默认6000(1分钟)
                maxQueueSize="Integer.MAX_VALUE" 	被执行前最大线程排队数目
                prestartminSpareThreads="false" 	启动线程池时是否启动 minSpareThreads部分线程。
                threadPriority="5"		线程池中线程优先级,默认值为5,值从1到10。
                className="org.apache.catalina.core.StandardThreadExecutor" />  线程池默认实现类
      
    2. Connector:配置Service 包含的链接器,配置端口号等基础信息

      <Connector port="8080" 		端口号
                         protocol="HTTP/1.1"		访问协议
                         connectionTimeout="20000"	接收连接后的等待超时时间
                         redirectPort="8443" 	不支持SSL请求,接收到了一个请求,符合security-constraint约束,自动将请求重定向到指定的端口
                         URIEncoding="UTF-8"	编码
                         executor="tomcatThreadPool"/>	指定共享线程池的名称
      
    3. Engine:用于配置Service中链接器对应的Servlet 容器。

      Tomcat中有四种容器,这四个容器之间是父子关系,Engine容器包含Host容器,Host容器包含Context,Context包含Wrapper容器

      <!-- name: 用于指定Engine的名称,defaultHost : 默认使用的虚拟主机名称-->
      <Engine name="Catalina" defaultHost="localhost">
      	.....
      </Engine>
      
      • Host容器:虚拟主机
        • Alias:设置别名
        • Context:Servlet 容器。
          • Wrapper容器
        • Valve:处理元素,servlet的执行阀门,可以把servlet需要处理的对象连接起来
      • AccessLog组件:访问日志
      • Pipeline组件:将不同容器级别串联起来的通道,当请求进来之后就可以通过管道进行流转处理。Tomcat中有4个级别的容器
      • Cluster组件:把不同JVM的全局引擎容器内的所有应用都抽象成集群,让它们能在不同的JVM之间互相通信,是会话同步,集群部署得以实现。
      • Realm组件:存储了用户、密码以及权限等的数据对象
      • LifecycleListener组件:生命周期监听器
      • Log组件:日志输出

Tomcat的server.xml文件:

<!--port:Tomcat 监听的关闭服务器的端口-->
<!--shutdown:关闭服务器的指令字符串-->
<Server port="8005" shutdown="SHUTDOWN">
    <!--用于以日志形式输出服务器 、操作系统、JVM的版本信息-->
    <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
    <!-- 用于服务器启动和停止-->
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
    <!-- 避免jer内存泄漏 -->
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    <!-- 服务器启动和停止的全局命名服务 -->
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    <!--用于在Context停止时重建Executor 池中的线程 -->
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

    <GlobalNamingResources>
        <!-- 可编辑的用户数据库,也可以使用UserDatabaseRealm用来认证用户 -->
        <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>
    
    <Service name="Catalina">
        <!--定义线程池-->
        <!--<Executor ....../> -->
        <!--配置使用的端口等基础信息 port端口号,protocol访问协议,connectionTimeout接收连接后的等待超时时间,redirectPort不支持SSL请求接收到了一个请求自动将请求重定向到指定的端口,URIEncoding编码-->
        <Connector port="8080" 		端口号
                   protocol="HTTP/1.1"		访问协议
                   connectionTimeout="20000"	接收连接后的等待超时时间
                   redirectPort="8443" 	不支持SSL请求,接收到了一个请求,符合security-constraint约束,自动将请求重定向到指定的端口
                   URIEncoding="UTF-8"	编码
                   executor="tomcatThreadPool"	指定共享线程池的名称
                   maxThreads="150" 池中最大线程数。
                   minSpareThreads="4" 	核心池线程数
                   acceptCount="" 		接收的连接数。
                   maxConnections="" 	接收的最大连接数
                   compression="on" 	是否压缩。
                   compressionMinSize=""	压缩的大小。
                   disableUploadTimeout="true" />	禁用上传超时
		<!--配置Servlet 容器Engine -->
        <Engine name="Catalina" defaultHost="localhost">  
            <!-- 集群 -->
      		<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
			<!--用户信息 -->
            <Realm className="org.apache.catalina.realm.LockOutRealm">
                <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                       resourceName="UserDatabase"/>
            </Realm>
			<!--配置一个虚拟主机, Servlet 容器Host-->
            <Host name="localhost"  	当前Host通用的网络名称
                  appBase="webapps"		当前Host的应用基础目录,默认为webapps
                  unpackWARs="true" 	true:在启动时会将appBase目录下war包解压为目录 false:直接从war文件启动
                  autoDeploy="true">	控制tomcat是否在运行时定期检测并自动部署新增或变更的web应用             
                <Alias>给Host添加别名</Alias>
                <!--配置Servlet 容器Context -->
                <Context docBase="Web应用目录或者War包的部署路径" path="Web应用的Context 路径">
                    配置一个Web应用
                </Context>
                <!--web应用程序之间共享认证 -->
                <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
                <!--日志输出 -->
                <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>
2、tomcat-users

Tomcat Manager是用来配置Tomcat的用户、角色等信息的,在 conf/tomcat-users.xml文件中进行配置管理,用来控制Tomcat中 host-manager、manager的访问权限。

默认情况下,Tomcat Manager是处于禁用状态的。它需要以用户角色进行登录并授权才能使用相应的功能,初始的Tomcat并没有配置任何用户,因此我们需要先进行用户配置后才能使用Tomcat Manager。

  • user标签:表示一个用户,username和password表示用户名和密码,roles表示该用户所具备的权限。
  • role标签:权限
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
    <!--
		Tomcat Manager 4种角色:
        manager-gui 允许访问html接口(URL路径为/manager/html/*)
        manager-script 允许访问纯文本接口(URL路径为/manager/text/*)
        manager-jmx 允许访问JMX代理接口(URL路径为/manager/jmxproxy/*)
        manager-status 允许访问Tomcat只读状态页面(URL路径为/manager/status/*)
	-->
    <role rolename="manager-gui" />	(权限)
    <role rolename="manager-script"/>	(权限)
    <role rolename="manager-jmx"/>	(权限)
    <role rolename="manager-status"/>	(权限) 
    <user username="admin" password="123456" roles="manager-gui,manager-script"/>		用户
    <user username="robot" password="123456" roles="manager-script"/>	用户
</tomcat-users>

3、web.xml

是Tomcat为所以的WEBA应用配置的一些默认初始值,当使用Tomcat运行web应用时,会先处理此 web.xml 文件,再处理我们自身项目中 WEB-INF下的 web.xml文件(配些会出现覆盖)。

  1. Servlet Definitions和Servlet Mappings:默认的servlet映射

    <!-- 默认servlet的映射,用来处理所有静态资源的请求 -->
    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    <!-- tomcat用来编译与执行jsp页面 -->
    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>
    
  2. Filter Definitions(默认不配置):内置过滤器定义

  3. Built In Filter Mappings(默认不配置):内置过滤器映射

  4. Session Configuration:设置Session有效时间,默认30分钟

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    
  5. MIME Type Mappings:配置定义一些MIME类型。在提供静态资源时,Tomcat 会根据资源的文件扩展名自动生成一个“Content-Type“标头 ,基于这些映射。

    <mime-mapping>
        <extension></extension>
        <mime-type></mime-type>
    </mime-mapping>
    
  6. Welcome File List:定义的默认初始页面

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    
1.3.4、项目部署
  1. 部署到webapps中:部署到Tomcat里的项目放到webapps文件夹中,名字为项目名字,其中index一般为默认主页,WEB-INF文件夹内有web.xml配置文件、存放java程序的classes文件夹、存放jar包的lib文件夹、存放资源文件(css、js等)的static文件夹
    在这里插入图片描述
    在这里插入图片描述

  2. 在tomcat\conf\Catalina\localhost文件夹下,创建一个xml文件,,这样就不需要把项目放到webapps中就可以访问项目了。

xml文件介绍
	xml是一种可扩展的标记性语言。主要用来作为配置文件使用。
	xml文档有五部分组成:用法和HTML的标签类似
		1、声明:	<?xml version="版本" cncoding="utf-8" ?>	
		2、元素(标签): <></>
		3、xml属性:标签内的属性
		4、xml注释:  <!--注释-->
		5、文本区域:标签之间的文本内容;<![cdata[文本]]>这种格式文本内容不会解析

手动打开的html页面和服务器访问的html页面的区别:

1、手动打开的html页面遵循的是file协议,直接根据file后的路径读取,解析在浏览器
2、服务器使用的是http协议,需要有ip地址,端口号,项目名称等信息。然后服务器根据这个请求信息寻找到相应的文件,然后把内容响应给客户端,解析在浏览器。
1.3.5、IDEA整合TomCat
  • idea中导入Tomcat

在这里插入图片描述

  • 创建web项目

在这里插入图片描述

在这里插入图片描述

  • idea使用Tomcat,然后运行项目
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

;