JavaWeb笔记(12)-JSP

  1. jSP:java server pages
1. jsp:java服务器端页面
    * 该页面内既可以定义html标签,又可以定义java代码
    * 简化书写,避免所有页面信息写在Servl类的response.getWriter().write()2. jsp原理:
    a. jsp本质上就是一个servlet
        1. 客户端浏览器访问jsp文件资源
        2. 服务器找到该jsp资源后,将该资源转化为java文件
            -- 在访问过jsp资源后,在web项目目录下能找到work文件夹
            -- work文件夹中存有的就是jsp转化后的java文件和class文件
        3. 服务器将转化后的java文件编译为class文件
        4. 服务器将class文件响应给浏览器
    b. jsp自动生成的java类继承了HttpJspBase类
        1. HttpJspBase类由tomcat实现,继承自HttpServlet,并实现了HttpJspPage接口
        2. 在自动生成的java类中,具有_jspService方法(即service方法),里面有将html页面写给浏览器
3. jsp脚本:
    a. 脚本定义格式:
        1. <% java代码 %>* 该脚本在转化后的java代码生成在_jspService方法中
            * 该脚本类型用于定义在Service方法可实现的内容
        2. <%! java代码 %>* 该脚本类型用于定义类的成员:成员变量,成员方法,静态代码块等
            * 一般不在共享资源中定义成员变量,避免出现数据安全问题
        3. <%= java代码 %>* 该脚本用于输出内容到页面上
            * 该脚本中可以定输出语句中可以定义的内容
4. jsp内置对象:
    * 在jsp中不需要创建可以直接使用的对象
    * jsp内置对象:
        1. request:
            -- HttpServletRequest对象
            -- 用于一次请求访问多个资源(转发方式)
        2. response:
            -- HttpServletResponse对象
        3. out:
            -- JspWriter字符输出流对象
            * out.write()与response.getWriter().write()区别
                -- tomcat在回复响应消息之前,会先获取response缓冲区的数据,再获取out缓冲区的数据
                -- 即,response中内容的输出总是先于out中内容输出于页面上
        4. pageContext:
            -- PageContext对象,可以用于获取其他8个对象
            -- 仅限于当前页面的资源共享
        5. session:
            -- HttpSession对象
            -- 一次会话的多个请求间共享数据
        6. application:
            -- ServletContext对象
            -- 所用用户共享数据
        7. page:
            -- Object类型对象,并赋值为this,指当前页面本身
        8. config:
            -- ServletConfig对象
        9. exception:
            -- Throwable对象
            -- 只有声明了isErrorPage属性为true的页面中才包含该对象,普通页面只有前8中对象
  1. jsp指令
1. 指令:作用于jsp页面,用于导入资源文件
    a. 格式:
        <%@ 指令名称 属性1=属性值1 属性2=属性值2 ... %>
    b. 分类:
        1. page指令:用于配置jsp页面
            <%@ page 属性1=属性值1 属性2=属性值2 ... %>
            * contentType属性:相当于response.setContentType()
                -- 设置响应体的Mime属性和字符集
                -- 设置当前jsp页面的字符集,高级开发工具(IDEA)可以自动识别contentType属性的字符集,并设置相同字符集
                -- 低级开发工具需要额外设置pageEncoding属性
            * import属性:用于导入java文件包
            * errorPage属性:当前页面出现错误后,会跳转到该属性指定的错误页面。即不让用户看到错误信息
            * isErrorPage属性:表示该页面为错误页面,用于其他页面出现错误后,跳转到该页面
                -- 错误页面的isErrorPage属性标注为true后,才可以在该页面使用exception对象
                -- 错误页面可以使用exception对象记录错误信息到日志文件中
        2. include指令:用于导入页面包含的资源文件
            如果需复用使用其他页面上的内容,使用include指令
            <%@ include 属性1=属性值1 属性2=属性值2 ... %>
            * file属性:需要引入的文件名
        3. taglib指令:用于导入资源,一般导入标签库
            <%@ taglib 属性1=属性值1 属性2=属性值2 ... %>
            * prefix属性:标签库别名,自己定义
            * uri属性:标签库路径
    c. 注释:
        1. <!-- -->:只能在jsp页面注释html内容,不能注释脚本内容,浏览器检查可以查看到该注释信息
        2. <%-- -- %>:在jsp页面可以注释所有内容,使用该注释的信息不会随页面发送到浏览器,推荐使用
  1. MVC开发模式
1. MVC开发模式:规则代码书写格式,使得程序设计更加合理
2. MVC内涵:
    a. Model:模型
        -- JavaBean用作模型
        3. 执行业务操作,将结果返回给控制器
    b. View:视图
        -- Jsp用作视图展示,不再书写脚本代码
        5. 展示数据
    c. Controller:控制器
        -- Servlet用作控制器
        1. 获取客户端输出
        2. 调用指定模型进行业务操作
        4. 将结果提交给视图用于展示数据
  1. EL表达式/JSTL标签
