1 Servlet开篇准备
1. HTTP协议
HTTP协议是TCP/IP协议的上层协议。TCP负责确保从一个网络节点向另一个网络节点发送的文件能作为一个完整的文件到达目的地。IP是一个底层协议,负责把数据块(数据包)沿路/路由到目的地。HTTP是另一个网络协议,它要依赖TCP/IP从一处向另一处完整的传送请求和响应。
1.1 HTTP协议之URL
把URL作为第一个介绍是因为,只有你在浏览器中输入了url地址,才会有后面的HTTP请求和HTTP响应。
rul地址解析如下:
TCP端口只是一个16位数字而已,用于标识服务器硬件上一个特定的软件程序。从0到1023的TCP端口好已经保留。
1.2 HTTP协议之HTTP请求
请求流中关键要素为:
HTTP方法(主要的为GET和POST)
GET和POST的区别:
从安全看 get<post 因为get 会把提交的信息显示到地址栏;
从提交内容看 get<post get 一般不要大于2k, post理论上无限制,但是在实际开发中,建议不要大于64k;
从速度看 get>post,get立即响应,post排队;
Get可以保留uri中的参数,利于收藏;
- 如何使用:GET表示得到某些东西,对服务器不应该做任何改变,所以它是幂等的。POST是一个更新。使用POST体中的数据修改服务器上的某些东西,它是非幂等的;
注:幂等是指,一次和多次请求某一个资源应具有相同的副作用。
访问页面的URL;
表单参数;
Accept: text/html,image/* [告诉服务器,我可以接受文本,网页,图片]
Accept-Charset: ISO-8859-1 [接受字符编码 iso-8859-1]
Accept-Encoding: gzip,compress [可以接受 gzip,compress压缩后数据]
Accept-Language: en-us,zh-cn [浏览器支持中,英文]
Host: www.sohu.com:80 [我要找主机是 www.sohu.com:80]
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT [ 告诉服务器,我的缓冲中有这个资源文件,该文件的时间是。。。]
Referer: http://www.sohu.com/index.jsp [告诉服务器,我来自哪里,该消息头,常用于防止盗链]
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)[告诉服务器,浏览器内核]
Cookie [cookie]
Connection: close/Keep-Alive [保持连接,发完数据后,我不关闭连接,30秒]
Date: Tue, 11 Jul 2000 18:23:51 GMT [浏览器发送该http请求的时间]
一个请求如下:
1.2 HTTP协议之HTTP响应
在接收和解释请求消息后,服务器返回一个HTTP响应消息。
关键要素为:
状态码:
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
eg:HTTP/1.1 200 OK (CRLF)
Location: http://www.baidu.org/index.jsp 【让浏览器重新定位到该url】
Server:apache tomcat 【告诉浏览器我是tomcat】
Content-Encoding: gzip 【告诉浏览器我使用 gzip】
Content-Length: 80 【告诉浏览器回送的数据大小为80节】
Content-Language: zh-cn 【支持中文】
Content-Type: text/html; charset=GB2312 [内容格式text/html; 编码gab2312]
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【告诉浏览器,该资源上次更新时间】
Refresh: 1;url=http://www.baidu.com 【过多久去,刷新到http://www.baidu.com】
Content-Disposition: attachment; filename=aaa.zip 【告诉浏览器,有文件下载】
Transfer-Encoding: chunked [传输的编码]
Set-Cookie:SS=Q0=5Lb_nQ; path=/search[后面详讲]
Expires: -1[告诉浏览器如何缓存页面(IE)]
Cache-Control: no-cache [告诉浏览器如何缓存页面火狐]
Pragma: no-cache [告诉浏览器如何缓存页面]
Connection: close/Keep-Alive [保持连接 1.1是Keep-Alive]
Date: Tue, 11 Jul 2000 18:23:51 GMT
Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间。eg:Expires:Thu,15 Sep 2006 16:23:12 GMT
一个请求响应如:
2. Web服务器
Web服务器最擅长提供静态Web页面,但是有时我们不仅仅从Web服务器获取一些动态的内容,这时Web服务器会调用服务器上另一个应用(Web容器,如Tomcat),然后从这些应用中取得相应的响应,再把它发送给客户。
Web容器就是一个动态网页的管理器和解释器,当向Web服务器请求一个Servlet时,Web服务器首先将这个请求交给部署该Servlet的容器。由容器向servlet提供HTTP请求和响应,而且由容器调用Servlet的方法。
容器处理请求的过程:
容器的作用:
1、提供Web服务器与Servlet的通信,无需我们自己写Scoket等内容。
2、管理Servlet的一生。
3、多线程支持;注意会有同步的问题。
4、将JSP翻译为Servlet
3. Tomcat
3.1 安装tomcat服务器
解压即可。
3.2 配置
①在环境变量中添加:JAVA_HOME= 指向你的jdk的主目录(并不是bin文件目录)
注:如果没有在环境变量中配置JAVAHOME,则应该在tomcat的startup.bat文件中配置:
② 启动tomcat服务器
到 tomcat 主目录下 bin/startup.bat
③验证是否安装成功
http://localhost:8080(8080是默认端口如果该端口已经被占用需要修改端口)
如果您的机器的8080端口被占用,则无法启动,这是有两种解决方法:
1.关闭8080端口
使用netstat -an或者netstat -anb查看谁占用了8080端口,然后关闭它就可以了。
2.改变Tomcat的端口号
到 conf/server.xml 文件中修改
注意:tomcat有多个Connector,每个Connector代表不同protocol(协议),也是从不同的端口来访问的。如上面的Connector是从8088端口来访问tomcat的,并且只能接受HTTP/1.1协议。因此不要改错了。
3.3 Tomcat的目录结构
bin: 启动和关闭tomcat的bat文件
conf: 配置文件
-->server.xml : 该文件用于配置和server 相关的信息, 比如 tomcat启动端口号,配置Host, 配置Context, 即web应用(当把web应用放在别的地方而不是放在webapps中时就要用它了)
-->web.xml : 该文件配置web应用(web应用就相当于是一个 web站点)
-->tomcat-users.xml: 该文件用户配置tomcat 的用户密码 和 权限
lib 目录: 该目录放置运行tomcat 运行需要的jar包
logs 目录:存放日志, 当我们需要去查看日志的时候,很有用!当我们启动tomcat错误时候,可以查询信息.
webapps 目录: 该目录下,放置我们的web应用(web 站点)。
work: 工作目录: 该目录用于存放jsp被访问后生成的对应的server文件和.class文件
3.4 Web应用的目录规范结构及首页配置
一个完整的标准Web应用的目录规范结构如下所示:
在这个目录结构中:WEB-INF目录下的classes目录将来是存放.class文件;lib 目录用来存放.jar文件;web.xml 配置当前这个web应用的信息(目前我们只需要知道这几个就够了,随着不断的深入其他的目录的用途会被一一揭晓)。
假如我们想将index.jsp页面配置为该应用的首页,则应该在web.xml文件中进行如下配置:
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
这样当我们的网址中不带资源名称时Web服务器就会将首页返回给我们。
3.5 管理虚拟目录
大多数情况下,当我们把web 应用直接放到webapps目录下,这时,tomcat会自动管理,但是有时候如果我们希望tomcat也可以管理其它目录下的web应用,该怎么办呢?使用虚拟目录配置
假如我希望tomcat帮我管理我D:\Web2(这是一个web应用):
①在tomcat的conf目录下打开server.xml文件;
②找到Host节点,添加<Context path="/myweb2" docBase="d:\web2"/>
myweb2:是访问时输入的web名,实际取出的是d:\web2中的资源
"d:\web2":要管理的物理路径。
假如我们要访问d:\web2中的index.jsp文件,实际访问时输入的地址:http://localhost:8088/myweb2/index.jsp
③重启tomcat才生效(因为tomcat待用dom技术解析xml文件。)
1 Servlet开篇准备的更多相关文章
- Servlet开篇
Servlet开篇 前面我已经说过好多遍了,如何学习好一个东西其实就是2个问题: 1,这个东西是干嘛的?为什么要玩这个东西? 2,怎么样就玩好这个东西了?具体的应该玩这个东西的什么? 其实现在对于我来 ...
- java web简易网上书店项目系列,使用MVC模式(servlet+jstl+dbutils),开篇
一. 针对很多java web初学者入门困难的问题,笔者利用一个小型web项目,一步一步的展示java web开发方法,每一个章节引入一些java web开发的重点知识,让同学们可以将java web ...
- JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系
JSP(JAVA SERVER PAGE)的缩写,其本身就是servlet的简化,是一种动态网页标准,其特点是在HTML代码中嵌入JAVA代码,JSP标签或用户标签来生成网页.至于它为什么会出现,主要 ...
- JSP入门:介绍什么是JSP和Servlet(转)
转自:http://developer.51cto.com/art/200907/134506.htm JSP入门:什么是jsp? JSP(Java Server Pages)是由Sun Micros ...
- 从.Net到Java学习第一篇——开篇
以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...
- Servlet、Tomcat访问(access)日志配置、记录Post请求参数
一.运行环境: Maven:3.5.2(点击下载) ,下载页 Tomcat:8.5.29(点击下载) ,下载页 JDK:jdk1.7.0_80(点击下载) ,下载页 MavenDependency: ...
- Servlet容器请求处理
红色部分为本章所述模块 所讲述的请求流程模块,大家已经很清楚了.那怎么给大家去讲的更清晰,大家理解的更容易呢?当然是,带着问题去学习,吸收或许会更快些啦.:) 开篇之前,给大家提以下几个问题,这些问题 ...
- 【Spring实战】----开篇(包含系列目录链接)
[Spring实战]----开篇(包含系列目录链接) 置顶2016年11月10日 11:12:56 阅读数:3617 终于还是要对Spring进行解剖,接下来Spring实战篇系列会以应用了Sprin ...
- servlet基础梳理(一)
将近一个月没看servlet了,再加上第一次学习也没有深入.仅仅是笼统的看了一遍,编了一点基础案例就过去了,如今再去看感觉跟没学过一样.这里再用一点时间把这些基础都梳理一下,加深印象并为以后高速复习做 ...
随机推荐
- 只写104行代码!在nopCommerce中如何实现自动生成网站地图
表告诉我说你不知道nopCommerce是什么.它是目前.NET中最流行的完全开源网上商城,由俄罗斯的团队在2008年开始立项一直开发到现在已经是3.3版本了.代码目前托管在codeplex上,有兴趣 ...
- 取消vs2013在代码中的Reference数量功能
继续吐槽.新增的自动统计reference数量的功能: 不爽的是总以为那是一行空行,可是鼠标放上去总是落空,遂我要干掉他. 这玩意有个好处就是有两个版本的程序有小修改的时候(尤其有很多重载方法的调用变 ...
- Redis监控技巧(转)
来自:http://blog.nosqlfan.com/html/4166.html Redis 监控最直接的方法当然就是使用系统提供的 info 命令来做了,你只需要执行下面一条命令,就能获得 Re ...
- 转:如何学习javascript
ps:每过一段时间就会发觉自己懂的越来越少,打开编辑器的时候不知道从何入手.兴许是过于急于求成,总没有系统地去对这门语言进行学习,囫囵吞枣,只想着能够解决工作需求.是时候让自己重新出发,从零开始,一页 ...
- WPF 创建桌面快捷方式
#region 创建桌面快捷方式 string deskTop = System.Environment.GetFolderPath(System.Environment.SpecialFolder. ...
- ubuntu 下安装 lxml 失败
/tmp/pip-build-7HN4t8/lxml/src/lxml/includes/etree_defs.h:14:31: fatal error: libxml/xmlversion.h: N ...
- navicat 链接linux 服务器上的数据库
- 自定义圆环progressbar
RoundProgressBar.java /** * RoundProgressBar.java [v1.0.0] * classes: com.example.audiorecordingtest ...
- 使用IntelliJ IDEA 14和Maven创建java web项目
参考地址 http://www.cnblogs.com/jifeng/p/4658765.html
- Python strange questions list
sys.setrecursionlimit(1<<64) Line 3: OverflowError: Python int too large to convert to C long ...