在本部分 最重要的就是 理解 Servlet的运行原理。
Servlet说明白一点就是可以运行在服务器上的小型Java程序,它和一般的java程序的区别是是:可以通过HTTP协议 接收 和响应来自Web客户端的请求。
客户端浏览器 与 服务器 与 数据库 之间的 通信 交互 的 关系 如下图所示。
下面分析下,Serclet生命周期:
客户端 首先向 tomcat 输入 网址URL,然后 tomcat根据 请求的URL找到 对应的应用,找到 url-pattern中对应的
servlet类,然后实例化 该类 ,依次执行 init,service,destory方法;需要注意的是 当 浏览器 向服务器端 多次 提交 同一请求的时候: init方法只执行一次,而 service方法会 执行多次,最后关闭应用的时候 执行destory方法。
在使用 Servlet的时候 其实 就是 使用 Serlet包下的各种类 ,tomacat服务器 已经在 初始化的 时候 封装好了各种类
ServletContext中与地址有关的常用方法: getRealPath(String name):获取 当前web应用中指定文件或目录在本地文件系统中的路径;getContextPath():获取当前应用在Web容器中的名称。
用于封装 代表浏览器发送给客户端的信息(将“HTTP请求协议”的完整内容封装到该对象中)。开发者拿到 request对象后 就可以 获取 客户端 发送给服务器的请求 数据。(由服务器自行创建)
HttpServletRequest的生命周期
当客户端浏览器 向服务器发送请求后,服务器 会根据Http请求协议的格式 对请求 进行 解析。同时,服务器 会创建HttpServletRequest类型的对象,即请求对象,然后 将 解析出 的数据封装 到该请求 对象中。此时HttpServletRequest实例就创建 并 初始化完毕了,也就是说,该请求对象 是由服务器创建的。当服务器 向客户daunt发送响应结束后,HttpServletRequest实例对象被 服务器销毁,HttpServletRequest对象的生命 周期 很短暂。
一次请求 对应一个请求对象,另外一次请求 对应 另外一个 请求对象,即 每次请求都会创建一个 HttpServletRequest类型的对象,这些对象之间没有关系。
常用方法的例子:
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println("提交的用户名为"+name);
System.out.println("密码为"+password);
System.out.println("提交的网页 URI 申请为"+request.getRequestURI()); ///Test11/request
System.out.println("提交的网页 URl 申请为"+request.getRequestURL()); //http://localhost:8080/Test11/request
//查看提交的 请求头
Enumeration requestName = request.getHeaderNames();
while(requestName.hasMoreElements()) {
String headerName = requestName.nextElement();
System.out.println("请求头:"+headerName+"值为:"+request.getHeader(headerName));
}
//获取客户端信息的方法
System.out.println("发出请求的客户机的IP地址"+request.getRemoteAddr());// 发出请求的客户机的IP地址0:0:0:0:0:0:0:1
System.out.println("发出请求的客户机的完整主机名:"+request.getRemoteHost());// 发出请求的客户机的完整主机名:0:0:0:0:0:0:0:1
System.out.println("客户机所使用的网络端口号"+ request.getRemotePort());// 客户机所使用的网络端口号59129
System.out.println("WEB服务器的IP地址为:"+request.getLocalAddr());// WEB服务器的IP地址为:0:0:0:0:0:0:0:1
System.out.println("WEB服务器的主机名"+request.getLocalName());// WEB服务器的主机名0:0:0:0:0:0:0:1
System.out.println(request.getContextPngath()); // /Test11
Web服务器 收到 客户端的http请求,会针对 每一次请求 创建一个用于代表响应的 HttpServletResponse类型的 response对象,开发者 可以 将 要向客户端返回的数据 封装到response对象中。
ServletResponse接口 有一个方法 getWriter(),用于 获取 到一个 标准 流对象 PrintWriter,该输出流 对象 是 专门 用于向客户 端浏览器 中 输出字符数据的,称为 标准输出流。
在JavaWeb编程的 API中,存在3个可以 存放数据 的 空间范围 对象 ,这三个 对象 中 所存储 的数据范围作用,由大到小 分别为:
ServletContext—>HttpSession---->HttpServletRequest
首先要明白的 就是Cookie与Session的生命周期 :Cookie存储在客户端,在 手动 创建一个Cookie时,服务器向客户端浏览器返回一个cookie值,这之后 浏览器每次访问 服务器都会带着这个Cookie。 Session存储在服务器端,服务器端将一个SessionId以Cookie的形式返回给浏览器客户端,这之后,浏览器客户端每次访问服务器的时候都会带着这个SessionId找到对应的Session对象。
cookie中重要的是添加cookie与获取cookie: addcookie,getcookies
session中重要的是为 session添加属性: session.setAttribute,session.getAttribute;session.removeAttribute()
JSP全称是Java Server Pages,是一种动态网页技术,JSP其实 就是在 html中 插入java代码和JSP标签之后形成的文件,文件 名以.jsp结尾。其实 JSP就是一个Servlet.在servlet中编写html比较痛苦,而写JSP就像 在写 html,但它 相比 html而言,html只能为用户 提供静态数据即静态页面,而JSP技术 允许在页面中嵌套java代码,为用户 提供动态数据,