day04 Java Web 开发入门

Author:相忠良

email: ugoood@163.com

起始于:April 1, 2018

最后更新日期:April 13, 2018

声明:本笔记依据传智播客方立勋老师 Java Web 的授课视频内容记录而成,中间加入了自己的理解。本笔记目的是强化自己学习所用。若有疏漏或不当之处,请在评论区指出。谢谢。

涉及的图片,文档写完后,一次性更新。

day04 Java Web 开发入门

1. web 开发相关介绍

web:表示网页。

Internet上供外界访问的Web资源分为两类:

  • 静态 web 资源(如 html 页面):指 web 页面*人们访问的数据始终不变;
  • 动态 web 资源:指 web 页面内容由程序产生,不同时间点人们访问 web 页面看到的内容不同;

静态 web 资源开发技术: html

常用的动态 web 资源开发技术: JSP/Servlet、ASP、PHP等。在 Java 中,动态 web 资源开发技术统称为 Javaweb。

2. web 服务器

我们的 web 资源想要为外界用户提供服务需有 web 服务器支持。Tomcat 服务器是免费的,即使用在商领域。

Tocmat官方站点:http://jakarta.apache.org

  • tar.gz 对应 Linux OS
  • exe 或者 zip 文件对应 Windows OS

教程里用的是apache-tomcat-6.0.20

毕竟这教程视频距离现在有好几年了,我们也可用更新的版本,我机器用的是apache-tomcat-8.5.9,也不是最新的。

安装服务器时不要装在中文目录或带空格目录里,记得要留个备份。

启动服务器:在C:\apache-tomcat-8.5.9\bin中找到startup.bat双击它启动服务器。

验证:浏览器地址栏中输入http://localhost:8080/正常打开表示成功。

各种协议对应的端口:

协议 端口号
http 80
smtp 25
pop3 110
ftp 23
https 443

3. Tomcat服务器启动的问题

内容较为零散,几乎无先后顺序,如下:

  • 需先配置JAVA_HOME环境变量。
  • 8080端口被占用也无法启动服务器。工具Fport.exe可查看被占用端口。
  • 测试的时候服务器用8080端口,上线后就用80端口。http默认访问80端口。
  • apache-tomcat-7.0.73\conf\server.xml文件决定了Tomcat服务器启动方式。
  • 认识URL:http://www.baidu.com
  • 整个叫URL,www.baidu.com是主机名,baidu.com是域名。买的是域名,在一个域名下可搭建多台主机。如pan.baidu.com
  • Catalina_home环境变量指示了tomcat在哪里。当我们用\apache-tomcat-7.0.73\bin\startup.bat启动服务器后,os会自动寻找Catalina_home所指示的tomcat服务器(无论你的startup.bat文件在哪里!)。实际开发时最好不要配置这个环境变量。

4. Tomcat目录结构

bin: 启动和关闭tomcat的脚本文件

conf: 配置文件

lib: tomcat服务器的支持jar包

logs: 日志

temp: 存临时文件

webaaps: 重要,供外界访问的web资源存放地

work: tomcat工作目录

5. Web应用程序(虚拟目录映射,缺省web应用)

web应用程序:供浏览器访问的程序,也简称web应用。

web应用所在目录:组成web应用的这些文件,通常用一个目录来组织,这个目录称为web应用所在目录。

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

关于虚拟目录的映射,参照:http://localhost:8080/docs/config/context.html

里面有一句:

In individual files (with a ".xml" extension) in the $CATALINA_BASE/conf/[enginename]/[hostname]/ directory. The context path and version will be derived from the base name of the file (the file name less the .xml extension). This file will always take precedence over any context.xml file packaged in the web application's META-INF directory.

意味着按照这种方法配置,可不用重启服务器,就能访问到页面。

试验步骤:

  1. c盘根目录建立news目录,在该目录中建立1.html并写入内容aaaaaa
  2. C:\apache-tomcat-8.5.9\conf\Catalina\localhost目录下建立a.xml并写入<Context docBase="c:\news"/>。这时不需再配path这个对外访问路径了。a.xml中的a将作为对外访问路径。也可以再建立一个b.xml并写入<Context docBase="c:\news"/>,这样的话,同一个 web 应用可映射到两个路径上。
  3. 验证:打开浏览器,地址栏输入http://localhost:8080/a/1.html,将显示网页内容。
  4. 另外若将C:\apache-tomcat-8.5.9\conf\Catalina\localhost目录下建立aa#bb.xml写入<Context docBase="c:\news"/>,这时,我们可在浏览器中输入http://localhost:8080/aa/bb/1.html来访问1.html这个 web 资源。

