1.什么是JSP?
JSP的全名是 java server page 即Java服务器端的页面,是一种能够动态生成网页数据的技术。它特点是html和java程序并存,在jsp页面第一次被访问时,服务器会将jsp文件转译成Servlet。
2.JSP的实现原理
jsp本质上还是Servlet。在第一被访问时,会被服务器转译成Servlet。以Tomcat为例,在Tomcat的配置文件web.xml中有以下这么一段代码
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping>
当访问以".jsp"或".jspx"为后缀的页面时,Tomcat就会去调用一个Servlet (org.apache.jasper.servlet.JspServlet),这个Servlet被称为JSP引擎,用来将jsp中的内容转译成Servlet。转译后的Servlet类文件被存放在work文件夹中。
3.为什么要使用JSP
Servlet在需要动态改变页面内容时较为麻烦,需要将html代码通过ServletResponse对象字符串拼接的方式输出给浏览器,代码编写困难。而JSP可以将html和java代码整合起来,服务器会帮我们转成Servlet,代码编写简单。但相对的JSP在java逻辑处理方面比较麻烦,而Servlet正好可以弥补这一缺点,所一般采用 jsp+servlet+javabean。
4.jsp页面组成(A)
jsp 页面包括以下内容:
1.静态内容(html代码)
2.注释
<!-- html注释 -->数据不显示在页面中,jsp引擎还是会编译
<%-- jsp注释 --%> jsp引擎还是会编译
3.脚本(java代码,位于方法中)
<% java代码 %>
转译后代码位于_jspService()方法中(不能定义方法、变量为局部变量)
4.声明(也是java代码,位于类中)
<%! java代码 %>
转译后代码位于serlvet的类中(可以定义方法。变量为全局变量)
5.表达式(在页面中输出)
<%= 变量或方法 %>
输出变量的值或调用方法并输出返回值
6.指令
<%@ 指令名 属性=值 %>
page指令
pageEncoding 设置页面编码类型
contentType 设置内容的类型及编码
import 导入某个包/类
session 表示是否在访问页面时,创建session对象,默认值为true
isELIgnored 表示是否忽略EL的解析
isErrorPage 表示该页面是处理异常的页面。
include指令
file 引入一个jsp页面在当前页面中,相当于将两个jsp页面整合成一个Servlet,两个页面中不允许出现重复的变量名
taglib指令 导入标签库
uri 标签库位置
prefix 标签库前缀
5.动作语法
jsp:forward 请求转发,使用该标签时注意标签里不能有任意字符,除非需要传参,可以使用<jsp:param>标签传参
jsp:include 动态导入,导入一个服务器内部jsp页面
6.静态导入和动态导入
静态导入:
<%@ include file="logo.jsp" %>
– 是在servlet引擎转译时,就把此文件内容包含了进去(两个文件的源代码整合到一起,全部放到_jspService方法中),所以只生成了一个servlet,所以两个页面不能有同名的变量。
– 运行效率高一点点。耦合性较高,不够灵活。
动态导入:
<jsp:include page=“logo.jsp”></jsp:include>
– 是在servlet引擎转译后,请求的此页面,所以共生成了两个servlet,所以可以有同名变量。
– 生成两个servlet,相当于两个类之间的调用,耦合性较低,比较灵活。
7.九大内置对象
jsp九大内置对象:4+2+3
四大作用域:
pageContext --> javax.servlet.jsp.PageContext
代表当前页面,作用域:一个页面
request --> HttpServletRequest
来自客户端的请求,作用域:一次请求中所有Servlet
session --> HttpSession
代表一次会话,作用域:一次会话中所有Servlet
application --> ServletContext
代表当前web站点,作用域:当前项目中所有Servlet
两个输出
out --> javax.servlet.jsp.JspWriter
可以直接向客户端写一个由程序动态生成HTML文件
response --> HttpServletResponse
对客户端的响应
三个打酱油的
page --> Object
配置信息,很少使用
config --> ServletConfig
当前页面对象,基本不用
exception --> Throwable
异常对象,根本不用