JSP页面

第一章 JSP

1.  知识点回顾

知识点回顾:

1.工厂设计模式

  public static Object getInstance(String type){

  if("EmpDAO".equals(type)){

     return new EmpDAOImpl();

   }

}

  properties文件中

  EmpDAO = com.xms.dao.impl.EmpDAOImpl

  Properties  p = new Properties();

  

   通过类加载器.getResourceAsStream("*.properties")  返回一个输入流

 

p.load(InputStream is);

 

Class.forName(StringclassName).newInstance();  相当于上面的  new EmpDAOImpl()

 

newInstance() 调用的就是无参构造器   通过反射实例化

 

以后实现类发生改变,工厂中就不用修改,

 

 

2. 容器如何处理请求资源路径

localhost:8080/appname/list.do

 

3. servlet生命周期

实例化

初始化 init(ServletConfig config)

就绪

销毁

 

 

 

 

 2.  JSP

java server page

是sun公司制定的一种用于服务器端生成动态页面的技术规范

虽然Servlet能够生成页面,但是代码比较繁琐,而且不方便后期维护,所以把页面交给jsp去展示

 

如何写一个jsp?

step1. 定义一个文件,后缀以.jsp结尾

step2. html+css+jsp

step3. java代码

        <% java代码块 % >

        <%=jsp表达式 % >

 

jsp指令

所谓指令,就是告诉jsp引擎在将jsp文件转成java文件时,做一些额外的处理,比如导包

语法: <%@指令名 属性名=属性值%>

page

pageEcoding:设置当前页面编码格式

import: 导包

 

隐含对象

在jsp页面中,不需要声明和创建的对象,就可以直接使用。在jsp文件转成java文件,容器会声明并赋值一些对象,比如out

 

 

 

 3.  转发

一个web组件将未完成的事情交给另外一个组件继续完成

step1:

// str:绑定名  obj: 绑定值

request.setAttribute(String str, Ojbect obj);

 

step2:获得转发器

request.getRequestDispatcher(String url);

 

step3:转发

forward(req,res);

 

 

//根据绑定名查找绑定值

Object: request.getAtrribute(String str)

 

注意点:

a. 转发之前,会清空response响应对象中的缓存数据

b. 转发之前,不能调用out.close()或者out.fulsh() 方法

 

特点:

a. 只能在同一个应用内部转发

b. 转发之后,浏览器地址栏的地址不会发生改变

c.  转发之间的组件,共享同一个请求与响应

 

转发器在request上面

 

 

 

jsp标签

11.1 知识点回顾

1.监听器

 

request session servletContext 触发监听器

HttpSessionListener

绑定数据 查找数据 获取全局参数

根据逻辑路径获取物理路径

 

2. servlet的线程安全问题

a. 加锁

b. SingleThreadModel

c. 可读

 

3. 隐含对象

out request response session

page pageContext config

application(实际上就是servletContext)

exception(需要设置error才可以得到)

 

注释符:

<!-- -->

<%-- --%> 运行的情况

 

 

11.2 jsp标签与el表达式

 

jstl标签:sun公司制定的一种技术规范,用于将jsp页面中的java代码替换成类似于html的标签,便于后期维护。

jstl标签(java standardtaglib)

sun公司只定义了标签的规范,但是并没有提供具体的标签库,后来apache组织开发了一套标签,并捐献给了sun,sun改名为jstl。

 

el表达式:

sun定义的一种计算规则,可以用来给标签属性赋值,也可以直接在页面上输出

a. 访问bean属性

   语法:${表达式}

   写法1: ${user.name}

       容器依次从pageContext,request,session,application中查找绑定名为user的对象

       反之返回"", 若找到该对象,则调用getName() 方法,获取name属性值。       

       若找到该对象,则调用getName() 获取name属性值

       可以指定查找范围,比如pageContextScope  requestScope sessionScope applicationScople

 

   写法2: ${user["name"]}

      与写法1作用一样

     a. [ ]之间可以写绑定名

     b. [ ]之间可以写下标

  

 

b. 常规计算

   算数运算 + - * /  %

   关系运算 > >= < <= == ...

   逻辑运算 &&  ||  !

   em运算  在以下四种情况下为true

        a. 根据绑定名取绑定名的值为""

        b. 根据绑定名取绑定的值为null

        c. 根据绑定名取绑定的值为空的集合

        d. 绑定名写错     

  

c. 获取参数值

  url?name=zs&city=nj&city=hf

  ${param.name} -->request.getParameter()

  ${paramValues.city}

  request.getParameterValues()

 

第二章 jstl标签

step1. 引入jstl相关jar包

step2. 在jsp页面中,通过taglib指令引入标签库<%@taglib uri="命名空间" prefix="前缀" %>

step3. 在jsp页面中,使用具体标签元素

 

--<c:if test=""  var="" scope="">

          标签体 

  </c:if>

  test: boolean的数据,可以通过el表达式给其赋值,若结果为true,则执行标签体

   var:指定一个绑定名,值为test属性的数据

  scope:指定绑定名的绑定范围

 

-- <c:choose>

     <c:when text=""> </c:when>

     <c:otherwise> </c:otherwise>

  </c:choose>

 

   至少有一个when标签,最多有一个otherwise

  test: boolean类型的数据,若为true,则执行when标签体,反之,执行otherwise

   标签体   

 

-- <c:forEach item=""  var="" varStatus="">

       循环体

  </c:forEach>

   items:可以通过el表达式给其赋值,指定的是所需要遍历的集合对象

   var: 指定一个绑定名,值是每次遍历的对象,默认绑定到pageContext上

   varStatus: 指定一个绑定名,值是一个java对象,该对象封装了当前遍历的相关信息,比如遍历的次数(count)以及遍历的下标(index)

  

自定义标签

step1. 写一个java类,继承SimpleTagSupport

step2. 重写doTag方法

step3. 定义tld文件,描述标签的信息,该文件可以放在WEB-INF或者META-INF目录下

 

<body-content>:标签元素是否需要标签体

empty: 不需要标签体

JSP:需要标签体,可以出现java代码

<%%> <%=%>  <%!%>

scriptless: 需要标签体,不可以出现java代码

 

练习:使用jstl标签与el表达式重构员工列表

 

练习更换emp的java代码为jsp标签和el表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值