• 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 
  • 相关阅读:
    EXCEL中用VLOOKUP功能,根据A列的值,把B列也填充上对应的值
    ReNamer批量重命名文件,如何给杂乱无章的文件名重新命名
    小米手机亲情守护(风筝守护)怎么解绑?
    PHP正则表达式遇到的一个utf8乱码坑
    筹米网你用过没?是套路还是真能帮你提前抢购域名?
    CSS选取第一个、最后一个、偶数、奇数、第n个标签元素
    winscp会话超时及尝试关闭优化连接缓冲大小
    Linux下压缩和解压
    一步一步学Linux下vi/vim的使用(案例比纯理论好学)
    Linux使用find命令,搜索文件名中带有通配符*,报错: paths must precede expression
  • 原文地址:https://www.cnblogs.com/z-sm/p/4613579.html
Copyright © 2020-2023  润新知