1 JSP技术
1.1 概念
Java Server Pages: java 服务器端⻚⾯
● 可以理解为:⼀个特殊的⻚⾯,其中既可以指定定义 html 标签,⼜可以定义 java 代码
● ⽤于简化书写!!!
原理:JSP本质上就是⼀个Servlet
● JSP在第⼀次被访问时会被Web容器翻译成servlet,再执⾏,过程:
第⼀次访问 → helloServlet.jsp → helloServlet_jsp.java → 编译运⾏
PS:被翻译后的servlet在 Tomcat 的 work ⽬录中可以找到。
1.2 JSP脚本和注释
脚本:
- <%java代码%>
- <%=表达式%>
- <%!类的成员 %>
注释:
- //java注释(java脚本中) jsp中可见, java中可见
- < !–html注释–> jsp中可见, java中可见, html可见
- <%-- jsp注释 --%> jsp中可见
1.3 JSP指令
JSP的指令是指导JSP翻译和运⾏的命令,⽤于配置JSP⻚⾯,导⼊资源⽂件
格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 … %>
分类:
- page:配置JSP⻚⾯,根据不同的属性,指导整个⻚⾯特性。
○ contentType:等同于response.setContentType()
1.设置响应体的mime类型以及字符集
2.设置当前jsp⻚⾯的编码(只能是⾼级的IDE才能⽣效,如果使⽤低级⼯具,则需要
设置pageEncoding属性设置当前⻚⾯的字符集)
○ pageEncoding:当前JSP⽂件的本身编码,内部可以包含contentType
○ import:导⼊java的包
○ session:是否JSP在翻译时⾃动创建session
○ errorPage:当前⻚⾯发⽣异常后,会⾃动跳转到指定的错误⻚⾯
○ isErrorPage:标识当前也是是否是错误⻚⾯。
● true:是,可以使⽤内置对象exception
false:否。默认值。不可以使⽤内置对象exception - include: ⻚⾯包含的。导⼊⻚⾯的资源⽂件
⻚⾯包含(静态包含)指令,可以将⼀个JSP⻚⾯包含到另⼀个JSP⻚⾯中
格式:<%@ include file=“被包含的⽂件地址”%> - taglib:导⼊资源
在JSP⻚⾯中引⼊标签库【JSTL标签库、struts2标签库】
格式:<%@ taglib uri=“标签库地址” prefix=“前缀”%>
☆1.4 JSP的内置对象
在jsp⻚⾯中不需要获取和创建,可以直接使⽤的对象。
JSP⼀共有9个内置对象:
-
out对象
out的类型:JspWriter
out作⽤就是向客户端输出内容,⽅法:out.write()
out缓冲区默认8kb【buffer=“8kb”】,可以设置成0,代表关闭out缓冲区,内容将直接写
到respons缓冲区
-
pageContext对象
JSP⻚⾯的上下⽂对象,作⽤如下:
1.pageContext是⼀个域对象,范围:当前⻚⾯
2.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域中获取属性,在
某个域中获取后将不在向后寻找。
四⼤作⽤域的总结:
page域:当前JSP⻚⾯范围
request域:⼀次请求
session域:⼀次会话
application域:整个web应⽤ -
可以获得其他8⼤隐式对象
例如:pageContext.getRequest(),pageContext.getSession()等。
1.5 JSP标签(动作)
- ⻚⾯包含(动态包含):<jsp:include page=“被包含的⻚⾯”/>
- 请求转发:<jsp:forward page=“要转发的资源” />
思考:静态包含与动态包含的区别?
静态包含在翻译的时候,将多个JSP合并翻译成了一个Servlert。
动态包含在翻译的时候,每个JSP文件都翻译成了对应Servlet,在程 序运行加载到JVM中的时候动态合并 动态包含可以传递参数
2 EL 技术
EL: Expression Language - 简化java代码, get方法
语法 ${表达式}
el表达式中有11个隐式对象
● pageScope、requestScope、sessionScope、applicationScope
获取JSP中域中的数据
● param、paramValues
接收参数
等同于:request.getParameter()、request.getParameterValues()
● header、headerValues
获取请求头信息
等同于:request.getHeader(name)
● initParam
获取全局初始化参数
等同于:this.getServletContext().getInitParameter(name)
● cookie
WEB开发中cookie
等同于:request.getCookies()、cookie.getName()、cookie.getValue()
● pageContext
可以获得其他⼋⼤对象
重点:${pageContext.request.contextPath}:动态获取虚拟⽬录