另一个简洁的配置方法是把news目录直接放到C:\apache-tomcat-8.5.9\webapps目录中。缺点是 web 应用程序和服务器放在了一起,开发时也许可以这样做,但实际配置中并不建议这样做。

再者,当输入http://localhost:8080时并没指定访问某web应用,但仍然访问了tomcat的首页,这和缺省有关。 我们可以将a.xml更名为ROOT.xml,这样1.html这个web应用将成为缺省web应用。当输入http://localhost:8080/1.html时即可访问。

最后,在C:\apache-tomcat-8.5.9\conf\ 目录中的 server.xml文件中</Host>前添加<Context path="" docBase="c:\news"/>也可配置 缺省web应用,但需重启服务器。

6. Web应用的组成结构(web.xml,特定文件放入特定目录,否则web应用无法工作)

开发web应用时,不同类型的文件有严格的存放规则,若违反,web应用将无法工作。

如图:

day04 Java Web 开发入门

自己实际操作一下。

需求:将 mail 这个web应用的 1.html 配置成首页。

步骤:

  1. webapps目录中建立mail目录;
  2. /mail中添加1.html并写入内容我是首页
  3. /mail中添加WEB-INF目录,并在WEB-INF中建立web.xml文件;
  4. web.xml中写如下内容(可复制C:\apache-tomcat-8.5.9\conf\web.xml的头和尾):
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"> <welcome-file-list>
<welcome-file>1.html</welcome-file>
</welcome-file-list> </web-app>

按上述操作,我们访问http://localhost:8080/mail/就能直接访问到1.html这个首页。

接下来,我们要把mail这个web应用配置成缺省的,我们选择将文件C:\apache-tomcat-8.5.9\conf\server.xml<Host>里添加<Context path="" docBase="C:\apache-tomcat-8.5.9\webapps\mail"/>

直接输入http://localhost:8080就能出现1.html这个欢迎页面。

总结:

若想直接输入http://localhost:8080就能出现 mail 这个指定的 web 应用的指定的首页,有2点要做:

  1. 配置默认web应用为mail(server.xml里或者在conf\Catalina\localhost里用建xml文件的方法);
  2. 配置mail应用的首页(在mail/WEB-INF/下的web.xml中配置,注意:可参考服务器的web.xml)。

内容显得凌乱,但直觉上,有个事儿得记住:

首页是web应用自己的事,当然应在那个应用的web.xml里配置;打开网站,默认哪个应用,这是tomcat服务器的事,当然应在服务器中做配置,既在服务器中的server.xml中或在conf\Catalina\localhost中建xml文件做配置!

另外,可把server.xml中的8080改成80端口的话,浏览器中输入http://localhost就能直接访问到 mail web 应用的1.html欢迎页面了。

下面图片展示了web.xml的重要作用:

day04 Java Web 开发入门

7. 配置虚拟主机

配置虚拟主机就是在tomcat服务器中配置一个网站。

  1. 可在server.xml中添加 Host 元素进行配置,如:<Host name="site1" appBase="c:\app"></Host>
  2. 配置的主机(网站)想要被外界访问,必须在DNS服务器或windows系统(C:\Windows\System32\drivers\etc\hosts)中注册。

7.1 配置多个网站

在一台主机上想配2个网站:www.sina.comwww.google.com

先配www.sina.com,假定该网站包含2个web应用mailnews步骤:

  1. server.xml中加入一个Host标签:<Host name="www.sina.com appBase="c:\sina"><Context path="/mail" docBase="c:\sina\mail"/><Context path="/news" docBase="c:\sina\news"/></Host>
  2. 在c盘根目录建立c:\sina目录,并分别建立\mail\news子目录,并在\mail目录中建立1.html文件并写入11111111111的内容。
  3. 因无法修改DNS服务器,只能改自己主机的host文件。把C:\Windows\System32\drivers\etc\hosts文件添加127.0.0.1 www.sina.com
  4. 验证:浏览器中输入http://www.sina.com/mail/1.html即可。

