JSP

JSP

概念

  • 简化Servlet的设计,整合servlet和html,高效开发动态网页技术。

作用

  • 用于显示数据,提供与用户交互的视图。

九大内置对象

  • request : 请求对象,用于接收数据等,一次请求有效。
  • respone: 响应对象,用于响应数据给客户端。
  • application:上下文,用于保存多个用户公用的数据到服务器,即共同拥有一个application对象。
  • session: session对象,用于保存数据,一次会话有效,由session=“true”开关
  • pageContext:用于获取 out ,requuest,respone,application对象。
  • config:用于获取服务器的配置信息,在servlet初始化的时候,web容器通过config把配置信息传给servlet 。
  • page: 表示当前jsp对象,在当前页响应后销毁。
  • out :用户打印数据到客户端页面。
  • exception :用于响应异常数据,由isErrorPage=“false”开关。

四大域对象

  • request:一次请求有效。
  • pageContext:当前页面有效。
  • seesion:一次会话有效。
  • application:整个web应用有效。

jsp指令

  • <%@page …%>:定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等.

  • <%@ include … %> : 包含其他文件,静态包含。

  • <%@ taglib … %>:引入标签库的定义,可以是自定义标签。

    page指令

    • 语法:<%@ page attribute1=“value1” attribute2=“value2” %>.
    • Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
      在这里插入图片描述

    include指令

    • 语法:<%@ include file = “被包含的JSP路径”%>
    • 通过include指令来包含其他文件。
    • 被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是当前JSP文件的一部分,会被同时编译执行(静态包含)。
    • 在这里插入代码片
      <%@ include file=“header.jsp”%>


      <%@ include file=“footer.jsp” %>
    • 注意:可能会有重名的冲突问题,不建议使用。

    taglib指令

    • 语法:<%@ taglib uri=“外部标签库路径” prefix=“前缀” %>
    • 引入JSP的标准标签库
    • 在这里插入代码片
      <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

动作标签

  • 语法:<jsp:action_name attribute=“value” />

  • 动作标签指的是JSP页面在运行期间的命令
    include

    • 语法:<jsp:include page=“相对 URL 地址” />
    • <jsp:include >动作元素会将外部文件输出结果包含在JSP中(动态包含)。
    <jsp:include page="index.jsp"/>
    

    useBean

    setProperty

    • 可以在jsp:useBean元素之后使用jsp:setProperty进行属性的赋值
    • 在这里插入图片描述
   <jsp:useBean id="user" class="com.qf.entity.User" />

<jsp:setProperty name="user" property="name" value="gavin" />- 
  进行赋值

getProperty

  • jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。
  • 在这里插入图片描述
 <jsp:useBean id="user" class="com.qf.entity.User" />

<jsp:setProperty name="user" property="name" value="gavin" />

<jsp:getProperty name="user" property="name" />
 -  进行取值

脚本

普通脚本

  • 语法:<% Java代码 %>
 <html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>  
<%  
	//jsp中,使用小脚本嵌入java代码!  
	out.println("hi");//打印内容在客户端页面
    System.out.println("hi");//打印内容在控制台
%>
</body>
</html>

声明脚本

  • 语法:<%! 定义变量、函数 %>
 <%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Object object = new Object(); %> 
<%!
  //定义方法
  public void m1(){
 	 System.out.println("你好");
  }
%>

输出脚本

  • 语法:<%=Java表达式 %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp基本使用</title>
</head>
<body>
<p>
   今天的日期是: <%= new java.util.Date() %>
</p>
</body> 
</html> 

EL表达式(Expression Language)

概念

  • EL使JSP写起来更简单、简洁。主要用于获取作用域中的数据

作用

  • 用于替换作用域对象.getAttribute(“name”);

EL的应用(获取基本类型、字符串)

  • ${scope.name} 获取具体某个作用域中的数据
  • ${name} 获取作用域中的数据,逐级查找(pageContext、request、session、application)

EL应用案例

<%
	//存储在request作用域
	request.setAttribute("name","tom");
    request.setAttribute("age",18);
%>
${requestScope.name} <%--获取request作用域中name对应的值,找到就返回,没找到返回""  --%>
${name}<%--从最小作用域逐级查找name对应的值,找到就返回,没找到返回"" --%>

EL和JSP脚本的区别

  • <%=request.getAttribute() %> 没有找到返回null 。
  • ${requestScope.name} 没找到返回""