1. 为了遵从MVC开发模式的规范,我们仅使用jsp来展示页面
    * 为了解决原jsp中脚本代码的必要,使用EL表达式或JSTL标签替代
2. EL表达式:Expression Language
    a. 格式:
        ${ 表达式 }
    b. jsp页面是默认支持EL表达式
        -- 如果要忽略当前jsp页面中所有EL表达式,在页面属性中isELIgnored设为true
        -- \${ 表达式 }表示忽略该EL表达式,即将$转义输出
    c. EL表达式只能从域对象获取值(4个域)
        1. 格式:
            ${ 域名.键名 }
        2. 域名 --> 对应的域对象
            * pageScope         -->   pageContext
            * requestScope      -->   request
            * sessionScope      -->   session
            * applicationScope  -->   application(ServletContext类型对象)
            -- ${ requestScope.name }可以取出在request域中存储的name键对应的值
            -- 如果域中没有该键,则返回空字符串,有则返回值
        3. ${键名}
            -- 会依次从最小的域中开始查找该键名,直到找到键名返回值,否则返回空字符
            -- pageScope < requestScope < sessionScope < applicationScope
            -- 如果4个域中的键名都不同,则可以直接省略域名
        4. 获取类对象,数组,map集合的值
            1. 获取类对象成员变量值
                ${域名.键名.类对象的属性名} // 该属性值指setter或getter方法去除set/get后首字母小写得到属性名
                例如:
                    ${ requestScope.user.name }
                    在request域中找到键名user所存储的User对象后,通过getName方法返回该对象成员变量name的值
                即,只要对象中有对应的getter/setter方法,就可以直接通过(.)获取设置属性值
                * 注意:
                    -- 如果没有对应属性的getter/setter方法而访问属性,则抛出异常
                    -- 可以专门为属性书写getter成员方法用于个性化返回值的格式(逻辑视图)
            2. 获取List中的值
                ${ 域名.键名[索引] } //去除索引则返回list对象,默认输出所有集合中的值
                例如:
                    ${ requestScope.list[0] }
                    如果索引越界,则返回空字符串
            3. 获取Map中的值
                ${ 域名.键名.key名称 }
                ${ 域名.键名[key名称] }
                例如:
                    ${requestScope.userMap.name}
                    ${requestScope.userMap["name"]}
    d. empty运算符
        * 用于判定字符串,集合,数据是否为null且长度是否大于0
            -- ${ empty list }只有当list不为null且list长度大于0时才为true
4. EL表达式隐式对象:即EL表达式中不需要创建直接使用的对象(11)
    1. 除去4个域名对象,还需要注意pageContext对象
        * 该pageContext对象可以用于获取jsp页面中的其他8个内置对象
        * 该对象中有8个对象的getter方法,因此,直接(.)获取对象名即可
        * 通过${pageContext.request.contextPath}可以在jsp页面动态获取虚拟目录,用于动态路径编写
  1. JSTL标签:javaServer page tag library
1. JSTL-- 由apache提供的开源的jsp标签
    -- 用于简化和替换jsp中的java代码
2. 使用步骤:
    a. 导入jar包
    b. jsp页面引入标签库:<%@ taglib prefix="" uri=""%>
    c. 通过<别名:标签名></别名:标签名>格式使用标签
3. 常用JSTL标签:
    a. if标签(if语句)
        1. 格式:
            <c:if test=""> 标签体 </c:if>
        2. 属性:
            * test属性:必要属性。属性值为布尔表达式,表达式值为true则显示标签体内容,否则不显示
    b. choose标签(switch语句)
        1. 格式:
            <c:switch > 
                <c:when test="情况1"> 标签体1 </c:when>
                ...
                <c:otherwise> 其他情况标签体 </c:otherwise>
            </c:switch>
    c. foreach(for语句)
        1. for(int i = 0;i < 10; i++){}形式标签:
            * 格式:
                <c:foreach var="i" begin=0 end=9 step=1>
                    //代码
                </c:foreach>
            * 需要设置标签属性:
                begin:开始值(>=开始值)
                end:结束值(<=结束值)
                step:步长
                var:声明的临时变量
            * 例如:
                <c:foreach var="i" begin=0 end=9 step=1>
                    ${i}<br>
                </c:foreach>
        2. for(Object obj : list){}形式标签:
            * 格式:
                <c:foreach items="${list}" var="obj" varStatus="s">
                    //代码
                </c:foreach>
            * 必须先将list对象存入域中,然后使用${键名}取出该list对象才可以遍历
        3. varStatus属性:循环状态对象
            为该属性设置一个临时变量名后,可以访问该对象的两个属性值index和count
            <c:foreach ... varStatus="s">
                ${s.index}
                ${s.count>
            </c:foreach>
            * count:表示循环次数,从1开始
            * index:表示容器中对象的索引,从0开始
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值