学习完servlet然后写一个关于他它的总结,加深自己的印象,也希望读者能在其中学到点东西
HTTP协议
HTTP(Hypertext Transfer Protocol, 超文本传输协议)
1 HTTP是以明文方式发送数据的
2 用于从WWW服务器传输超文本到本地浏览器的传输协议。 是Web应用程序的基础
3 HTTP协议是以TCP/IP为基础的高层协议。
4 现在广泛使用的版本HTTP/1.1
5 Http的缺省端口是80Http特点是:无状态、无连接
Servelet简介
1 Servlet是服务器小应用程序
2 用来完成B/S架构下,客户端请求的响应处理
3 平台独立,性能优良,能以线程方式运行
4 Servlet API为Servlet提供了统一的编程接口
5 Servlet一般在容器中运行
常见的Servlet容器
Tomcat (在此用此容器)
Jetty / Resin
tomcat启动与停止
startup.bat
shutdown.bat
catalina.bat start
catalina.bat stop / shutdown.bat
catalina debug 调试错误的时候
run exit help
设置环境变量JAVA_HOME(启动tomcat失败一般都是环境变量设置有问题)
tomcat目录结构
bin/ 二进制可执行文件和脚本
catalina start stop
catalina debug run exit
common/ Catalina本身和web应用可加载的类目录
conf/ 配置文件目录
logs/ 日志目录
server/ 服务器所需的类库目录
shared/ Web App共享的类库
webapps/ Web应用所存放的目录applications
work/ Tomcat的工作目录(存放jsp产生的class文件)
temp/ 存放临时产生的文件
Servlet的生命周期
生命全过程:
加载 ClassLoader
实例化 new
初始化 init(ServletConfig) 仅执行一次
处理请求 service doGet doPost
退出服务 destroy()
只有一个对象
API中的过程:
init()//只执行一次, 第一次初始化的时候
public void init(ServletConfig config) throws ServletException
service()
public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException
destroy()//webapp 退出的时候
public void destroy()
doGet和doPost的区别:
Get方法:用户数据作为 URL 中的查询字符串传递给服务器,而body中的数据为空
Post方法:用户数据在body中传输给服务器
Get方法所传输的数据量有限制,Post方法则没有限制,当不会修改服务器端的数据时,应该使用 doGet() 方法
Get方法所传输的数据在url中可见,post则不可见,当需要修改服务器端的数据时,应该使用 doPost() 方法
Servelet的类层次结构
Servelet创建的文件默认继承于HTTPServlet
HttpServlet实现了javax.servlet.GenericServlet接口
HttpServlet类是专门处理基于HTTP协议的Servlet
Servlet还可以处理http以外的其他处理请求。
Cookie概述
1 cookie 是当你浏览每个网站时,由WEB服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID号、密码、浏览过的网页、停留的时间等等。
2 服务器通过cookie的响应头将cookie发送给客户机,其形式为名称=值
3 客户机则以文件的形式将cookie存放在本地硬盘上,具体存储位置与浏览器相关
4 Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。
5 Cookie在客户端是由浏览器来管理的,浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu.
Cookie的有效期
Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。
如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。
如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。
Cookie原理
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Cookie使用步骤
使用Cookie:
1 创建cookie对象:
Cookie color = new Cookie(“color”,”red”);
2 在响应中加入cookie:
response.addCookie(color);
3 通过request取回cookie
Cookie[] cookie = request.getCookies();
Cookie示例
示例:记录用户访问次数
Cookie[] c = request.getCookies();
int count = 1;
if(c!=null) { for(int i=0;i<c.length;i++) {
Cookie accountCookie = c[i];
if(accountCookie.getName().equals("accountCount")) {
count = Integer.parseInt(accountCookie.getValue())+1;
break;
}
}
}
response.addCookie(new Cookie("accountCount",String.valueOf(count)));
Session机制
除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
什么是Session?
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
Session概述
1 服务器的一块内存(存key-value)
2 和客户端窗口对应(子窗口)(独一无二)
3 客户端和服务器有对应的SessionID
4 客户端向服务器端发送SessionID的时候两种方式:
(1)cookie(内存cookie)
(2)rewriten URL
5 浏览器禁掉cookie,就不能使用session(使用cookie实现的session)
6 如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户端打开cookie
实现用户登录
Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。Session对象是在客户端第一次请求服务器的时候创建的。Session也是一种key-value的属性对,通过getAttribute(Stringkey)和setAttribute(String key,Objectvalue)方法读写客户状态信息。Servlet里通过request.getSession()方法获取该客户的Session
Session的生命周期
Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
Session的有效期
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。