JSP 使用

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 ... %> 引入标签库的定义,可以是自定义标签


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 
原文地址:https://www.cnblogs.com/z-sm/p/4613579.html