JSP全流程

目录

JSP规范

JSP内置对象

Servlet和JSP文件分工

JSP文件运行原理

EL表达式


JSP规范

JSP规范:

        1、来自于JAVAEE规范中的一种

        2、JSP规范制定了如果开发JSP文件代替响应对象将处理结果写入到响应体的开发流程

        3、JSP规范制定了Http服务器应该如何调用管理JSP文件

响应对象存在弊端:

        1、适合将数据量较少的处理结果写入到响应体

        2、如何处理数据过多,使用响应对象增加开发难度

JSP的好处:

        JSP文件在执行时,自动将文件锁头内容写入到响应体,从而节省书写out.print

JSP文件java命令书写规则:

        <%

                int num = 100;

        %>

//在JSP文件,通过输出标记,通知JSP将Java变量的值写入到响应体

<%=变量名或者表达式%>

<%
    Integer num = 15;
%>

<%
    if(num > 18){
%>

    <font style="color: red; font-size: 40px">欢迎光临</font>
<%
    } else {
%>
    <font style="colro: red; font-size: 40px">谢绝入内</font>
<%
    }
%>

<center>
    <table border="2px">
        <tr>
            <td>编号</td>
            <td>姓名</td>
        </tr>
        <%
            for(Student stu : list){
        %>
        <tr>
            <td><%=stu.getId()%></td>
            <td><%=stu.getName()%></td>
        </tr>
        <%
            }
        %>

    </table>
</center>

JSP内置对象

JSP文件内置对象:request

        类型:HttpServletRequest

        作用:在JSP文件运行时读取请求包信息

                与Servlet在请求转发过程中实现数据共享

JSP文件内置对象:session

        类型:HttpSession

        作用:JSP文件在运行时,可以session指向当前用户私人储物柜

        添加共享数据,或者读取共享数据

JSP文件内置对象:applilcation

        类型:ServletContext

        作用:全局作用域对象,都可以通过当前网站的全局作用域对象实现数据共享Servlet和JSP的数据共享

Servlet和JSP文件分工

1、Servlet与JSP分工:

        Servlet:负责处理业务并得到处理结果

        JSP:不负责业务处理,主要任务将Servlet中处理结果写入响应体

2、Servlet与JSP之间调用关系        

        Servlet工作完毕后,一般通过请求转发方式向Tomcat申请调用JSP

3、Servlet与JSP之间如何实现数据共享

        Servlet将处理结果添加到请求作用域对象

        JSP文件在运行时从请求作用域对象得到处理结果

JSP文件运行原理

Http服务器调用JSP文件步骤:

        1、Http服务器将JSP文件内容编辑为一个Servlet接口实现类 .java

        2、Http服务器将Servlet接口实现类编译为class文件 .class

        3、Http服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象

        4、Http服务器通过Servlet实例对象调用_jspService方法,将jsp文件内容写入到响应体

EL表达式

EL工具包介绍:

        1、由Java技术开发一个jar包

        2、作用降低JSP文件开发时Java命令开发强度

        3、Tomcat服务器本身自带了EL工具包

EL表达式:

        1、命令格式:${作用域对象别名.共享数据}

        2、命令作用:

                1、EL表达式是EL工具包提供一种特殊命令格式 表达式命令格式

                2、EL表达式在JSP文件上使用

                3、负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体

EL表达式-作用域对象别名

        1、JSP文件可以使用的作用域对象

                ServletContext                application:全局作用域对象

                HttpSession                     session:会话作用域对象

                HttpServletRequest         request:请求作用域对象

                PageContext                  pageContext:当前页作用域对象

                这是JSP文件独有的作用域对象,Servlet中不存在

                在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用,

                不能共享给其他Servlet或者其他JSP文件

        2、EL表达式提供作用域对象别名

                JSP                EL表达式

                application    $(applicationScope.共享数据名)

                session        $(sessionScope.共享数据名)

                request         $(requestScope.共享数据名)

                pageContext  $(pageScope.共享数据名)               

EL表达式将引用对象属性写入到响应体

        1、命令格式:${作用域对象别名.共享数据名.属性名}

        2、命令作用:从作用域对象读取指定共享数据关联的引用对象的属性值,并自动将属性的结果写入到响应体。

        3、属性名:引用类型属性名完全一致

        4、EL表达式没有提供遍历集合方法,因此无法从作用域对象读取集合内容输出

EL表达式简化版:

        1、命令格式:$(共享数据名)

        2、命令作用:EL表达式允许开发人员开发时省略作用域对象别名

        3、工作原理:EL表达式简化版由于没有指定作用域对象,所以在执行时采用猜算法

                首先到pageContext定位共享数据,如果存在直接读取输出并结束执行

                如果在pageContext没有定位成功,到request定位共享数据,如果存在直接读取输出并结束执行

                如果在request没有定位成功,到session定位共享数据,如果存在直接读取输出并结束执行

                如果在session没有定位成功,到application定位共享数据,如果存在直接读取输出并结束执行

                如果在application没有定位成功,返回null

                pageContext--->request-->session-->application

        4、存在隐患:        

                容易降低程序执行速度

                容易导致数据定位错误

        5、应用场景:

                设计目的,就是简化从pageContext读取共享数据输出难度

        6、EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都使用简化版,拒绝使用标准版

EL表达式---支持运算表达式

        1、前提:在JSP文件有时需要将读取共享数据进行一番运算之后,将运算结果写入到响应体

        2、运算表达式

EL表达式提供内置对象

        1、命令格式:$(param.请求参数名)

        2、命令作用:从通过请求对象读取当前请求包中请求参数内容,并将请求参数内容写入到响应体

        3、代替命令:

                发送请求:http://localhost:8080/myWeb/index.jsp?userName=mike

                <%

                        String userName = rquest.getParameter("userName");

                        String password = request.getParameter("password");

                %>

                <%=userName%>

                <%=password%>

以下命令适合于多选

        1、命令格式:${paramValues.请求参数名[下标]}

        2、命令作用:如果浏览器发送的请求参数是一个请求参数关联多个值

                此时可以通过paramValues读取请求参数下指定位置的值,并写入到响应体

        3、代替命令:

                发送请求:http://localhost:8080/myWeb/index.jsp?hobby=抽烟

                此时hobby请求参数在请求包以数组形式存在

                <%

                        String[] arr = request.getParameterValues("hobby");

                %>

                <%=arr[0]%>

                <%=arr[1]%>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小红花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值