1.什么是JSP
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实际上就是Servlet
JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据
1.jsp原理
2.jsp的作用
不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术有各自的特点,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示交给jsp来做, 在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。
3.JSP语法
1.JSP模板元素 JSP页面中的HTML内容称之为JSP模版元素。 JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。
2.JSP脚本表达式 JSP脚本表达式(expression)用于将程序数据输出到客户端
语法:<%= 变量或表达式 %>
举例:当前时间:<%= new java.util.Date() %>(JSP脚本表达式中的变量或表达式后面不能有分号)
3.jsp脚本片段 JSP脚本片段,用于在JSP页面中编写多行Java代码。
语法:
<% 多行java代码 %>
JSP脚本片段中只能出现java代码,不能出现其它模板元素
JSP脚本片段中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。
4.JSP声明
JSP页面中编写的所有代码,默认会翻译到servlet的service方法中,而Jsp声明中的java代码被翻译到_jspService方法的外面
语法:
<% java代码 %>
5.JSP注释
JSP注释的格式:
<%-- 注释信息 --%>
JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容.
6.JSP指令
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。在JSP 2.0规范中共定义了三个指令:
page指令
include指令
taglib指令
语法:<%@ 指令 属性名="值" %>
举例:<%@ page contentType="text/html;charset=utf-8"%>
如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。
<%@ page contentType="text/html;
charset=utf-8" import="java.util.Date"%>
也可以这样写
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.util.Date"%>
7.九大内置对象四大作用域
每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。
由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。
JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用
1九大内置对象
out对象:用于向客户端、浏览器输出数据-JspWriter request对象:封装了来自客户端、浏览器的各种信息-- HttpServletRequest response对象:封装了服务器的响应信息 -- HttpServletResponse exception对象:封装了jsp程序执行过程中发生的异常和错误信息-exception(只有在page指令中具有属性isErrorPage="true"时才有效) config对象:封装了应用程序的配置信息-config -- ServletConfig page对象:指向了当前jsp程序本身- 当前类 session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数- HttpSession application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息-application -- ServletContext pageContext对象:提供了对jsp页面所有对象以及命名空间的访问-PageContext
2.四大作用域
page范围:只在一个页面保留数据(javax.servlet.jsp.PageContext(抽象类))
request范围:只在一个请求中保存数据(javax.servlet.httpServletRequest)
Session范围:在一次会话中保存数据,仅供单个用户使用(javax.servlet.http.HttpSession)
Application范围:在整个服务器中保存数据,全部用户共享(javax.servlet.ServletContext)
1.pageContext对象和作用域
pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象,可以用来保存数据
getException方法返回exception隐式对象
getPage方法返回page隐式对象
getRequest方法返回request隐式对象
getResponse方法返回response隐式对象
getServletConfig方法返回config隐式对象
getServletContext方法返回application隐式对象
getSession方法返回session隐式对象
getOut方法返回out隐式对象
pageContext封装其它8大内置对象的意义
2.pageContext作用域对象
1.pageContext对象的方法
public void setAttribute(java.lang.String name,java.lang.Object value)
public java.lang.Object getAttribute(java.lang.String name)
public void removeAttribute(java.lang.String name)
2.访问其它域的方法
public java.lang.Object getAttribute(java.lang.String name,int scope)
public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
public void removeAttribute(java.lang.String name,int scope)
3.代表各个域的常量
PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE
8.jsp中include 的两种用法
1、两种用法
静态include: <%@ inlcude file =”header.jsp” %>
此时引入的是静态的jsp文件,它将引入的jsp中的源代码原封不动地附加到当前文件中,所以在jsp程序中使用这个指令的时候file里面的值(即要导入的文件)不能带多余的标签或是与当前jsp文件重复的东西。例如里面不要包含这样的标签,因为是把源代码原封不动的附加过来,所以会与当前的jsp中的这样的标签重复导致出错。
动态include:
此时引入执行页面或生成的应答文本.jsp:include标签导入一个重用文件的时候,这个文件是经过编译的,通俗点说就是附加这个要导入文件经过编译后的效果,所以可以含有与当前jsp程序中重复的内容,因为在附加过来之前就会被解析掉。其中flush 表示在读入包含内容之前是否清空任何现有的缓冲区。
2、include页面携带入参
解释<jsp:include page=”header.jsp” flush=”true”> <jsp: param name=”shuui”value=”2”/> <jsp:include> <jsp:param name = "" value="">是将值传给被包含页面(即header.jsp),可通过<%=request.getParameter("shuui")%>获取 12345
3、两种用法的区别
区别 | include | jsp:include |
---|---|---|
执行时间 | 翻译阶段 | 在请求处理阶段执行 |
引入的内容 | 引入静态文本,先包含后编译 | 引入执行页面或servlet所生成的应答文本. 被包含的文件先编译,后包含进来,然后显示 |
翻译阶段: jsp页面不能原封不动地被传送给浏览器,全部的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转达化成servlet,然后执行这个servlet来结束的。服务器需要一个jsp容器来处理jsp页面。jsp容器平常以servlet的形式来实现,这个servlet经过配置,可以处理对jsp页面的全部请求。
Jsp容器同时将jsp页面转化成servlet(称为jsp页面实现类—JSP Page implementation class),并编译这个servlet。这两步就组成了翻译阶段。
请求处理阶段: Jsp容器除了上面提到的同时将jsp页面转化成servlet外,还同时调用jsp页面实现类以处理每个请求并产生应答,这个阶段我们就称为请求处理阶段,请求处理阶段仅执行类文档。