zoukankan      html  css  js  c++  java
  • JSP深入

    JSP深入
    之前了解了JSP的基本原理。现在开始更深入的学习
    JSP的注释
    支持三种注释
    1,JSP注释<%-- --%>只存在JSP代码源码中,当被翻译成Servlet时,这类注释会消失,不会在编译成的文件中存在
    2,java注释,/** */文档注释,生成javadoc,主要用来注释包,类,成员变量成员方法
    /* */多行注释和单行注释//,注释代码实现逻辑。
    该类注释在被翻译成Servlet时,注释存在,但是执行时会忽略注释,不会在生成的HTML代码中存在
    3.HTML注释<!-- -->
    在JSP翻译为Servlet时,会被翻译out.print打印出的语句,在HTML页面源代码该类注释是存在的。

    JSP指令元素
    用于指示JSP执行某些步骤和特定行为
    语法格式
    <%@ directive[attribute="value"]*%>
    指令的分类
    page指令标记
    语法格式<%@ page[attribute="value"]*%>用来定义JSP文件的全局属性
    常用属性
    1,language;声明脚本的种类,暂时只能支持java
    2,extends;表名JSP编译时需要加入的java全类名,内部的类都会继承自该类,所以一般不设置,如果设置的话改类必须是Servlet的一个实现类
    3,session;指定JSP中是否可以直接使用Session对象,默认为true,编译成serlvet时会自动提供session的空引用
    HttpSession session=null;
    session=PageContext.getSession();
    这样就可以直接在JSP文件中操作session对象
    4,import属性;完成JSP翻译后Servlet的导包工作
    jsp在翻译为Servlet时会默认导包
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    5,buffer autoFlush属性设置out隐含对象属性
    buffer设置缓冲区大小,autoFlush设置当前缓冲区满后,自动刷出。
    6,isELIgnored设置是否执行EL表达式是否解析,默认为false
    7,contentType和pageEncoding设置JSP页面编码,pageEncoding是JSP文件保存在硬盘上的编码格式。contentType传递的是jsp文件编译成Servlet时所采用的编码格式
    8,errorpage和isErrorpage用来设置错误页面之后的跳转,errorpage用于指定发生错误时跳转的页面
    错误页面处理的方式一般不通过设置属性这种方法来完成,而是在web.xml进行配置,这种配置可以全局处理错误页面。
    <error-page>
    <error-code></error-code>
    <location></location>
    </error-page>

    include指令标记
    用来静态的包含页面,将页面公共部分提取出来,通过include完成页面布局
    语法格式<%@ include file="url"%>
    要注意include包含被包含页面的整个内容,被包含页面可以不是一个完整的HTML文件,可以只是一个HTML片段。
    静态包含不管包含几个jsp页面,最终生成的目标servlet文件都是只有一个,将被包含的jsp页面翻译成的servlet语句进行了合并。

    taglib指令标记
    用来在jsp页面引用标签库文件
    定义标签的作用是为了简化jsp页面的开发,常用标签库jstl
    <%taglib uri="" prefix=""%>
    uri定义标签唯一命名空间
    prefix命名空间的前缀


    JSP的九大内置对象
    JSP文件翻译成Servlet时这些对象是默认已经创建好的
    request HttpServletRequest -----请求对象
    response HttpServletResponse -----响应对象
    session HttpSession -----会话对象
    application ServletContext -----Web应用全局唯一对象
    out JSPWriter
    pageContext PageContext
    page this(HttpServlet) -----由当前jsp文件生成的Servlet类文件对象Object类型,一般不使用
    config ServletConfig
    exception Throwable

    pageContext对象
    JSP在Servlet的基础上又多了一种page数据范围pageContext页面上下文对象
    pageContext.findAttribute("name");
    该方法按照page-request-session-application的顺序根据名称就近查找数据范围
    pageContext对象中封装了其他八个隐含对象,可以通过方法获得其他对象,得到了pageContext对象就相当于获得了其他对象,常应用于框架的编写

    out对象
    向浏览器输出信息本身是一个JSPWriter类型,内部使用PriterWriter来实现,拥有独立的缓冲区
    可以通过page指令设定缓冲区大小以及是否自动刷新
    与response.getWriter()的区别,response.getWriter的缓冲区与out的缓冲区是相互独立的,out缓冲区刷新数据会输出到response.getWriter的缓冲区内,所以out是必须要经过resonse对象进行回写的

    JSP常用标签action元素
    <jsp:useBean>
    使用一个ID和一个给定作用范围和同一ID的JavaBean相关联
    <jsp:setProperty>
    设置JavaBean的属性值
    <jsp:getProperty>
    获取JavaBean的属性值
    <jsp:include>
    请求时文件包含,等价于request.getRequestDispatcher().include(),是动态包含,在运行时执行包含动作,编译时生成多个servlet程序
    <jsp:forward>
    接收用户输入并将请求分派给另一页面,等价于request.getRequestDispatcher().forward();
    <jsp:param>
    转发时可以传递的参数,一般嵌套于forward标签内部

    EL表达式
    功能
    1,可以或得JSP四个数据范围内保存的数据(访问JavaBean属性)
    ${pageScope.属性名称}${requestScope.属性名称}${sessionScope.属性名称}${applicationScope.属性名称}
    如果不指定查找范围直接${属性名称}会直接调用pageContext.findAttribute(name)在四个数据范围内一次查找,如果没有找到会返回一个空字符串而不是null
    对于存放在数据域范围内的复杂对象例如JavaBean属性,也可以通过EL标签进行获取,此时是将JavaBean作为属性,对象作为属性值,访问对象中的成员直接${pageScope.person.name}获取,对于集合数组对象的获取${pageScope.list[i]}对于map结合${pageScope.map["key"]}

    2,EL表达式支持运算
    保留关键字and,true,instanceof,empty,div,false等,变量的命名应该避开关键字

    3,EL内置11个web开发常用对象
    pageScope,requestScope,sessionScope,applicationScope等十一个内置map对象
    4,EL可以调用java方法
    EL函数库,存在于jstl标签库中,主要是对字符串的处理函数

    JSTL标签库
    对于要求比较严格的时候,是不允许JSP内部定义脚本元素的,需要使用jstl标签库来实现功能,类似一种书写规范。
    JSTL标签库中共分为五个方向
    核心标签库(core)
    国际化标签库(fmt)
    数据库标签sql
    XML标签xml
    EL函数库fn
    每个标签库在jar包中的meta-inf文件夹下都有一个对应的tld文件
    通过taglib标签导入标签库
    <%@taglib uri="",prefix=""%>具体的uri与prefix值在tld文件中都可以找到,对应着<uri>与<short-name>标签

  • 相关阅读:
    9.11 eventbus
    9.10,,,实现new instanceof apply call 高阶函数,偏函数,柯里化
    9.9 promise实现 写完了传到gitee上面了,这里这个不完整
    9.5cors配置代码
    9.5 jsonp 实现
    9.5 http tcp https总结
    9.3 es6 class一部分 and es5 class 发布订阅
    8.30 cookie session token jwt
    8.30vue响应式原理
    warning: LF will be replaced by CRLF in renard-wx/project.config.json. The file will have its original line endings in your working directory
  • 原文地址:https://www.cnblogs.com/ss561/p/4637703.html
Copyright © 2011-2022 走看看