一.jsp技术
1.1jsp的脚本和注释
jsp脚本:
1.)<%java 代码%> -----------------------------内部的java代码翻译到Servlet内部
2.)<%= java变量或表达式%>---------------会被翻译成servlet内部out.print();
3.) <%!java 代码%>--------------------------会被翻译成servlet成员内部
jsp注释:不同的注释可见范围是不同的
1.)Html注释:<!-- 注释内容 -->-----------可见范围jsp源码,翻译后的servlet,页面显示HTML源码。
2. java注释://单行注释 /* 多行注释*/ ---可见范围jsp源码,翻译后的servlet
3.)jsp注释:<%-- 注释内容--%>----------------可见范围jsp源码
1.2 jsp的运行原理
jsp在第一次被访问的时候就会被翻译成servlet,在执行
过程:
第一次被访问=====》index.jsp.=====》index.java====》编译运行
ps:编译后的index.java文件可以在tomcat的work目录中找到
1.3 jsp的指令(3个)
指令是指导jsp翻译和运行的命令,jsp包括三大指令:
1.)page 指令 ------ 属性最多的指令 (page指令默认)
根据不同的指令,指导整个页面特性
格式:<%@ page 属性名1="属性值1" 属性名2="属性值2" 属性名3="属性值3" .....%>
常用的属性如下:
language: jsp脚本中可以嵌入的语言
pageEncoding: 当前jsp文件本身的编码---- 内部可以包含contentType属性
contentType:response.setContentType("text/html;charset=utf-8");
session : 是否在jsp在翻译的时候自动创建session
import : 导入java包
errorPage : 当页面出错后跳转到那个页面
isErrorPage: 当前页面是个处理错误的页面
2.) include 指令
页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中
格式:<%@ include file="被包含的文件地址"%>
3.)taglib指令
在jsp中引入标签库(jstl标签库、struts2 标签库)
格式<%@ taglib uri=" 标签库地址" prefix="前缀"%>
1.4 jsp内置的九大隐式对象
jsp被翻译成Servelt后,servlet方法中有九个对象定义并初始化完毕,我们在jsp脚本中可以直接使用。
名称 |
类型 |
描述 |
out |
javax.servlet.jsp.JspWriter |
用于页面输出 |
request |
javax.servlet.http.HttpServletRequest |
得到用户请求信息, |
response |
javax.servlet.http.HttpServletResponse |
服务器向客户端的回应信息 |
config |
javax.servlet.ServletConfig |
服务器配置,可以取得初始化参数 |
session |
javax.servlet.http.HttpSession |
用来保存用户的信息 |
application |
javax.servlet.ServletContext |
所有用户的共享信息 |
page |
java.lang.Object |
指当前页面转换后的Servlet类的实例 |
pageContext |
javax.servlet.jsp.PageContext |
JSP的页面容器 |
exception |
java.lang.Throwable |
表示JSP页面所发生的异常,在错误页中才起作用 |
out对象
out类型:JspWriter
out的作用就是像客户端输出内容 --- out.write("输出内容");
out缓冲区默认是8kb可以设置为0 代表关闭out 缓冲区, 内容直接写到response缓冲区。
pageContext对象
jsp页面的上下文对象,作用如下:
page对象与pageContext对象不是一回事
pageContext是一个域对象
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)
pageContext可以向指定的其他域中存取数据
setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
findAttribute(String name)
---依次从pageContext域,request域,session域,application域中获 取属性,在某个域中获取后将不在向后寻找
pageContext 可以获取的其他八大隐式对象
pageContext.getRequest();
pageContext.getSession();
...................
四大作用域的总结:
page域:当前jsp页面范围
request域:一次请求
session域:一次会话
application域:整个web应用
1.5 jsp标签(也叫jsp动作)
1.5.1 页面包含(动态包含):<jsp:include page="被包含的页面"/>
静态与动态的区别:
假设index_1.jsp 包含了 index_2.jsp。
静态包含:只会翻译生成一个java 文件,直接将index_2.jsp包含的页面内容写进index_1.jsp的页面,在编译运行。
动态包含:会翻译成两个java 文件,先编译运行index_1.jsp翻译后的index_1_jsp.java文件,在运行时,加载index_2.jsp翻译后的index_2_jsp.java文件编译运行。
1.5.2 请求转发:<jsp:forward page="要转发的资源" />