JSP
全称为Java Server Page,本质是一个Servlet。解决Servlet向浏览器输出数据难得问题。
一、概述
- 不需要编译JSP页面
- 是文本文件
- 可以写HTML代码和java代码,容易排版
- 可以直接使用out、request、response、session等等对象,见源码:
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
......
}
二、原理
Servlet容器一般也是JSP容器。JSP页面运行时,tomcat服务器会将JSP文件翻译成一个Servlet程序,把产生的java和class文件放到Tomcat的/work目录,而且程序一开始就帮我们创建了一些内置对象(比如out)。所以,我们可以在上面编写java代码和直接使用一些对象。而对于html代码,Servlet程序其实是使用流对象(out对象)把html原样输出到浏览器。这些看源码就懂了。
三、语法
1. 注释
- java代码中使用java注释,html中使用html注释
- 也有专用的注释
<%--这是注释 --%>
2. 模板元素
所有的html元素就是模板元素
3.代码片段
1.1 作用
在JSP页面上编写java代码
1.2 格式
1.3注意
- 代码片段中的代码翻译时都是落入service方法中
- 一个JSP页面可以编写多个代码片段
4.脚本表达式
4.1 作用
向页面输出数据
4.2 格式
<%= new java.util.Date() %> //相当于out.write(new java.util.Date());
4.3 注意
脚本表达式不要以”;”结束
5.JSP声明
5.1 作用
用于定义成员变量和成员方法,因为代码片段的代码是在service方法中的,方法中不能声明成员,所以需要JSP声明。
5.2 格式
6.JSP处理指令
作用是告诉JSP引擎如何处理JSP页面的其余部分,基本格式为<%@ 指令 属性名=”值” %>
6.1 作用
通知服务器如何处理JSP页面
6.2 格式
6.3 taglib 标签处理指令
- 用于引入外部标签库文件
<%@taglib uri="http://java.sun.com/jsp.jstl/core" prefix="c" %>
- uri属性 指定标签文件位置
- prefix属性 指定前缀
- 使用
6.4 include 指令
- 用于包含其他页面信息,先合并再编译
<%@include file="x.jsp" %>
- 注意:两个页面声明的代码不可以重复(除了pageEncoding和导包),否则会出错
6.5 page 指令
Language=”java”
- 只能在JSP页面写Java代码
Import=”java.util.*”
- 导包
- 方式1:使用一个import语句,以”,”分割导包
- 方式2 : 使用多个import语句,另起一个page指令
PageEncoding=”UTF-8”
- 设置页面保存使用的编码
- 通知浏览器使用的编码
- tomcat翻译成Servlet的setContentType(“text/html;charset=utf-8”);
isELIgnored
- 是否忽略EL表达式,默认是false
Buffer
- 指定JspWriter缓存大小
- PrintWriter writer = response.getWrite();这种直接输出的方式效率较低
- JspWriter Out对象,带有缓存功能的输出流对象,只有当数据写够缓存区大小或者jsp页面加载完毕后才输出
errorPage=”error.jsp”
- 指定错误页面,当页面出错时请求转发到错误页面,同时发送一个Exception对象
- 错误页面要指定isErrorPage=”true”才能接受来自出错页面的Exception对象
- 在web.xml中配置全局错误页面
<error-page> <exception-type>错误类型</exception-type> <location>错误页面</location> </error-page> <error-page> <error-code>错误代号</ error-code > <location>错误页面</location> </error-page>
7.JSP内置对象
7.1 概念
指Tomcat自动创建的对象,在代码片段中可以直接使用
7.2 JSP四大域对象
ServletContext(application)>Session>Resquest>PageContext
7.3 JSP内置对象
内置对象 | 功能 |
---|---|
Request | 代表了用户的请求 |
Response | 代表了给用户的响应 |
Session | 会话对象 |
Exception | 异常对象 |
Application | ServletContext |
Config | ServletConfig |
Out | JspWriter,PrintWriter的子类,带缓存功能 |
Page | 当前jsp页面的对象,this |
pageContext | 代表了当前页面的运行环境,每个页面都有一个运行环境 |
7.4 pageContext
作为域对象使用,可以指定作用范围,不指定的话默认为当前域
- scopes属性值:
pageContext.REQUEST_SCOPE
,pageContext.SESSION_SCOPE
,pageContext.APPLICATION_SCOPE
pageContext.setAttribute(name,value[,scope]);
findAttribute(name);
可以从jsp中的四大域对象中查找指定的属性值- 如果四大域对象出现同名属性,那么该方法会从小范围到大范围去找。
- scopes属性值:
封装了其它八大内置对象,可以直接获取
PageContext.getRequest();
等等
<%page pageContext.setAttribute(name,value,scopes); %>
<%page pageContext.findAttribute(name); %>
<%page pageContext.getSession();%>
8.JSP映射
在web.xml中可以配置伪静态页面(为了让百度爬虫收录进去)
注意:配置映射时不可以省略”/”
<servlet>
<servlet-name>jsp</servlet-name>
<jsp-file>/xx.jsp<jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/xx.html</url-pattern>
</servlet-mapping>