(二)javaweb开发的常见概念总结(来自那些年的笔记)

目录

  • WEB开发相关知识
  • WEB服务器
  • Tomcat服务器
  • WEB应用程序
  • 配置WEB应用
  • 配置缺省的WEB应用
  • Web设置首页
  • web.xml文件
  • 配置虚拟主机
  • 配置https连接器
  • 为我们的网站,配置Https连接器,也就是加密的传输;
    • 其中名字与姓氏就是网站的名字:是问你为哪一个网站生成证书;


WEB开发相关知识

  • Web分为两种:

    静态web资源:开发技术:HTML

    动态web资源:JSP/Servlet、ASP、PHP等;其中,在java中,动态web资源开发技术统称为javaweb;


WEB服务器

  • 什么是WEB服务器呢?

    先考虑一个问题,我们开发出一个web资源,放在我们自己的电脑上,那么其他人想要访问这个web资源,应该怎么做呢?

    首先,毋庸置疑,其他人是无法直接访问到我们电脑上的资源的,因为这些资源是属于本地的;因此,我们必须再开发一个网络程序,来当做跳板;让他们先访问这个网络程序,由网络程序来访问我们的本地文件;每开发一个web资源,都需要开发这样一个网络程序,这些网络程序是通用的;因此,有人帮我们开发好了——它们就是WEB服务器 ;


Tomcat服务器

不支持所有的J2EE规范(13种),仅支持JSP、Servlet规范 ;

其中http的默认端口是80,https的默认端口443;也就是说,当我们使用http协议的时候,在浏览器中输入地址时,如果没有指定端口号,则默认访问80端口;这也是我们将项目运行起来的时候,挂载80端口的原因,不然每次都得写端口号;


WEB应用程序

供浏览器访问的程序,通常简称为web应用。

一个WEB应用由多个静态WEB资源和动态WEB资源组成,如:
•HTML,css,JS文件
•Jsp文件、java程序,支持jar包
•配置文件等等….
•组成web应用的这些文件,我们通常放在一个目录下,这个目录称之为WEB应用所在目录;目录中的所有文件称为web应用;


配置WEB应用

Web应用开发好以后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚拟目录的映射 ;

  • 方法一

这个过程在服务器的配置文件里面配置;(其中tomcat的配置文件在下面的目录中)
(二)javaweb开发的常见概念总结(来自那些年的笔记)_第1张图片
在HOST标签中,配置一个Context标签,一个Context就是一个web应用;改变了配置以后,需要重启服务器;
例子:

<Context path="/allbet" docBase="E:\web"/>   

空格不可以随便打;docBase中配置的是Web应用所在目录,path配置的是虚拟目录,也就是在浏览器中打的地址;
现在,我们将Web应用配置好以后,通过Tomcat服务器访问这个web资源,地址就是:http://localhost:8080/allbet/1.html


  • 方法二

    方法一,有个致命的弊端,必须重启服务器,才能加载我们的后添加的Web应用;所有不再使用;

    在Tomcat配置文件目录下,有一个Context文件,在这里配置我们的Web应用,但是这里配置的Web应用将会被服务器上的所有的Web应用所共享

  • 方法三

    Tomcat配置文件目录下,有一个Catalina文件夹,下面有一个localhost文件夹 ,我们在这里面新建一个Context.xml文件,在这里面配置的Web应用,会被服务器上面的所有应用共享

  • 方法四

    Tomcat配置文件目录下,有一个Catalina文件夹,下面有一个localhost文件夹,我们在里面新建一个XML文件,在这个XML文件里面配置Context,这里的Context,不再需要我们去写虚拟路径,这里的虚拟路径就是我们的XML文件名;这种方法。不需要重启服务器;如果想要多层目录,就在XML文件的名字中加上#,用#拼接多层次的目录;

  • 方法五

    让tomcat自动映射

    tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚拟目录。换句话说:tomcat服务器WebApps目录中的web应用,外界可以直接访问;他会将文件夹的名字,自定映射成虚拟目录;


配置缺省的WEB应用

将Web应用配置成缺省的;我们只需要将上面讲的【配置WEB应用-方法四】中的XML文件,命名为ROOT.xml 即可;这样,我们就不需要在细致的指定访问哪一个文件了。比如我们,不想再写明什么myWeb/1.html了。想在端口号后面直接输入1.html 就能访问到这个页面,就需要把1.html配置成缺省的;例如:http://localhost:8080/1.html

还有一种设置缺省的方法,就是在第一种的写Context标签,将path=”” 设为空白 ;也是缺省的一种配置方法


Web设置首页

首页就是一个web应用,在没指定具体访问哪一个页面的时候,显示的界面,在 web.xml 里面配置首页;

    <welcome-file-list>
        <welcome-file>index.htmlwelcome-file>
        <welcome-file>index.htmwelcome-file>
        <welcome-file>index.jspwelcome-file>
    welcome-file-list>

