JavaWeb复习巩固

第六天:JSP  EL表达式   jstl标签

1.Jsp原理:

Jsp本质上是一个Servlet,项目中的jsp页面在用户第一次访问的时候会被翻译成java类,这个java(org.apache.jasper.runtime.HttpJspBase)类会继承httpServlet

 什么是JSP:

* Java Server Pages(Java服务器端的页面)

为什么要学习JSP:

* SUN公司推出的Servlet自身有缺陷,没有办法与ASP,PHP进行竞争.推出了动态网页开发技术JSP.

使用JSP:

* JSP = HTML + Java代码 + JSP自身的东西.

执行JSP的过程:

* JSP翻译成Servlet,编译这个Servlet的类,生成class文件.得到执行.

JSP的脚本

  • <%!   %> 声明脚本   :翻译成Servlet中的成员内容. 定义变量,方法,类. -- 不建议.
  • <%    %> 代码块脚本 :翻译成Servlet中service方法内部的内容. 定义类,变量
  • <%=   %> 输出脚本 :翻译成Servlet中service方法中out.print();

 JSP的注释

  • HTML的注释 :<!-- 注释 -->   

在jsp翻译的时候会被翻译到servelt代码中使用输出语句输入到浏览器中

  • Java代码的注释 :// 单行注释 /*多行注释*/ /** 文档注释 */
  • JSP的注释 :<%-- JSP的注释 --%>

JSP的指令:

  1. 指令的语法:

<%@ 指令名称 属性名称=”属性值” 属性名称=”属性值” ...%>

JSP中有三个指令:page指令, include指令, taglib指令.

  1. JSP中page指令:<%@ page %> -- 设置JSP的.

* language :JSP脚本中使用的语言.现在只能写java.

* contentType :设置浏览器打开这个JSP的时候采用的默认的字符集的编码.

* pageEncoding :设置文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码.

* import :在JSP中引入类对象.但是import可以出现多次.

* isELIgnored :设置在JSP中是否忽略EL表达式.默认值是false不忽略.

* errorPage :设置错误友好页面的提示.指定当前页面出错之后跳转的错误页面

* isErrorPage :通过这个设置显示JSP的错误信息.  如果值设置成true,那么在这个页面中可以直接使用一个execption对象获取错误信息

  1. JSP中的include指令:指示JSP包含其他的页面.

<%@ include file="logo.jsp" %>

<%@ include file="menu.jsp" %>

<h1>BODY部分</h1>

<%@ include file="footer.jsp" %>

  1. JSP中的taglib指令:指示JSP引入标签库.

<%@ taglib uri="标签的URI的路径" prefix="标签的别名" %>

JSP的内置对象(重点)

  1. JSP的内置对象:在JSP中可以直接使用的对象.
  2. JSP中有9大内置对象:
  3. page内置对象 :真实对象是Object,就是JSP翻译成Servlet后的类的引用.
  4. out内置对象 :out和response.getWriter是不是同一个对象?区别是什么?

* 不是out真实对象JspWriter ,response获得Writer是PrintWriter.

  1. pageContext内置对象 :

* 获得其他的8个内置对象 :编写通用性代码或者框架的时候.

* 向JSP的四个域中存取数据 :

    JSP的四个域范围:

    * PageScope:当前页面中有效.pageContextPageContext

    * RequestScope:一次请求范围.requestHttpServletRequest

    * SessionScope:一次会话范围.sessionHttpSession

    * ApplicationScope:应用范围applicationServletContext

2. EL表达式:

Jsp  +   javaBean(jsp开发模式一)

问题:前端代码和服务器代码耦合(项目难以维护)

          要解决这个问题,我们就要尽量的在jsp页面中少写java代码(jsp中不要写java代码)

 EL的概述

  • 什么是EL:
  • 为什么学习EL:

* 简化JSP的代码,而且减少<%%>

  • 使用EL表达式:

* 语法:${ EL表达式 }

EL的常用功能:

1. EL获取数据

注意:El表达式只能获取域对象中的数据

PageContext

Request

Session

 Application(ServeltContext)

1.存取是普通的单值数据

<%=pageContext.getAttribute("name") %>

<%=request.getAttribute("name") %>

<%=session.getAttribute("name") %>

<%=application.getAttribute("name") %>

${ pageScope.name }

${ requestScope.name }

${ sessionScope.name }

${ applicationScope.name }

注意:

1. 通过域对象调用方法如果值没有获取的是null对象,El表达式获取数据如果没有获取到返回””

2. ${ name }类似findAttribute("name") 先从pageContext域中查找,没找到去request域中查询,没有找到去session域中找,没有找到就去application域中找

2. 获取数组(List集合)的数据

${ arrs[0] }

${ arrs[1] }

${ arrs[2] }

${ arrs[3] }

3. 获取Map集合的数据  

4. 获取对象的数据

${ user.id }

${ user.username }

${ user.password }

注意:el表达式获取对象属性值的时候,如果属性找不到,会直接报错

5. 获取对象的集合的数据

<%

User user1 = new User(1,"aaa","123");

User user2 = new User(2,"bbb","123");

User user3 = new User(3,"ccc","123");

List<User> userList = new ArrayList<User>();

userList.add(user1);

userList.add(user2);

userList.add(user3);

pageContext.setAttribute("userList", userList);

%>

${ userList[0].id } - ${ userList[0].username } - ${ userList[0].password }<br/>

${ userList[1].id } - ${ userList[1].username } - ${ userList[1].password }<br/>

${ userList[2].id } - ${ userList[2].username } - ${ userList[2].password }<br/>

pageContext     用来获取request对象  在jsp页面中动态获取项目的虚拟路径

 ${pageContext.request.contextPath}

3.JSTL

1.1 JSTL的概述

  1. 什么是JSTL:
  1. 为什么学习JSTL:

* JSTL和EL结合 替换页面中<%%>

  1. JSTL版本:

* JSTL1.0 :不支持EL表达式.

* JSTL1.1 和 1.2 :支持EL表达式.

  1. JSTL的标签库:包含了五类标签.

* core(核心标签),fmt(国际化标签),xml(XML标签),sql(SQL标签),fn(JSTL提供EL函数库)

  1. 使用JSTL:

* 1.引入JSTL的相关的依赖jar包.

* 在页面中引入标签库.<%@ taglib uri=”” prefix=””%>

 JSTL的核心标签的用法

* if--条件判断

* forEach---循环遍历

例子:

<%--
  Created by IntelliJ IDEA.
  User: lz
  Date: 2021/12/17
  Time: 12:29
  To change this template use File | Settings | File Templates.
--%>
<%--jsp指令声明--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--EL表达式获取数据 域对象可以共享数据,他们都有setAttribute和getAttribute方法用来设置数据和获取数据--%>
${requestScope.username}
<%--jstl是要结合el表达式的--%>
<c:if test="${not empty username}">
    欢迎您,${username}
</c:if>
<c:forEach var="i" begin="0" end="11" step="2">
    ${i} <br/>
</c:forEach>
</body>
</html>
package com.swlz.jsp;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/servletJSPDemo1")
public class ServletJSPDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             request.setAttribute("username","jackson");//域对象(共享数据)
             request.getRequestDispatcher("/user.jsp").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       doPost(request,response);
    }
}

今日学习感受:人生的路很长,需要自己一点一滴去慢慢创造属于自己的人生,选择自己的人生,自己既然选择了一条路,无论如何都要坚持下去,加油,追梦人!!!最后一句话:天生我材必有用!!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值