北京行——javaWeb入门
一、Tomcat服务器的简单配置
1、去Apache官方网站下载tomcat服务器
tomcat 主流下载版本 5.5 6.0 7.0 ---- 最新版本7.0
* 课程以tomcat6.0 为主 下载6.0 zip格式
2、 解压缩tomcat
* 不要使用含有空格和中文目录
3、启动tomcat之前 配置 JAVA_HOME 环境变量 ------ 配置JDK安装路径
* 注意 JAVA_HOME 使用 下划线 , 配置JDK安装路径时,一定不要以; 结尾
4、启动tomcat服务器
双击bin/startup.bat (如果使用linux 双击bin/startup.sh)
输入 http://localhost:8080/ 访问tomcat网站主页
5、因为网站通过HTTP协议访问,HTTP协议默认端口80 ------ 修改tomcat服务器启动端口 80
修改 conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> 将8080 修改为 80
访问localhost:80 端口 ----- 省略端口写法 http://localhost 访问站点
tomcat启动问题
1、窗口一闪然后消失 ----- 编辑startup.bat 在文件末尾加入 pause指令,再次运行,读取错误原因,根据原因解决
* JAVA_HOME路径必须是JDK不可以是JRE
2、端口占用问题
发现端口被占用后,通过cmd命令行,查看占用端口进程 --- netstat -ano (xp win7 通用)
在任务管理器关闭 该进程
* windows系统 WWW服务 --- IIS服务 --- 发现占用端口进程system (证明一个服务占用端口 --- 通过services.msc 关闭www服务)
3、CATALINA_HOME环境变量
指定tomcat安装位置 (该环境变量可以不配置) ---- 如果配置出错,tomcat将无法启动
二、发布网站的三种方式
1.配置tomcat
虚拟目录:就是浏览器的地址栏的路径但不是真实的文件路径
虚拟主机的配置:C:/windows/system32/drivers/etc/hosts 进行解析域名 本机上的
三、HTTP协议
1、Http1.0和Http1.1的区别
Http1.0 是一次请求,得到一次响应
Http1.1是一次请求可获得多个web资源
2、Http请求
请求的完整格式包括三个部分:请求行、头信息、请求体
请求行:请求中的第一行信息 (包括请求方式、请求资源路径、Http协议版本)
例如:GET/HTTP/1.1
请求方式: post、Get、HEAD、OPTION、DELETE、TRACE、PUT
常用的有两种:post和get
客户端网页那些是GET、POST
GET:1、用户直接在地址栏手动输入地址
2、超链接(页面中的)
3、form表单method设置为get,表单默认情况是get
POST:1、Form表单中的method中设置POST(就这一种方法)
POST和GET的区别:
GET方式地址后拼接的参数是有限制的(一般是不超过1k ),表单的提交数据会以明文的方式拼接到后面
拼接格式:以?分隔url和参数,多个参数用&符号
Post的特点:数据在请求体中,不在URL中显示,没有大小的限制。(把参数放在了请求体中)
需要注意的是 请求体和头信息之间存在一个空行
头信息:很多Key-value《重点》
Accept: text/html,image/* ----- 客户端可以接收文件类型 text/html HTML文件 image/* 任意格式图片
Accept-Charset: ISO-8859-1 ----- 客户端可以识别编码字符集
Accept-Encoding: gzip ----- 客户端可以识别压缩数据格式 gzip是一种压缩格式
Accept-Language:zh-cn ----- 客户端浏览器语言
Host: www.itcast.com:80 ----- 访问服务器地址
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT ----- 该请求的资源在客户端保存最后访问时间 (缓存有关)
Referer: http://www.itcast.com/index.jsp ---- 上一次请求访问页面地址
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) ---- 客户端浏览器类型版本
Connection: close/Keep-Alive ---- 该次请求连接后,连接是保持还是关闭 1.0 关闭 1.1 保持
Date: Tue, 11 Jul 2000 18:23:51 GMT ---- 请求时间
******* Accept-Encoding 、If-Modified-Since 、Referer(上次页面地址)
Referer 防止客户盗链数据 :通过google搜索页面直接下载 其它网站数据 (盗链)
模拟浏览器访问服务器 获得 refererServlet当中信息
1) URL 连接 ---- HTTP协议
2) Socket 连接 ----- TCP协议
在这个地方通过举防盗链技术的实例来了解:referer《头信息》
首先是RefererServlet
response.setContentType("text/html"); String referer = request.getHeader("referer"); response.setCharacterEncoding("GBK"); if (referer == null || !referer.startsWith("http:")) { response.getWriter().print("盗链可耻"); } else { response.getWriter().print("京东促销商品。。。。。。"); }
然后是破解防盗链程序
public static void main(String[] args) throws Exception {// 这个地方时模拟浏览器 URL url = new URL("http://localhost:8080/day4/testRefer");// 在打开连接之前,为了能够避开这个所谓的盗链功能 // 我们应该在请求之前设置头信息 URLConnection connection = url.openConnection();//获取目标连接 //这个地方有点不明白就是说为什么已经获取了目标资源为什么添加在后边,那不是已经访问了吗? connection.addRequestProperty("referer", "http:");// InputStream inputStream = connection.getInputStream(); byte[] b = new byte[1024]; inputStream.read(b); System.out.println((new String(b)).substring(0, 4)); }
通过上边的程序,我们能够轻松的获取到京东促销信息
请求体:存放客户端提交post请求 数据
格式:key=value&key=value
第二部分 HTTP响应
响应数据 分为三个部分 :状态行、头信息、响应体
1、状态行 分为三个部分: HTTP协议版本、状态码、描述信息
例如: HTTP/1.1 200 OK
100~199 Informational 请求信息不足 ,还需要其他信息才能处理
200~299 Success 请求处理成功
300~399 Redirection 服务器已经处理完毕,客户端还需要进一步动作
400~499 Client Error 客户端错误
500~599 Server Error 服务器端错误
200 请求处理成功 302 客户端进行重定向 304 客户端访问资源没有被修改后,客户端访问本地缓存 404 访问资源不存在 500 服务器内部出错
借钱
200 A 找 B 借钱 B 将钱 借个A
302 A 找 B 借钱 B 通知 A 找C 借钱 --- A 找C 借钱
例子:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("GBK"); response.setStatus(302);//设置状态码 这是个重定向 response.setHeader("Location", "index.jsp");//Loction 是重定向后的地址 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
这个地方是要明确重定向是客户端的两次请求,不是在服务区端跳转,而是客户端的问题
304 A 找 B 借钱 , B对A 说 借过了 --- A 使用 之前从B 借的钱
404 没钱
505 B 不存在了
2、响应头
Location: http://www.it315.org/index.jsp ---- 重定向地址 结合 302 一起使用
* 重定向 两次请求 两次响应
Server:apache tomcat ----- 服务器类型
Content-Encoding: gzip ---- 设置响应数据压缩格式 ---- 请求 Accept-Encoding
========这个压缩配置在web服务区优化是非常重要的========================================================
* 如果响应数据经过压缩 传输体积更小,性能更好
没有压缩情况下 13605字节 http://localhost/docs/
如何设置tomcat压缩
* 通过设置 tomcat/conf/server.xml 设置响应数据压缩
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" compressableMimeType="text/html,text/xml,text/plain" compression="on"/>
* 清除浏览器缓存,重启tomcat
4244字节 http://localhost/docs/
Content-Length: 80 ----- 响应数据长度
Content-Language: zh-cn ----- 响应数据语言
Content-Type: text/html; charset=GB2312 ----- 响应数据类型
* 数据类型采用Mime协议规定类型 html文件 ---- text/html、 jpg文件---- image/jpeg
* 在 tomcat/conf/web.xml 中查看文件mime类型
MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT ----- 和请求头信息 If-Modified-Since一起使用,控制服务器缓存
* ETag: W/"13397-1184876416000" tomcat生成Etag 13397文件大小 1184876416000文件最后修改时间(精确毫秒)
* 客户端下次请求时通过If-None-Match 携带刚刚 Etag信息
上述的两种方式功能是相同的,只不过是在Etag的功能更加强大而已。
Refresh: 1;url=http://www.it315.org ----- 网页自动跳转
Content-Disposition: attachment; filename=aaa.zip ----- 文件下载时指定文件附件名称
控制该程序在客户端不缓存
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
* 对于动态程序,经常修改, 禁止浏览器缓存内容
例子:
response.setCharacterEncoding("GBK"); response.setHeader("Expires", "-1"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.getWriter().print("大家好,才是真的好...ss..");
Connection: close/Keep-Alive ---- 响应后连接是否关闭
Date: Tue, 11 Jul 2000 18:23:51 GMT --- 响应时间
重点:302结合Location进行重定向 、在tomcat配置gzip压缩 、tomcat缓存策略 、禁止浏览器缓存
3、响应体
通常HTML 文件内容 ---- 如果设置响应体进行gzip压缩,看到gzip压缩内容
-------------------------------------------------------------------------------------------------
通过HTTP协议Range头信息 实现断点下载功能
在连接服务器目标资源进行下载过程中,传递Range头信息, 指定下载目标资源部分内容 ---- 实现断点下载功能
例子:
package cn.binbin; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; public class TestDownload { public static void main(String[] args) throws Exception { URL url = new URL("http://localhost:8080/day4/file.txt"); URLConnection connection = url.openConnection(); connection.addRequestProperty("Range", "bytes=100-"); InputStream inputStream = connection.getInputStream(); OutputStream outputStream = new FileOutputStream(new File("clone.txt")); byte[] b = new byte[1024];// IO文件复制这一章节 有些知识点还是遗忘了 int len; while ((inputStream.read(b)) != -1) { outputStream.write(b); } // 不要忘记关闭流 inputStream.close(); outputStream.close(); } }
使用URL类 模拟客户端访问 WebRoot/info.txt 下载文件中内容
小结:
1、Tomcat安装配置 ---- 修改端口 、掌握tomcat启动问题解决(一闪就没 pause,端口占用 netstat -ano)
2、tomcat 理论细节 Tomcat和JAVAEE、Servlet、JDK版本对应关系 、Tomcat目录结构、标准网站目录结构
3、虚拟目录映射三种方式
4、虚拟主机配置(虚拟主机DNS解析过程) ----配置缺省虚拟目录,配置欢迎页面、 配置虚拟主机
5、在MyEclipse中 使用Tomcat
6、HTTP 请求方式几种? GET和POST区别?
7、HTTP 协议头信息 Referer防盗链案例、Location重定向、tomcat的gzip配置、tomcat缓存策略、禁止浏览器缓存
8、Range断点下载 了解即可