JSP的脚本元素 指令元素 动作元素 页面元素以及执行过程

JSP: Java Server Page ,生成动态网页, servlet的一个升级产品
一、语法
    1..jsp为后缀
    2.存放位置,除WEB-INF以外的位置,也可以是web应用的根目录中
    3.在html标签中,使用特殊的JSP元素添加JAVA代码
    
    特殊的JSP元素:脚本元素、指令元素、动作元素

二、脚本元素
1)表达式脚本:<%= %> 计算表达式的值,并输出到浏览器
    注意:表达式必须要有计算结果;没有分号
2)声明脚本:<%! %> 声明/定义变量或方法
3)普通脚本:<%  %> 可以写java有效方法体语句,通常用于写逻辑代码(顺序/分支/循环)
    注意,不能出现:定义方法、import、package语句

三、JSP执行过程[难点]
1)翻译:根据特定的翻译规则,将.jsp翻译成.java文件(servlet) jsp就是servlet.
2)编译:将.java文件编译成.class文件
3)执行:执行.class文件(进入servlet的生命周期)

JSP在访问时,第一次会慢,以后运行速度会提高,原因:
    第一次请求:翻译、编译、执行
    以后再请求时:直接运行编译后.class文件.

.jsp翻译成.java的翻译规则:
    <%= %> --> service方法体语句,out.print(XXX);

    <%! %> --> 成员方法和成员变量(注意线程同步问题)
    <%  %> --> service方法体语句
    html标签 --> service方法体语句,out.write(XXX);

代码阅读,有错找出错误,没错输出结果:
test1.jsp
    <%!
        int num = 10;
    %>
    num = <%=num %>        //10
    <%
        int num = 100;    //OK
    %>
    num = <%=num %>        //100
    num = <%=this.num %>    //10
test2.jsp
    <%
        int num = 100;    
    %>
    num = <%=num %>        //100
    <%!
        int num = 10;    //
    %>
    num = <%=num %>        //100
    num = <%=this.num %>    //10
    
课堂练习:使用脚本元素打印9*9乘法表,奇数行红字显示,偶数行蓝字显示。
    
    http://ip:port/web应用/xx.jsp
    
所有JSP元素,不允许嵌套访问。

四、指令元素 <%@指令名   属性名=值  属性名2=值2 %>
    1、页面指令 <%@ page  %> 定义当前jsp页面相关的属性值
        1)contentType="text/html;charset=gbk" 标识当前jsp页面中的响应的类型
        2)import="" 导入的包或类,默认导入4个包

(java.lang.*/javax.servlet.*/javax.servlet.http.*/javax.servlet.jsp.*)
            a.import="java.util.*"
              import="java.text.*"
            b.import="java.util.*,java.text.*"
        3)isErrorPage="true|false(默认)" 标识当前页是否能处理异常
        4)errorPage="url" 标识当前jsp页面如果出了异常,由谁来处理异常

(isErrorPage=false)
        5)language="java" 标识当前jsp页面使用的语言,默认java
        6)session="true(默认)|false" 标识当前jsp页面中是否能直接使用session对象
            servlet中session的创建采用的是懒汉式 request.getSession(true|false);
            jsp中session的创建采用的是饿汉式(client向server第一次请求jsp时,当前

client的session就自动创建)
        7)isElIgnored="true|false" 默认值取决于server的版本 标识当前jsp页面是否忽略EL表

达式
        8)pageEncoding="" 标识当前jsp页面使用的字符编码
    2、包含指令 <%@ include file="url" %> 标识在当前jsp页面中要引入/包含其他web资源
        特点:静态包含(源码包含,编译前包含)
        -------------------------------------
        a.jsp    aaaaaa
                 bbbbbb
                 <%@ include file="/b.jsp"%>
                 ccc
                 ddd
        -------------------------------------
        b.jsp    111
                222
        -------------------------------------
        a.jsp --> 翻译过程,a.jsp+b.jsp=total(a.java)-->编译a.class-->执行
        -------------------------------------
        注意事项:相互包含的页面中,变量的重复定义问题。
        
    3、标签库指令 <%@ taglib uri="" prefix="" %> 标识当前jsp页面中要用标签库
    
五、动作元素
    1、包含动作  <jsp:include page="url"/> 标识当页JSP页面要引入/包含其他web资源
        特点:动态包含(结果包含,编译后包含)
        等价于:
            request.getRequestDispatcher("/url-pattern").include(request, response);
        -------------------------------------
        a.jsp    aaaaaa
                 bbbbbb
                 <jsp:include page="/b.jsp"/>
                 ccc
                 ddd
        -------------------------------------
        b.jsp    111
                222
        -------------------------------------
        a.jsp-->翻译a.jsp(a.java)-->编译-->执行结果:resulta+resultb==客户端的最终结果
        b.jsp-->翻译b.jsp(b.java)-->编译-->执行结果:resultb
        -------------------------------------
        
        <jsp:include page="url">
            <jsp:param name="" value=""/>  给被包含的资源传参数
        </jsp:include>
        
        在被包含的资源中获取参数的方式:String str = request.getParameter("name");
        
    2、请求转发动作 <jsp:forward page="url"/> 标识在当前jsp中要转到其他web资源
        等价于:
            request.getRequestDispatcher("/url-pattern").forward(request, response);
        特点:1)地址栏不变
            2)服务器端的转发
            3)永久转向
            4)共享同一个request对象
            
        <jsp:forward page="url">
            <jsp:param name="" value=""/>  给被转向的资源传参数
        </jsp:forward>
        
        在被转向的资源中获取参数的方式:String str = request.getParameter("name");
---------------------------
JSP页面元素
1、脚本元素
    <%= %>
    <%! %>
    <%  %>
2、指令元素
    <%@ page contentType="" import="" isErrorPage="" errorPage="" %>
    <%@ include file="url" %>  特点、与<jsp:include >的区别
    <%@ taglib uri="" prefix="" %>
3、动作元素
    <jsp:include page="url"/>    特点、与<%@include %>的区别
    <jsp:forward page="url">
        <jsp:param name="" value=""/>
    </jsp:forward>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章