一、JSP技术
1、JSP的脚本
(1)< % java代码 %>:内部的java代码会被翻译到service方法内部
(2)<%= java变量或表达式 >:会被翻译成service方法内部的out.print()
(3)<%! java代码%>:会被翻译成servlet的成员内容
2、JSP中的注释(可见范围不同)
(1)html注释:<!-- -->
——可见范围:jsp源码、翻译后的servlet(在work工作区间内)、页面显示的html源码
(2)java注释:单行注释// 多行注释/* */
——可见范围:jsp源码、翻译后的servlet
(3)jsp注释:<%-- -->
——可见范围:jsp源码
3、JSP运行原理
jsp**第一次**被访问时会被翻译成servlet再执行。
过程:第一次访问——helloServlet.jsp——helloServlet_jsp.java——编译运行。(第一次访问会去work目录下查找是否有相应的_jsp.java文件,如果有则访问它,没有的话就将jsp翻译成servlet即_jsp.java文件再执行它)
4、JSP指令
(1)page指令(实际开发中page指令默认即可)
属性最多的一个指令,根据不同的属性来指导页面翻译。
格式:< %@ page 属性名1=”属性值1” 属性名2=”属性值2” 属性名3=”属性值3”%>
常用属性如下:
language:jsp脚本中可以嵌入的语言种类。//没卵用
contentType——等同于response.setContentType(“text/html;charset=UTF-8”)的作用。在翻译时会直接翻译成这段代码。
pageEncoding:当前jsp文件本身的编码格式。(此属性内部包含contentType)。
session:默认true。(设置jsp翻译时是否会自动创建session)
import:设置jsp翻译时导入的包。
errorPage:设置jsp中java代码出错后的跳转页面
isErrorPage:当前页面是不是一个处理错误的页面,true of false
(2)include指令
页面包含(静态包含)指令,可以将一个jsp包含到另一个Jsp内
格式:<%@ include file=”被包含的文件地址”%>
(3)taglib指令
在jsp中引入标签库(jstl标签库、struts2标签库)
格式:<%@ taglib uri=”” prefix=”前缀” %>
5、JSP内置/隐式对象(9个)#重要
jsp被翻译成servlet之后,service方法中会定义并初始化一些对象。
out对象:向客户端输出内容。类型是jspWriter。有write()方法:out.write();
out缓冲区默认8kb。设置为0kb表示关闭Out缓冲区,内容直接写进response缓冲区。(tomcat访问response数据时先访问response缓冲区,然后才将out缓冲区的内容加在response缓冲区的后面)
pageContext对象:
jsp页面的上下文对象。
(1)pageContext是一个域对象(存数据的区域)作用范围是当前页面。
setAttribute、getAttribute、removeAttribute。
重载的setAttribute(String name , Object obj , int scope)——可以向其他域存取数据。
findAttribute(String name)从所有的域中寻找对应name的属性。
(2)内部维护着其他八大隐式对象的索引。写框架的时候会用到。
四大域:
page域(pageContext):当前jsp页面范围
request域:一次请求
session域:一次会话
application域(ServletContext):整个web应用
5、JSP标签(动作)
(1)页面包含(动态包含):< jsp:include page=”被包含的页面”/>
区别静态包含:把要包含的页面中的内容copy到发出包含命令的页面中才会进行翻译;动态包含:先将两个各自翻译成servlet后再分别显示在页面中。
(2)请求转发:< jsp:forward page=”要转发的资源”/>
地址没变,相当于request.getDepa