最近没有做什么事,闲暇时看看《head first servlet&jsp》;800页的书(本来不愿意看的),真的很厚。看了几单元觉得不错,故将自己的看法写下来。
1 认识servlet,jsp,tomcat
servlet:简单说是一个组件,jsp本质就是servlet。 servlet有关的接口和类在二个包中:javax.servlet,javax.servlet.http;
request1: 居然jsp就是servlet,那为什么要有jsp这东西?
其实就是:居然有了c语言,为什么会出现java一样。更好地满足需求呗! javaweb项目是需要和用户进行交互的,使用servlet会"比较难"显示界面,
特别是css样式--大写的尴尬(你试试)。jsp的出现解决了这个问题。看例子:
ex1:带样式的超链接
servlet: out.println("<a style='text-decoration:none; color:red;'>ss</a>");
jsp: <style> </style> <a>ss</a>--------html
servlet在这里:css,position控制都是问题?对吧
req2: tomcat是什么?作用?
开源服务器,专门给javaweb开发人员用的,好家伙。至于作用: (1)服务器 (2)servlet/jsp容器——>控制(管理)servlet的行为
2 实现servlet
先看一张图:
之前说了,与servlet有关的接口和类都是在javax.servlet,javax.servlet.http中,这个包是父接口与子接口关系,http的那个包是专门用来处理http有关的请求。
以后会发现经常使用的接口和类都在第二个包中。
上图中我们看到了,实现servlet有二种方式
(1)GenericServlet ----通用请求,必须重写service()函数
(2)Httpservlet ----与http协议有关的请求 ,必须重写doGet(),doPost()中至少一个。这个类重写了service()方法
浏览器使用的基本上是http协议,所以基本上的servlet是继承Httpservlet
3 servlet生命周期
项目(假设只有一个servlet)部署在容器中,容器会做什么? 估计是加载DD文件(web.xml部署文件) 。我们关心的来了
req 3:谁什么时候创建servlet对象?
ans:容器创建的,什么时候? 不好说,可能是在部署之后创建,也可能是"第一次请求"时,这没有关系(不同服务器可能不一样)。下面假定部署时吧.
req 4:对象什么时候成为servlet?
ans:这个问题一定要懂, 容器调用servlet的构造函数之后还不是一个完整的servlet对象。为什么?原因是这个对象没有servletConfig对象。
servletConfig对象:简单理解就是servlet在web.xml的一部分(所谓的servlet部署文件)对应的对象。
ans: 容器执行构造函数之后,在调用init(servletConfig cf)函数时将servletConfig对象赋予对象---->恭喜你,你现在是完美的servlet了
注意:servlet还没处理任何有关用户的请求。接下来就厉害了
req 5:servlet对象只有一个
ans:不管这个servlet以后处理多少个用户的请求,servlet实例只有一个。也就是构造函数和init()不会再调用!除非servlet重新部署了(修改代码)。
4 生命周期继续?
上面说的是处理用户请求之前的一些初始化,用户请求来了,怎么办?
req 6:怎么处理用户请求?
httpServlet实例调用service()函数,有这个函数判断请求方式(get,post),从而决定调用doGet或者doPost();
req 7:同时处理多用户?
使用多线程机制---容器维护
req 8: servlet什么时候结束?
不知道。关闭服务器肯定是结束的,其他可能呢? servlet长期不使用会结束(释放资源啊)
---------------------------------------------------------------------------------------------------------------------------------------------------------------
5 实用的request请求对象
HttpRequest request对象作用
(1) String getparameter();
获取请求参数,一般使用在servlet中,获取客户端过来的一些"数据"
(2)Object getAttribute(); void setAttribute();
设置或者获取request属性,比如从数据库中读取相应的数据List(图书),通过设置request到客户端。获取list,显示出来
(3)获取请求首部字段
(4)cookies[] getCookies()
获取cookies
(5)其他
了解servlet之后,接下来我们应该继续学习
(1)"属性与相关监听者"
(2)会话管理(session和cookies原理)