欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Servlet和JSP小结

程序员文章站 2022-05-23 17:36:00
...

在本部分 最重要的就是 理解 Servlet的运行原理。

Servlet说明白一点就是可以运行在服务器上的小型Java程序,它和一般的java程序的区别是是:可以通过HTTP协议 接收 和响应来自Web客户端的请求。
客户端浏览器 与 服务器 与 数据库 之间的 通信 交互 的 关系 如下图所示。
Servlet和JSP小结

下面分析下,Serclet生命周期:
客户端 首先向 tomcat 输入 网址URL,然后 tomcat根据 请求的URL找到 对应的应用,找到 url-pattern中对应的
servlet类,然后实例化 该类 ,依次执行 init,service,destory方法;需要注意的是 当 浏览器 向服务器端 多次 提交 同一请求的时候: init方法只执行一次,而 service方法会 执行多次,最后关闭应用的时候 执行destory方法。
在使用 Servlet的时候 其实 就是 使用 Serlet包下的各种类 ,tomacat服务器 已经在 初始化的 时候 封装好了各种类

Servlet和JSP小结

  • 在Servlet接口 的 init()方法 中有一个参数ServletConfig,这个参数类型是个接口,里面是 一些在web.xml中对当前Servlet类的配置信息。Servlet规范 将Servlet的配置信息全部封装到了ServletConfig接口对象中。每个Servlet都对应一个ServletConfig用于封装各自的配置信息,即有几个Servlet就会产生 几个ServletConfig对象;
  • WEB容器在启动时,它会为每个WEB应用程序 都创建一个对应的ServletContext对象,ServletContext对象包含Web应用中所有的Servlet在Web容器中的一些数据信息。ServletContext随着Web应用的启动而创建,随着Web应用的关闭而销毁。一个Web应用只有一个ServletContext对象。ServletContext不仅包含了web.xml文件中的配置信息,还包含了当前应用中所有Servlet可以共享的数据,可以这么说,ServletContext可以代表整个应用,所以ServletContext有另外一个名称:application。

Servlet和JSP小结
ServletContext中与地址有关的常用方法: getRealPath(String name):获取 当前web应用中指定文件或目录在本地文件系统中的路径;getContextPath():获取当前应用在Web容器中的名称。

HttpServletRequest接口

用于封装 代表浏览器发送给客户端的信息(将“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<String> 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

HttpServletResponse简介

Web服务器 收到 客户端的http请求,会针对 每一次请求 创建一个用于代表响应的 HttpServletResponse类型的 response对象,开发者 可以 将 要向客户端返回的数据 封装到response对象中。

ServletResponse接口 有一个方法 getWriter(),用于 获取 到一个 标准 流对象 PrintWriter,该输出流 对象 是 专门 用于向客户 端浏览器 中 输出字符数据的,称为 标准输出流。

数据空间 范围 对比

在JavaWeb编程的 API中,存在3个可以 存放数据 的 空间范围 对象 ,这三个 对象 中 所存储 的数据范围作用,由大到小 分别为:
ServletContext—>HttpSession---->HttpServletRequest

Cookie与 Session会话

首先要明白的 就是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

JSP全称是Java Server Pages,是一种动态网页技术,JSP其实 就是在 html中 插入java代码和JSP标签之后形成的文件,文件 名以.jsp结尾。其实 JSP就是一个Servlet.在servlet中编写html比较痛苦,而写JSP就像 在写 html,但它 相比 html而言,html只能为用户 提供静态数据即静态页面,而JSP技术 允许在页面中嵌套java代码,为用户 提供动态数据,
Servlet和JSP小结