JSP教程: http://www.w3cschool.cc/jsp/jsp-tutorial.html
jsp语法:
任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用。
- <%= %>表达式。不能用分号结束之
JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(…) 将数据输给客户端;不能用分号结束之
- <% %>脚本:多行Java代码,定义变量、编写语句等但不能定义方法。
JSP引擎在翻译JSP页面中,会将JSP脚本片断中的Java代码将被原封不动地放到Servlet的_jspService方法中。
- <%! %>声明:变量、方法等。
JSP页面中编写的所有代码默认会翻译到servlet的_jspService方法中, 而Jsp声明中的java代码被翻译到_jspService方法外;JSP隐式对象的作用范围仅为Servlet的_jspService方法,故在JSP声明中不能使用这些隐式对象。
- <%-- --%>注释
- <%@ %>指令:设置与整个jsp页面相关的属性(详见参考文献:http://www.cnblogs.com/xdp-gacl/p/3778993.html)。三个:
- <%@ page ... %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等。
无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了可读性常放在页首。
- <%@ include ... %> 包含其他文件。
用于引入其它JSP页面(即使扩展名不是.jsp也按jsp处理),如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
JSP规范建议使用.jspf(JSP fragments(片段))作为静态引入文件的扩展名。 - <%@ taglib ... %> 引入标签库的定义,可以是自定义标签
- <%@ page ... %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等。
jsp行为:
详见:http://www.cnblogs.com/xdp-gacl/p/3788369.html
<jsp:action_name attribute="value" />
jsp:include 用于在当前页面中包含静态或动态资源
jsp:useBean 寻找和初始化一个JavaBean组件,对应的JavaBean必须有一个无参数的构造器。详见:http://www.cnblogs.com/xdp-gacl/p/3871730.html
jsp:setProperty 设置 JavaBean组件的值
jsp:getProperty 将 JavaBean组件的值插入到 output中
jsp:forward 服务端页面跳转,携带request和response对象,跳转时浏览器URL不变
jsp:param 当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数。
jsp:plugin 用于在生成的HTML页面中包含Applet和JavaBean对象
jsp:element 动态创建一个XML元素
jsp:attribute 定义动态创建的XML元素的属性
jsp:body 定义动态创建的XML元素的主体
jsp:text 用于封装模板数据
jsp隐含对象:9个
详见:http://www.cnblogs.com/xdp-gacl/p/3779872.html
- request HttpServletRequest类的实例
- response HttpServletResponse类的实例
- out PrintWriter类的实例,用于把结果输出至网页上
- session HttpSession类的实例
- application ServletContext类的实例,与应用上下文有关
- config ServletConfig类的实例
- pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问。
JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象(容器),可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
getException方法返回exception隐式对象 getPage方法返回page隐式对象 getRequest方法返回request隐式对象 getResponse方法返回response隐式对象 getServletConfig方法返回config隐式对象 getServletContext方法返回application隐式对象 getSession方法返回session隐式对象 getOut方法返回out隐式对象
pageContext对象在jsp自定义标签开发中特别重要。pageContext对象可以作为容器来使用,因此可以将一些数据存储在pageContext对象中。
pageContext对象的常用方法:
1 public void setAttribute(java.lang.String name,java.lang.Object value) 2 public java.lang.Object getAttribute(java.lang.String name) 3 public void removeAttribute(java.lang.String name) 4 public java.lang.Object findAttribute(java.lang.String name)
重点介绍一下findAttribute方法,这个方法是用来查找各个域中的属性的,查看这个方法的API可以看到关于这个方法的描述:
Searches for the named attribute in page, request, session (if valid), and application scope(s) in order and returns the value associated or null.当要查找某个属性时,findAttribute方法按照查找顺序"page→request→session→application"在这四个对象中去查找,只要找到了就返回属性值,如果四个对象都没有找到要查找的属性,则返回一个null。
- page 类似于Java类中的this关键字。表示当前的一个JSP页面,可理解为一个对象本身,即:把一个JSP当作一个对象来看待。page对象在开发中几乎不用。
- Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象。
一般情况下exception对象在Jsp页面中获取不到,设置page指令的isErrorPage属性为"true"来显式声明Jsp页面是一个错误处理页面后,Jsp引擎在将jsp页面翻译成Servlet时在Servlet的 _jspService方法中会声明一个exception对象,
然后将运行jsp出错的异常信息存储到exception对象中,这样在Jsp页面中就能使用exception对象。
jsp迭代:http://www.runoob.com/jsp/jstl-core-foreach-tag.html
虽然jsp页面里能嵌入java代码,这点很强大,但对于在jsp页面获取后台传来的数据这种场合,java也无能为力,此时可以借助jsp标准标签库(JSTL)。在jsp页面中可以通过${parakey}获取控制器传向页面的值,但要如果返回的个list,如何迭代取出?可以通过<c:forEach>标签
1、jsp c:forEach标签的属性。(<c:forEach items="${stuList}" begin="1" end="20" step="2" var ="student" varStatus="status">标签体内的内容</c:forEach>)
items:要被循环的对象;
var:代表当前循环到的元素;
begin:指定开始循环元素的下标(从0开始);
end:指定循环的最后一个元素的下标;
step:每次循环的步长;
varStatus:由 varStatus
属性命名的变量并不存储当前索引值或当前元素,而是赋予javax.servlet.jsp.jstl.core.LoopTagStatus
类的实例。该类定义了一组特性,它们描述了迭代的当前状态,下面列出了这些特性:
特性 | Getter | 描述 | 使用 |
current | getCurrent() |
当前这次迭代的(集合中的)项,与上述student变量功能一样 | status.current |
index | getIndex() |
当前这次迭代从 0 开始的迭代索引 | status.index |
count | getCount() |
当前这次迭代从 1 开始的迭代计数 | status.count |
first | isFirst() |
用来表明当前这轮迭代是否为第一次迭代的标志,返回true或false | status.first |
last | isLast() |
用来表明当前这轮迭代是否为最后一次迭代的标志,返回true或false | status.last |
begin | getBegin() |
begin 属性值 |
status.begin |
end | getEnd() |
end 属性值 |
status.end |
step | getStep() |
step 属性值 |
status.step |