一、JSP基础
①简介
JSP全称Java Server Pages,Java服务器页面,是一种动态网页开发技术,由sun公司定义,现在属于Oracle公司。
JSP是基于html模板,可以在html模板中嵌入Java代码和JSP中的标签。JSP=html+Java代码+一系列JSP标签(主要用作数据的展示)。
JSP本质是Servlet,但是因为Servlet输出页面很繁琐,Servlet生成的页面没有预览工具,必须输出之后看效果,所以开发定义了JSP。
JSP是动态资源。
Servlet:运行在服务器上的java程序,适合编写Java代码,写网页很困难。
JSP:适合编写动态内容,不适合写java代码,主要用于显示页面。
JSP经过编译之后,会有一个.java和.class的文件。
JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
②JSP作用
jsp性能好,可以在html页面中动态嵌入元素
服务器调用的是已经编译好的JSP文件
JSP基于Java Servlet Api,有很多强大企业的支持。
JSP可以与处理业务逻辑的Servlet一起使用,该模式被Java Servlet模版引擎所支持。
JSP专门负责页面展示数据,一般不要在JSP中嵌套Java代码!<% %>
后期用EL和JSTL表达式进行改进。
③JSP页面组成
二、JSP语法
JSP页面中可以包含任意量的Java语句、变量、方法或表达式
①JSP嵌入Java代码
ⅠJava脚本
<% java代码 %> 在这个标签中编写的java代码 局部的JAVA代码 JSP翻译之后代码是在 service方法中
ⅡJava声明
<%! java代码 %> 这个标签可以用来声明变量、方法、类变量、成员变量、成员方法类、成员内部类
ⅢJava表达式
<%= java代码 %> 在这个标签中写的java代码将会出现在out()中,向页面输出该标签中的代码一定不要加分号,就是指经过编译后是这样的:
②JSP的注释
html的注释:页面不显示,但是在页面查看源码可见
JSP的注释:<%-- JSP注释--%> 页面不显示,查看源码也不可见
JSP脚本注释://单行注释,/**/多行注释
③JSP指令
作用:告诉JSP引擎如何运行JSP文件中的内容
语法:<%@ 指令名称 属性名称1=“属性值1” 属性名称2=“属性值2” ......%>
Ⅰpage指令
通过设置内部的多个属性定义整个页面的属性
page指令属性:
language:JSP中可以嵌入的语言,目前只有Java
import:用来导包
pageEncoding:设置当前jsp页面的编码方式
contentType :设置浏览器查看这个页面时使用编码方式。等同于response.setContentType(“text/html”;charset=utf-8);服务器发送客户端的内容编码
pageEncoding: Jsp文件本身的编码
session:默认是true 当前jsp中能否使用session (如果为true,则在这个jsp中就已经可以使用session对象)
isELIgnored:当前页面能否使用EL表达式 默认值false
buffer:缓存区大小。JSP中有java.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小。默认8kb.
autoFlush:是否自动刷新缓冲区 默认true
errorPage:指定错误页面
isErrorPage:设置为错误页面 (设置为错误页面,就有处理异常的功能),可以在JSP获取exception异常对象
不过值得注意的是,有关错误页面属性一般不用,错误处理一般是在web.xml中统一进行配置:
404
/nofound.jsp
500
/error.jsp
Ⅱinclue指令(面试中经常使用到)
静态包含:把其它资源包含到当前页面中 <%@ include file="header.jsp" %>
动态包含:
两者的区别:
翻译的时间段不同(可在tomcat工作目录下查看)
静态包含:在翻译时就把两个JSP文件进行合并一个JSP文件,就是把JSP内容直接合并
动态包含:翻译的时候翻译成2个JSP文件,暂时先不会合并JSP文件,当代码执行到include时,才包含另一个JSP的文件的内容包含进来!
Ⅲtaglib指令
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c" %>
如果内置的标签不够用,那么程序员可以自己开发标签!
④JSP动作元素
使用标签的形式表示一段Java代码
Ⅰ
Ⅱ
Ⅲ
获取使用 request.getParameter(“name”)
Ⅳ
id 起个名字
class javabean的全名
scope 存放的作用域
相当于:
User u = new User();
pageContext.setAttribute("u",u);
Ⅴ
${u.userName }
${u.age }
⑤JSP内置对象
out对象:JspWriter类型,负责页面数据输出
response对象:HttpServletResponse类型,负责响应浏览器的请求
request对象:HttpServletRequest类型,负责接收浏览器发送过来的请求参数,例如表单的信息.......
session对象:HttpSession类型,负责封装用户请求会话的相关信息,例如用户的登录状态...
application对象:ServletContext类型,负责封装WEB应用相关应用
pageContext对象:PageContext类型,封装网页属性相关信息
page对象: Object类型,封装当前JSP页面信息
config对象: ServletConfig类型,封装了JSP的配置
exection对象: thowable类型,封装JSP的异常信息
Ⅰout对象
是JspWriter类型 字符流
out和 response.getWriter() 不是同一个流
out流 和 response.getWriter() 都是字符流 都有缓冲区
out流的执行是 先把 缓冲区中的内容 输出到 response.getWriter()的缓冲区中,再由response.getWriter() 这个流统一输出。
ⅡpageContext对象
pageContext(父类是JspContext):JSP的上下文对象 可以用来获得其他八个内置对象
这些对象可以直接在JSP中获得,那么pageContext提供这些方法有什么用?
一般用于框架的编写,自定义标签的编写等。
pageContext也是一个作用域 范围就是当前页面
setAttribute("",Object);
getAttribute("")
removeAttribute
可以操作其他三个域对象(request,session,application)的数据
Ⅲrequest对象
jspService方法的参数 HttpServletRequest类型。用法与Servlet中的request用法相同
Ⅳresponse对象
jspService方法的参数 HttpServletResponse类型。用法与Servlet中的response用法相同
Ⅴsession对象
HttpSession类型
Ⅵapplication对象
ServletContext类型,用法和Servlet中的ServletContext用法相同
Ⅶconfig对象
ServletConfig类型,用法和Servlet中的ServletConfig用法相同
Ⅷpage对象
Object类型,Object page = this;
Ⅸexception对象
Throwable类型,只有当jsp的isErrorPage="true"时,才会出现该对象
⑥JSP运行原理
⑦JSP和Servlet的关系