Java--之JSP概念
JSP的宏观上的个人理解:
一. 首先,JSP本质上是Servlet:当jsp文件添加到Tocmat的Container里后,就会被JSP编译器解析成一种 jsp_Servlet类,
而JSP的内容将会在_jspService(xxx)这个函数中被解析和组装。
<%-- --%>是服务器端注释代码;
<!-- -->是客户端注释代码;
当我们在浏览器中审查源代码的是,<%-- --%>标记的内容是完全看不到的,而<!-- -->
标记的内容不但可以看到,里面的内容还会被解析。
二. 其次,JSP中可以插入Java片段:如果是片段是变量和方法的话,就会被解析成 jsp_Servlet 的成员变量和方法属性。
值得注意:由于JSP声明语法定义的变量和方法对应于Servlet类的成员变量和方法,所以JSP声明部分定义的变量和方法可以使用private,public等访问控制符修饰,也可使用static修饰,将其变成类属性和类方法。但不能使用abstract修饰声明部分的方法,因为抽象方法将导致JSP对应的Servlet变成抽象类,从而导致无法实例化。
<%! %>:其声明的变量和方法--------》Servlet中的成员变量和方法
<% %>: 其声明的变量和方法---------》Servlet中的局部变量和方法,当然该标签主要作用是包含一些Java逻辑块
三. 然后,JSP中的HTML标签:jsp中静态标签会被out.println()函数按着位置顺序输出,当然这个顺序也包含了一些Java片段
中。值得注意的是,JSP编译器只会对那些不是成员或函数声明且有输出标识“=”的Java片段
进行out.println()函数输出。
四. 然后,JSP或jsp_Servlet中:out.println()输出到客户端,即页面;system.out.println()输出到Console中。前者是HttpResponse(名称写的不准确)的实例,后者是系统IO输入出的实例;值得注意的是:
system.out.println()如果出现在JSP中,将会在页面上输出一个空格,但同时会在控制台中
输出内容。
五. 最后,JSP还有九大内置对象:它们是当前WEB容器中某些类的实例,主要用来获得WEB容器中的环境属性。但在
_jsp
page:page对象代表当前JSP页面,是当前JSP编译后的Servlet类的对象。相当于this。
config:标识Servlet配置,类型:ServletConfig,api跟Servlet中的ServletConfig对象是一样的,能获取该servlet的一些配置信
息,能够获取ServletContext
application:标识web应用上下文,类型:ServletContext,详情就看Servlet中的ServletContext的使用
request:请求对象, 类型:httpServletRequest
response:响应对象 类型:httpServletResponse
session:表示一次会话,在服务器端记录用户状信息的技术
out:输出响应体 类型:JspWriter
exception 表示发生异常对象,类型 Throwable,在上面我们介绍page指令中的一个errorPage属性时就有说到他
pageContext:表示 jsp页面上下文(jsp管理者) 类型:PageContext
标记了红色的对象就是JSP独有的,其他的都是Servlet中的老东西。
在这个由jsp转换为servlet的文件中,只能看到8个内置对象,少了exception对象,因为我们在将page指令时,说过一个isErrorPage属性,默认是false,被关闭了,所以其中并没有exception对象。