EL的应用(获取引用类型)

  • 使用EL获取作用域中的对象调用属性时,只能访问对象的get方法,必须遵守命名规范定义
 <%
    Emp e = new Emp();
    e.setName("gavin");
    e.setAge(19);
    request.setAttribute("e",e);
%>
${requestScope.e.name}<%-- 调用getName()方法 --%>

EL的应用(获取数组、集合的元素)

  • EL可以获取Array、List、Map中的元素,Set由于没下标,无法直接访问元素,后续可遍历
<%
    int[] array = new int[]{1,2,3,4,5};
    request.setAttribute("array",array);

	List<Emp> emps = new ArrayList<>();
    emps.add(new Emp(1,"gavin",2000,19));
    emps.add(new Emp(2,"marry",3000,29));
    emps.add(new Emp(3,"jack",4000,39));
    request.setAttribute("emps",emps);

	Map<String,String> maps = new HashMap<>();
    maps.put("CN","中国");
    maps.put("FK","法国");
    maps.put("US","美国");
	request.setAttribute("maps",maps);
%>
${requestScope.array[0]}

${requestScope.emps[0]} <%-- 也可以用 ${requestScope.emps.get(0)}  --%>

${requestScope.maps.CN} <%-- 也可以用 ${requestScope.maps["US"]} -->

获得应用上下文

<%=request.getContextPath() %>
${pageContext.request.contextPath}

JSTL标准标签库

现有问题

  • EL主要是用于作用域获取数据,虽然可以做运算判断,但是得到的都是一个结果,做展示。
  • EL不存在流程控制。比如判断。
  • EL对于集合只能做单点访问,不能实现遍历操作。比如循环。

什么是 JSTL?

  • JSTL:全称Java Server Pages Standard Tag Library
  • JSP标准标签库(JSTL)是一个JSP标签集合。

JSTL的作用

  • 可对EL获取到的数据进行逻辑操作。
  • 与EL合作完成数据的展示。

JSTL使用

  • 导入两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下
  • 在JSP页面引入标签库<% @taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”>

核心标签
条件标签if判断

  • 语法:<c:if test =“条件”> < /c:if>
<!-- test属性中是条件,但是条件需要使用EL表达式来书写 -->
	<h3>条件标签:if</h3>
	<c:if test="${8>2 }">
    	8大于2是成立的
     </c:if>
	<c:if test="${8<2 }">
   	 	8小于2是成立的
    </c:if>

多条件choose判断

语法:<c:choose >

​					<c:when test="条件1">结果1< /c:when> 

​					<c:when test="条件2">结果2< /c:when> 

​					<c:when test="条件3">结果3< /c:when> 

​					<c:otherwise >结果4< /c:otherwise>

​			  < /c:choose>
<h3>条件标签:choose(等价于java中多重if)</h3>
<%-- 测试成绩等级 >90 优秀   >80  良好    >70 中等   >60及格--%>
<c:set var="score" value="80"></c:set>
<c:choose>
	<c:when test="${score>=90 }">优秀</c:when>
	<c:when test="${score>=80 }">良好</c:when>
	<c:when test="${score>=70 }">中等</c:when>
	<c:when test="${score>=60 }">及格</c:when>
	<c:otherwise>不及格</c:otherwise>
</c:choose>

迭代foreach标签

   语法

<c:foreach 

	var="变量名" 

	items="集合" 

	begin="起始下标" 

	end="结束下标" 

	step="间隔长度" 

	varstatus="遍历状态">

< /c:foreach>
 <h3>测试list集合遍历获取学生列表</h3>
      <table border="1" width="80%" bordercolor="red" cellspacing="0"
          align="center">
          <tr>
              <th>学号</th>
              <th>姓名</th>
              <th>成绩</th>
              <th>班级</th>
              <th>是否是第一个</th>
              <th>是否是最后一个</th>
              <th>计数count</th>
              <th>索引index</th>
          </tr>
   <!-- varStatus:变量状态:遍历出的每一项内容的状态:
      first 是否是第一行
      last  是否是最后一行
      count 当前行数
      index 当前元素的下标
       -->
       <!-- var :遍历出的每一项使用变量先存储
            items:集合(使用El表达式)
            -->
          <c:forEach var="stu" items="${students}" varStatus="vs">
              <tr>
                  <td>${stu.id}</td>
                  <td>${stu.name}</td>
                  <td>${stu.score}</td>
                  <td>${stu.classes}</td>
                  <td>${vs.first}</td>
                  <td>${vs.last}</td>
                  <td>${vs.count}</td>
                  <td>${vs.index}</td>
              </tr>
          </c:forEach>
   </table>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值