比如;我们的web应用叫mail,那么我们http://localhost:8080/mail/ 并没有指定访问mail的哪个页面,那么就会访问mail的首页;如果我们再把mail目录配置成缺省的,http://localhost:8080/ ,那么,这样就可以直接访问到我们的首页了,这就是Tomcat的首页实现原理;


web.xml文件

注意,写在web应用目录下WEB-INF目录下面的web.xml文档中的web资源,必须在与WEB-INF目录同级目录下面;这个文件很重要,关于web许多配置,都写在这个文件中;


配置虚拟主机

在一个Tomcat服务器中可以配置多个网站,所谓配置虚拟主机,就是tomcat服务器中配置一个网站。

如需在WEB服务器中配置一个网站,需要使用Host元素进行配置,例如:

<Host name=’’site1’’ appBase=”c:\app”>Host>

name代表域名, appBase代表网站的文件夹目录
配置的主机(网站),要想被外部访问,必须在DNS服务器或者Windows系统中注册。
配置的主机要想被外部访问,必须在DNS服务器或者Windows系统中注册;


配置https连接器

加密的传输协议;在网上传输信息的时候,默认是不加密的;

了解一些软件密码学基础:

对称加密:
例如:现在A准备给B发送信息;A先用密码将信息加密了,再发送给B,B收到信息以后,用密码将信息解密,得到信息原文;这里它们使用的密码是相同的,是由A指定的密码;这就是对称加密;
对称加密有一个致命的弊端:A怎么把指定的密码发送给B,在发送密码的过程中会不会被窃取;答案是肯定的,一定会被窃取;

非对称加密
鉴于对称加密的不安全性,数学五百年的积累,提出了非对称加密;
例如:A要向B发送数据;B先利用非对称加密算法,算出一对秘钥;这对秘钥有个特性:就是任意其中的一把秘钥加密的数据,自己都解不开,必须要使用另一把秘钥解密;
B将生成的一对秘钥,其中的一把秘钥在网上发给A,这把在网上传送的秘钥,我们一般称为公钥;这样A可以将要发送的信息,用公钥加密发给B,B收到用私钥解密;
安全问题:
如果公钥在网上被人截获,怎么办呢?截获公钥,依然是解不开密文的;因为,只有私钥才能解开公钥加密的信息;暴力破解,不存在的,需要的时间非常久,可以看做不可能;
但是,这里还有安全问题的;
比如:我还可以自己生成一对秘钥,在截获B的公钥,将我的公钥发送给A,让它误以为这就是B的公钥;这样,A的密文,B将无法解开,而我将可以解开密文;这里的问题就是:如何让A确认 收到得到秘钥是B发送给他的,而不是我的秘钥;
互联网的解决方法:有一个第三方证书颁发机构,CA ;B产生一对秘钥,就会去找CA为他的公钥担保,CA会给他生成一个数字证书,这里面包含了B的公钥;这样,B给A的就是一个数字证书了;
A收到数字证书,要做的第一件事,就是确认数字证书是不是B的;
如何验证呢?浏览器内置了校验功能,它会自己去检验这个数字证书是不是CA颁发给B的;
以上就安全了吗?答案是否定的!
再看,比如我截获了B的数字证书,并且截获了A发送给B的密文,虽然我无法解密密文,但是可以用数字证书伪造密文,让B真实收到的信息是我发送的;这里的问题是:B收到信息以后,怎么判断信息是不是A发送的;
解决方法:A为了让B确认信息是他自己发送的;A也需要生成一对秘钥,并且让CA对其公钥进行担保;A现将要发送的信息,用B的公钥加密,然后,再将密文的摘要(也就是数据的指纹,业界用MD5算法,生成数据指纹,不同的数据,会产生不同的数据指纹)用自己的私钥再次加密,这里我们成为数字签名;然后,将密文发送给B;B收到以后,先用A的公钥解密摘要,如果能解开,就说明了两件事:
1、 信息是A发来的,因为,普天之下,只有A一人拥有私钥;能要A的公钥解密信息,说明信息是A的私钥加密的,也就是A发送来的;
2、 信息没被篡改过,因为其他人得不到A的私钥;一旦,对信息进行篡改,用他自己的私钥重新生成数字签名;B是解不开信息摘要的;

以上是不是就安全了呢?以上的安全,全部建立在CA是不可被攻破的基础上的,密码学讨论到最后,是没有安全可言的;


为我们的网站,配置Https连接器,也就是加密的传输;

命令: keytool –genkey –alias tomcat –keyalg RSA 先生成一张数字证书;

其中名字与姓氏就是网站的名字:是问你为哪一个网站生成证书;

输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?


配完以后,生成一个keystore文件;
我们要想我们的网站,使用加密传输,就需要我们去配置加密连接;在serverl.xml中配置 ;(单向传输配置)

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
               keystoreFile="conf/.keystore" keystorePass="********" />

我们指定端口号是8443,因此,访问这个端口,就是加密的连接了;我们在配置里面指定了证书的位置,证书的密码;但是,这里我们的证书,并不是受信任的证书,因为,使我们自己生成的,并不是CA颁发的;因此,不会得到浏览器的信任;

你可能感兴趣的:(JavaWeb基础)