java学习之路-10

前言


java学习之路—–>Jsp学习-2

内容


Jsp中的四个域对象

四个域对象:
pageContext      page域                
request          request域
session          session域
application       context域

1)域对象作用:
        保存数据  和 获取数据 ,用于数据共享。

2)域对象方法:
        setAttribute("name",Object) 保存数据
        getAttribute("name")  获取数据
        removeAttribute("name") 清除数据

3)域对象作用范围:
        page域: 只能在当前jsp页面中使用(当前页面)
        request域: 只能在同一个请求中使用(转发)
        session域: 只能在同一个会话(session对象)中使用(私有的)
        context域: 只能在同一个web应用中使用。(全局的)

Jsp的最佳实践

Servlet技术: 开发动态资源。是一个java类,最擅长写java代码
jsp技术: 开发动态资源。通过java代码最擅长输出html代码。


各取所长:
    在web项目中涉及到逻辑:
        1)接收参数      servlet做
        2)处理业务逻辑,返回结果    servlet做
        3)显示数据到浏览器      jsp做
        4)跳转到其他页面        servlet做


servlet+jsp模式

  servlet:
        1)接收参数
        2)处理业务逻辑
        3)把结果保存到域对象中
        4)跳转到jsp页面
    Jsp:
        1)从域对象取出数据
        2)把数据显示到浏览器

servlet的数据    ->   jsp页面
List<Contact>    使用域对象 共享数据    

EL表达式

EL作用
    替换jsp表达式

EL表达式作用
    向浏览器输出域对象中的变量值或者是表达式计算的结果

语法:
    $(变量或表达式)
    1)输出基本数据类型变量
    1.1 从四个域获取    ${name}
            1.2 指定域获取
                ${pageScope.name}
        域范围: pageScoep / requestScope / sessionScope / 
        applicationScope

    2)输出对象的属性值
            Student
    3)输出集合对象
           List  和 Map
    4)EL表达式计算        

Jsp标签

jsp标签的作用

替换jsp脚本

1)流程判断(if   for循环)
2)跳转页面(转发,重定向)
3)。。。。。        

jsp标签分类

1)内置标签(动作标签): 不需要在jsp页面导入标签
2)jstl标签: 需要在jsp页面中导入标签
3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签        

动作标签

转发标签  <jsp:forward/>
参数标签  <jsp:pararm/>
包含标签  <jsp:include/>
原理: 包含与被包含的页面先各自翻译成java源文件,然后再运行时合并在一起。
            (先翻译再合并),动态包含

        静态包含  vs  动态包含的区别?

    1) 语法不同
    静态包含语法: <%@inclue file="被包含的页面"%>
    动态包含语法: <jsp:include page="被包含的页面">

    2)参数传递不同
    静态包含不能向被包含页面传递参数
    动态包含可以向被包含页面传递参数

    3)原理不同
    静态包含: 先合并再翻译
    动态包含: 先翻译再合并    

JSTL标签

JSTL (全名:java  standard  tag  libarary   -  java标准标签库  )

核心标签库 (c标签库) 天天用
国际化标签(fmt标签库)
EL函数库(fn函数库)
xml标签库(x标签库)
sql标签库(sql标签库)    

使用JSTL标签步骤

1)导入jstl支持的jar包(标签背后隐藏的java代码)
        注意:使用javaee5.0的项目自动导入jstl支持jar包
2)使用taglib指令导入标签库 
                <%@taglib uri="tld文件的uri名称" prefix="简写" %>
3)在jsp中使用标签    

核心标签库的重点标签:

保存数据:
        <c:set></c:set>   
获取数据: 
         <c:out value=""></c:out>
单条件判断
        <c:if test=""></c:if>
多条件判断
      <c:choose></c:choose>
      <c:when test=""></c:when>
      <c:otherwise></c:otherwise>
循环数据
      <c:forEach></c:forEach>
      <c:forTokens items="" delims=""></c:forTokens>
重定向
      <c:redirect></c:redirect>        

自定义标签

引入

需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签)

第一个自定义标签开发步骤

  1. 编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类
  2. 在web项目的WEB-INF目录下建立itcast.tld文件,这个tld叫标签库的声明文件。(参考核心标签库的tld文件)
  3. 在jsp页面的头部导入自定义标签库
    <%@taglib uri=”http://gz.itcast.cn“ prefix=”itcast”%>
  4. 在jsp中使用自定义标签

自定义标签的执行过程

问题: http://localhost:8080/day14/01.hellotag.jsp  
如何访问到自定义标签?

前提: tomcat服务器启动时,加载到每个web应用,
加载每个web应用的WEB-INF目录下的所有文件!!!例如。web.xml, tld文件!!!

1)访问01.hellotag.jsp资源

2)tomcat服务器把jsp文件翻译成java源文件->编译class
->构造类对象->调用_jspService()方法

3)检查jsp文件的taglib指令,是否存在一个名为
http://gz.itcast.cn的tld文件。如果没有,则报错

4)上一步已经读到itcast.tld文件

5)读到<itcast:showIp>到itcast.tld文件中查询是否存在<name>为showIp的
<tag>标签

6)找到对应的<tag>标签,则读到<tag-class>内容

7)得到 gz.itcast.a_tag.ShowIpTag

构造ShowIpTag对象,然后调用ShowIpTag里面的方法

自定义标签的作用

1)控制标签体内容是否输出
2)控制标签余下内容是否输出
3)控制重复输出标签体内容
4)改变标签体内容
5)带属性的标签

输出标签体内容格式

JSP: 在传统标签中使用的。可以写和执行jsp的java代码。
scriptless: 标签体不可以写jsp的java代码
empty: 必须是空标签。
tagdependent : 标签体内容可以写jsp的java代码,但不会执行。


版权声明:本文为博主原创文章,转载请注明出处KidSea

小额赞助,鼓励作者写出更好的文章