1、 JSP工作原理
JSP是一种servlet,但工作方式不一样。HttpServlet是先由源代码编译为class文件后部署到服务器下的,先编译后部署。而JSP则是先部署源代码后编译为class文件的,现部署后编译。
JSP在客户端第一次请求的时候JSP文件会被编译为HttpJspPage类(接口Servlet的一个子类)。该类会被服务器临时存放在服务器工作目录里面。(tomcat\work\Catalina\localhost\jsp\org\apache\jsp)。
2、 JSP生命周期
与servlet的生命周期一样,但还有自己的初始化方法_jspInit()和销毁方法jspDestory()
3、 JSP语法
jsp脚本:<% %>
jsp输出:<%= %>
jsp注释:// /* */ <%-- --%>
条件语句与java一样,if else,while,for,return,break
4、 JSP指令
page指令
http://www.cnblogs.com/elleniou/archive/2012/09/09/2678101.html
<% page trimDeiectiveWhitespaces=”true|false”%>取消输出指令的前后的空白字符
include指令
<%@ include file=”relativeRUL”%>,先包含后编译
另一种包含文件的行为
<jsp:include page=”relativeURI”/>,先运行后包含
taglib指令
指明JSP页面内使用的JSP标签库,有两个属性,uri为类库地址,prefix为标签前缀。
<%@ taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core" %>
5、 JSP行为
标准的JSP行为格式<jsp:elements {attribute=”value”}*/>
<jsp:include/>行为
<jsp:include flush=”true” page=”relativeURI”></jsp:include>
使用request.getRequestDispatcher(“relativeURI”).forwaard(request,response)来执行被包含的文件。
使用Java Bean(POJO)
useBean在JSP页面中定义一个JavaBean
<jsp:useBean id=”beanId” class=”className”scope=”Value”/>
<jsp:getProperty name=”beanName”property=”protertyName”/>
<jsp:setProperty name=”beanName”property=”propertyName” value=””/>
<jsp:forward/>行为
对应servlet中的request.getRequestDispatcher(“relativeURI”).forwaard(request,response),对其方法的一种封装
<jsp:forward page=”/somePage.jsp”>
<jsp:paramname=”param1” value=”value1”/>
<jsp:paramname=”param2” value=”value2”/>
</jsp:forward>
<jsp:directive/>行为
相当于jsp指令
<jsp:directive.page/>==<%@page%>
<jsp:directive.include/>==<%@include%>
<jsp:directive.taglib/>==<%@taglib%>
6、 JSP隐藏对象
out输出流对象
request请求对象
response响应对象
config配置对象:配置在web.xml中初始化JSP的参数
session会话对象
application应用程序对象
page页面对象,代表当前JSP页面,是当前JSP编译后的Servlet类的对象。相当于普通Java类的this
pageContext页面上下文对象,代表当前JSP页面编译后的内容,通过pageContext能够获取到JSP中的资源。
exception异常对象
要使用exception隐藏对象,需要设置<%@page isErrorPage=”true” %>,经常失败,不推荐使用。
7、 JSP配置
<servlet>
<servlet-name>demo</servlet-name>
<jsp-file>/WEB-INF/hello.jsp</jsp-file> //WEB-INF前必须有/ ,表示从根目录开始
<init-param>
<param-name>message</param-name >
<param-value>messagevalue</ param- value >
</init-param >
<init-param>
<param-name>encoding</param-name >
<param-value>utf-8</param- value >
</init-param >
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/hello.lxh</url-pattern> //此文件名可任意起,后缀名也可任意
</servlet-mapping>
<jsp-config>标签,在web.xml中支持对jsp的批量配置。
来自:http://janwer.iteye.com/blog/150217/
<jsp-config> 包括 <taglib> 和 <jsp-property-group> 两个子元素。其中<taglib> 元素在JSP 1.2 时就已经存在;而<jsp-property-group> 是JSP 2.0 新增的元素。<jsp-property-group> 元素主要有八个子元素,它们分别为:
1.<description>:设定的说明
2.<display-name>:设定名称
3.<url-pattern>:设定值所影响的范围,如: /CH2 或 /*.jsp
4.<el-ignored>:若为 true,表示不支持 EL 语法
5.<scripting-invalid>:若为 true,表示不支持 <% scripting %>语法
6.<page-encoding>:设定 JSP 网页的编码
7.<include-prelude>:设置 JSP 网页的抬头,扩展名为 .jspf
8.<include-coda>:设置 JSP 网页的结尾,扩展名为 .jspf
一个简单的<jsp-config> 元素完整配置:
Xml代码
1.<jsp-config>
2. <taglib>
3. <taglib-uri>Taglib</taglib-uri>
4. <taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location>
5. </taglib>
6. <jsp-property-group>
7. <description>Special property group for JSP Configuration JSP example.</description>
8. <display-name>JSPConfiguration</display-name>
9. <url-pattern>/jsp/* </url-pattern>
10. <el-ignored>true</el-ignored>
11. <page-encoding>GB2312</page-encoding>
12. <scripting-invalid>true</scripting-invalid>
13. <include-prelude>/include/prelude.jspf</include-prelude>
14. <include-coda>/include/coda.jspf</include-coda>
15. </jsp-property-group>
16.</jsp-config>
对于Web 应用程式来说,Scriptlet 是个不乐意被见到的东西,因为它会使得HTML 与Java 程式码交相混杂,对于程式的维护来说相当的麻烦,必要的时候,您可以在web.xml 中加上<script-invalid> 标签,设定所有的JSP 网页都不可以使用Scriptlet ,例如:
Xml代码
1.<web-app ..>
2. ....
3. <jsp-config>
4. <jsp-property-group>
5. <url-pattern>*.jsp</url-pattern>
6. <script-invalid>true</script-invalid>
7. </jsp-property-group>
8. </jsp-config>
9.....
10.</web-app>
8、 EL表达式
${},用来方便的读取对象,是写在html代码中的,不能写在jsp的脚本中<%%>
EL表达式能方便的操作JavaBean,甚至集合等,并支持简单的运算,但是不能直接访问普通的方法,以及静态属性。
类别 隐含对象 描述
JSP pageContext 当前jsp页javax.servlet.jsp.PageContext对象
作用域 pageScope 页面范围内所有对象的集合
requestScope 所有请求范围内的对象集合
sessionScope 所有会话范围内的对象集合
applicationScope 应用程序范围内的对象变量组成的集合
请求参数 param 所有请求参数字符串组成的集合
paramValues 所有作为字符串集合的请求参数
请求头 header http请求头部,字符串
headerValues http请求头部,字符串集合
cookie cookie 所有cookie组成的集合
初始化参数 initParam 全部引用程序参数名组成的集合