谷歌那个网站也做相同配置,读者自己试一试。

8. web资源访问流程

当我们在浏览器中输入http://www.sina.com/mail/1.html后,在浏览器中看到了返回的结果。这个过程是怎样的呢?如下:

  1. ie->windows的host文件: 查询windows,获取主机名对应的ip;
  2. ie->dns服务器:查询dns,获取主机名对应的ip;
  3. ie->sina的web服务器:用查询到的ip连sina服务器并发送http请求;
  4. sina的web服务器从请求信息中可获得客户机 想访问的主机名
  5. sina的web服务器从请求信息中可获得客户机 想访问的web应用 mail
  6. sina的web服务器从请求信息中可获得客户机 想访问的web资源 1.html
  7. sina的web服务器->web资源1.html:sina的web服务器读取相应主机下的、web应用下的web资源;
  8. sina的web服务器用读取到的web资源的数据,创建出一个http响应
  9. sina的web服务器->ie:服务器回送http响应;
  10. ie浏览器收到http响应,解析出资源数据并显示。
ie->host file in Windows OS: 1.get IP respect to \nthe host name
ie->DNS: 2.get IP from DNS
ie->sina Web Server:3.connect to sina web server and send http request to it
Note right of sina Web Server: 4.get the host name(i.e. www.sina.com) \nfrom the request info.
Note right of sina Web Server: 5.get the web app name(i.e. mail) \nfrom the request info.
Note right of sina Web Server: 6.get the web resource name(i.e. 1.html) \nfrom the request info.
Note right of sina Web Server: 7.read the web resource(i.e. 1.html) \nwithin the web app(i.e. mail) \nin the host(i.e. www.sina.com)
Note right of sina Web Server: 8.create a http respone
sina Web Server-->ie:9.send back the http respone
Note right of ie:10.parse the respone data \nand show it in IE

9. 打包 web 应用 war

将web应用打成 war 包,方便部署,且服务器对 war 包自动解压。

以google的news这个web应用为例,将其打成 news.war

在dos命令行模式下,进入c:\google目录,输入jar -cvf news.war news生成news.war包。当我们把news.war发布到tomcat服务器的webapps目录下时,服务器会将其自动解压。

10. 配Context元素的reloadable属性为true,让tomcat自动加载更新后的web应用

如在server.xml文件中:

<Host name="www.google.com" appBase="c:\google">
<Context path="" docBase="c:\google\mail" reloadable="true" />
</Host>

这种方式开发时用,部署时不用。web应用小时用,大时不用。

注意:

conf\context.xml中配的Context元素会被服务器中所有应用所共享,reloadable一般不应在这里配置。这里是全局性的配置。

11. Tomcat 体系结构

如图:

day04 Java Web 开发入门

Server -> Service -> 启动多个 Connector 响应客户端请求 -> Engine -> Host -> Context

可查看server.xml感受上述过程。上图就是根据server.xml画出来的。

12. 软件密码学基础和配置 https 连接器

12.1 软件密码学基础

涉及以下概念:

公钥,私钥:公钥加密的东西,私钥解;私钥加密的东西,公钥解;公钥加密的东西,公钥解不开;私钥加密的东西,私钥解不开。

CA:是一个可信任的机构。密码学领域里必须有一个信任点。网站向社会提供的公钥需由CA认证,才会被浏览器(也就是用户)认可。

数字证书:由CA认证过的公钥;

数字签名:数据发送者通过自己的私钥将数据摘要加密,连同用数字证书加密好的数据一同发送给接收者。前提是接收者有发送者的数字证书(既公钥)。数字签名的目的是向接收者证明,这份文件是发送者发出的,如:接收者用发送者的数字证书若能解开数据摘要a,说明该信的确为发送者发出的,解开数据摘要a后,接收者用自己的私钥解开信件获取原始数据,再用md5算法得到数据摘要b,若 a==b,说明文档没被篡改,且确实是由指定的发送者发出。

摘要,md5算法:要传输的数据通过md5算法生成数据摘要。

故事:

客户打开我们做的网站,在客户的浏览器上输入银行的用户名和密码,这得加密啊,咋整?按照上面提到的各种概念,对号入座。

