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应用将无法工作。

如图:

自己实际操作一下。

需求:将 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的重要作用:

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 体系结构

如图:

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”,操作如图:

最终生成了.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 请求



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 的 请求头的解释



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

16. HTTP响应

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

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



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

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

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

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

500: 服务器端出问题了。

16.1 响应头的解释

响应头的解释

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

day04 Java Web 开发入门的更多相关文章

  1. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

  2. java web 开发入门实例

    学习是个技巧活,关键是要找到重点的地方,新手在这方面的坑尤其多.看别人的教程一步一步的跟着做,隔几步就遇到一个新知识点,忍不住就百度往深处了解,一晃半天就过去了. 有的知识点要深入学习的,有的是了解下 ...

  3. java web 开发入门 --- tomcat/servlet/jsp

    在做java web 开发时,要先安装tomcat.它是一个web服务器,也叫web容器,我们把写好的jsp, html页面放到它里面,然后启动它,就可以用浏览器访问这些页面,地址栏中输入localh ...

  4. java web 开发入门

    Java web,是java技术用来解决web互联网领域的技术总和.Java web技术主要包括客户端和服务端,java在客户端的服务有java applet,不过用的非常少,大部分应用在服务端,比如 ...

  5. java web开发入门汇总

    servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...

  6. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第6章.蜂巢

    第6章--蜂巢 蜂巢简介 网站开发完,就需要测试.部署.在服务器上运行. 网易蜂巢: 采用Docker容器化技术的云计算平台 https://c.163.com 容器管理:容器可被视作为云主机的服务器 ...

  7. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第4章.Maven

    第4章--Maven Maven实战 Java Web应用的部署: 手动式: 编译:javac -cp $CATALINA_HOME/lib/servlet-api.jar web-inf/class ...

  8. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第3章.Tomcat

    第3章--Tomcat Tomcat安装与运行 Tomcat:目前最常用的基于java的web应用服务器 本课程中所有的Java代码最终都需要部署到Tomcat中运行 Tomcat的配置文件是XML的 ...

  9. java web开发入门一(servlet和jsp)基于eclispe

    servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...

随机推荐

  1. Flow简易教程——安装篇

    .mydoc_h1{ margin: 0 0 1em; } .mydoc_h1_a{ color: #2c3e50; text-decoration: none; font-size: 2em; } ...

  2. C# 解析json数据出现---锘縖

    解析json数据的时候出现 - 锘縖,不知道是不是乱码,反正我是不认识这俩字.后来发现是json的 '[' 字符转换的 网上搜了一下,说的是字符集不匹配,把字符集改为GB2312. 一.贴下处理jso ...

  3. [转]安卓新一代多渠道打包工具Walle 解决渠道包V2签名问题

    转自https://www.jianshu.com/p/572b59829a08 为什么要打多个渠道的包? 大家都知道,android应用商店大大小小有几百个,作为一个有志向的app,就需要做到统计各 ...

  4. vue-router动态路由 刷新页面 静态资源没有加载的原因

    在做项目的时候,发现刷新页面的时候,静态路由没有加载,度娘了一圈,终于解决了. vue-router使用history模式+使用嵌套路由: 访问路由和嵌套路由页面,显示正常,但是刷新页面的时候,嵌套路 ...

  5. WebGL之通过外部传入a_PontSize值改变点着色器vshader内置变量gl_PointSize的值

    最近分配到一个看起来非常简单的优化需求.通过地图上设置工具来改变地图上显示的点的大小和透明度.无非过程就是从控件面板获取到用户设置的值保存到数据库中.然后地图上画点的时候取出设置的值渲染出点即可.前端 ...

  6. Java 线程池原理分析

    1.简介 线程池可以简单看做是一组线程的集合,通过使用线程池,我们可以方便的复用线程,避免了频繁创建和销毁线程所带来的开销.在应用上,线程池可应用在后端相关服务中.比如 Web 服务器,数据库服务器等 ...

  7. 文件上传详解 (HTML FILE)

    FileUpload 对象 在 HTML 文档中 <input type="file"> 标签每出现一次,一个 FileUpload 对象就会被创建. 该元素包含一个文 ...

  8. java中的链表编写

    通过while循环取出节点内容 class Node{//定义一个节点类,用于保存数据和取得下一个节点 private String data;//节点中数据 private Node next;// ...

  9. 妙用 scale 与 transfrom-origin,精准控制动画方向

    上次发完 不可思议的纯 CSS 导航栏下划线跟随效果 这篇文章之后,很多朋友找我讨论,感叹 CSS 的奇妙. 然后昨天,群里一位朋友问到了一个和这个效果比较类似的效果,问如何 将下面这个动画的下划线效 ...

  10. Mac下安装oh-my-zsh

    Mac下自带的终端并不好用,当你打开终端的时候是一个白花花的窗口,其实Mac自带几种shell,默认使用的是bash,可以通过 cat /etc/shells 查看几种shell bin/bash / ...