为了客户的用户名和密码的安全,需加密后通过网络传输到我们的web服务器。这就需在我们的web服务器上配置公钥(数字证书,但做实验的话,这证书不会通过CA认证,既这根本不是个数字证书),并把这个数字证书通过网络传给客户。客户得到证书后,发送的用户名和密码或其他信息就都是经过证书加密的信息了。我们的web服务器通过那个成对的私钥解密传过来的信息即可。这是单方加密,实际开发中用的是双方加密。

实际操作在下节。

12.2 配置 https 连接器

本节涉及2个任务:

  1. 为我们的web服务器生成一个数字证书;
  2. 为我们的web服务器配置一个加密的连接器(https Connector);

生成数字证书:java 自带的工具 keytool -genkey -alias tomcat -keyalg RSA

密码“123456”,操作如图:

day04 Java Web 开发入门

最终生成了.keystore的密钥库。我的机器来说,该文件存放在C:\Users\ugooo目录下。

配加密的web服务器:

.keystore转移到tomcat服务器的conf\目录下。

打开server.xml添加一个加密的Connector,代码如下:

<Connector port="8443" protocol="HTTP/1.1"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="conf/.keystore" keystorePass="123456" />

注意上面代码中的keystoreFile="conf/.keystore" keystorePass="123456"表明了密匙库位置和开启密匙库的密码。这些属性信息都可在 Tomcat 主页的 Configuration 中的 Connector 中查询得到。

重启服务器后,浏览器输入https://localhost:8443/,查看效果(涉及到安装证书)。

13. Tomcat管理平台

进入tomcat首页,点击 Tomcat Manager

设置用户名和密码:

conf\目录下,打开tomcat-users.xml文件,在<tomcat-users>元素下添加如下代码:

<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-status"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<user username="tomcat" password="123456" roles="tomcat,manager-status,manager-gui,manager-script,manager-jmx"/>

用户名tomcat,密码123456。这时打开Tomcat Manager,输入用户名密码即可进入管理平台。

14. HTTP协议

HTTP:Hypertext Transfer protocol(超文本传输协议),它是TCP/IP协议的一个应用层协议(意思是:http协议是工作在tcp/ip协议之上的,即得先用tcp/ip协议连接上后,http协议才可工作),用于定义WEB浏览器与WEB服务器之间交换数据的过程。

HTTP协议与平台无关。

1.html代码如下:

aaaaaaaa
<img src="1.jpg">
<img src="2.jpg">
<img src="3.jpg">

当在浏览器中输入1.html的网址,按回车后,服务器共受了浏览器4次请求。

15. HTTP请求

15.1 HTTP 的 get 和 post 请求

day04 Java Web 开发入门

day04 Java Web 开发入门

post请求带数据给服务器,方法就是用表单,如下html代码:

<form action="/1.html" method="post">
<input type="text" name="username"> <input type="submit" value="提交">
</form>

get请求带数据给服务器,如下html代码(点击超链接时,带数据给服务器):

<a href="/2.html?username=aaaaa">点点</a>

15.2 HTTP 的 请求头的解释

day04 Java Web 开发入门

day04 Java Web 开发入门

其中的 If-Modified-Since 表示客户机缓存了这个页面的时间,通常用于与服务器那个页面的刷新时间的比对,若早于服务器那个页面的刷新时间,说明客户机缓存过的这个页面较老,服务器会重新传最新的页面给客户机。否则就不传了,这样就能减轻web服务器的压力。

16. HTTP响应

故事:我们平时打开网页有时候数据显示在页面,有时会打开一个下载对话框,这都是客户机根据服务器回送的响应中的响应头作出的对应动作。

重要直觉:服务器可以通过响应头,控制客户机浏览器的行为!

day04 Java Web 开发入门

day04 Java Web 开发入门

302:你请求我,我要你去找别人(服务器会回送1个location头,让你去找location头所指示的地址);

307和304:服务器不给你所请求的资源了,它让你找你去自己机器上的缓存找你要的资源;

404:一定是客户机地址写错了,即你请求的资源服务器没有;

403:客户机没权限访问服务器的那个资源(服务器有那个资源);

500: 服务器端出问题了。

16.1 响应头的解释

响应头的解释

day04 Java Web 开发入门

16.2 响应头 - Range头,断点续传

day04 Java Web 开发入门

上一篇:[原创]java WEB学习笔记12:一个简单的serlet连接数据库实验


下一篇:idea 项目添加web支持