JSP-JSTL

<h2>尾部内容</h2>
<%
    System.out.println(request.getParameter("uname"));
    System.out.println(request.getParameter("str"));
%>

JSP和JSTL

zzj

一、JSP

1.1 JSP基本使用

1.1 简介

JSP:java Server Page是动态网页编程技术,可以使用java代码产生动态数据。

其实JSP就是一个servlet,第一次访问JSP的时候,JSP引擎都会讲这个JSP翻译成一个servlet,这个文件存放在Tomcat中的work目录中。

1.2 注释
  1. 显示注释(浏览器中按F12能看到的注释)

    继承HTML风格的注释;<!–HTML注释-- >

  2. 隐式注释(浏览器中按F12不能看到的注释)

    a. jsp自己的注释;<%–jsp注释–%>

    b. 继承java风格的注释;//单行注释,/ *多行注释 */

1.3 JSP的Scriptlet脚本小程序
  1. Java脚本段

    可以编写Java语句,定义局部变量。生成的代码在Servlet的service方法体中。

    <%
    	// 定义局部变量
    	int num = 100;
    %>
    
  2. 声明

    可以声明全局变量、方法、类等生成的代码在Servlet的类体中。

    <%!
        // 全局变量
        int b = 10;
    %>
    
  3. 输出

    可以输出表达式,字面量、变量。生成的代码在Servlet的service方法体中,相当于out.write()。

    <%=num%>
    

1.2 JSP的指令标签

方法:将工具栏、头部信息、尾部信息都分成各个独立的文件,使用的时候直接导入。

做法:分成多等分之后使用静态包含、动态包含的方式。。

1.2.1 include静态包含

特点:相当于直接内容的粘贴,只会生成一个源码文件,不能出现同名变量。

语法:<%@include file=“相对路径”%>

<%@include file="02-include静态包含02.jsp"%>
<h2>中间内容</h2>
<%=a%>
<%@include file="02-include静态包含03.jsp"%>
1.2.2 include动态包含

特点:相当于方法的调用,会生成多个源码文件,可以出现同名变量,同名变量按先后顺序会进行覆盖。

语法:<jsp:include page=“路径”>< /jsp:include>

<jsp:include page="03-include动态包含02.jsp"></jsp:include>
<h2>主体内容</h2>
<%
	String str = "Hello";
%>
<%-- 传递参数 --%>
<jsp:include page="03-include动态包含03.jsp">
    <jsp:param name="uname" value="admin"/>
    <jsp:param name="str" value="<%=str%>"/>
</jsp:include>

注意

  1. include动态包含是双标签。

  2. include动态包含可以传递参数。

    < jsp:param name=“参数名” value=“参数值”/> name不支持任何表达式,value支持表达式。

    参数接受:request.getParameter(name);

  3. 若没有参数传递,include双标签中不能有任何内容。

<jsp:include page="03-include动态包含02.jsp"></jsp:include>
<h2>主体内容</h2>
<%
    String str = "Hello";
%>
<%-- 传递参数 --%>
<jsp:include page="03-include动态包含03.jsp">
    <jsp:param name="uname" value="admin"/>
    <jsp:param name="str" value="<%=str%>"/>
</jsp:include>
<h2>尾部内容</h2>
<%
request.getParameter("uname");//admin
request.getParameter("str");//Hello
%>

1.3 JSP的四大域对象与九大隐式对象

1.3.1 四大域对象
  1. pageContext

    只能在本页面中获取,页面跳转后无效。

  2. request

    请求转发有效,重定向无效。

  3. session

    请求转发和重定向都有效。浏览器关闭无效

  4. application

    只要服务器不关闭都有效。

注意:尽量使用范围小的域对象。

1.3.2 九大隐式对象

九大隐式对象中包含四大域对象。

pageContext、request、session、application、response、out(输出流)、config(jsp的配置信息)、page(如同java中的this)、exception (异常处理)

1.4 EL表达式

简化了jsp代码。

1.4.1 获取域对象
<%
    pageContext.setAttribute("uname","zhangsan");
    request.setAttribute("uname","lisi");
    session.setAttribute("uname","wangwu");
    application.setAttribute("uname","zaholiu");
%>

默认获取最小范围的数据:${uname}<br>
page作用域:${pageScope.uname}<br>
request作用域:${requestScope.uname}<br>
session作用域:${sessionScope.uname}<br>
application作用域:${applicationScope.uname}<br>
1.4.2 获取list

根据集合的下标获取。

<%
    List<String> list = new ArrayList<String>();
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    request.setAttribute("list", list);
%>
获取集合的长度:${list.size()} <br>
获取指定下标的值:${list[0]}<br>
1.4.3 获取map

通过key值直接获取。

<%
    Map map = new HashMap();
    map.put("aaa", "111");
    map.put("bbb", 2222);
    map.put("ccc-a", 333);
    request.setAttribute("map", map);
%>
获取指定key的value:${map.aaa} -- ${map["bbb"]} <br>
1.4.4 获取javabean
<%
    User user = new User();
    user.setUserId(1);
    user.setUname("zhangsan");
    user.setUpwd("123456");

    Student student = new Student();
    student.setId(1);
    student.setStuName("ncdx");

    user.setStudent(student);

    request.setAttribute("user",user);
%>
获取JavaBean对象:${user} <br>
<%-- 属性字段必须提供get方法 --%>
获取JavaBean对象的属性:${user.getUname()} -- ${user.uname} -- ${user.student.stuName}<br>
1.5 empty

判断域对象是否为空。为空返回true,不为空返回false

request.setAttribute("str1","");
request.setAttribute("str2",null);
request.setAttribute("str3","Hello");

List<String> list1 = null;
List<String> list2 = new ArrayList<>();
List<String> list3 = new ArrayList<>();
list3.add("aaa");
list3.add("bbb");
list3.add("ccc");
request.setAttribute("list1", list1);
request.setAttribute("list2", list2);
request.setAttribute("list3", list3);

Map<String,String> map1 = null;
Map<String,String> map2 = new HashMap<>();
Map map3 = new HashMap();
map3.put("aaa", "111");
map3.put("bbb", 2222);
map3.put("ccc-a", 333);
request.setAttribute("map1", map1);
request.setAttribute("map2", map2);
request.setAttribute("map3", map3);
字符串:${empty str1} -- ${empty str2} -- ${empty str3} <br><!--true,true,false-->
List:${empty list1} -- ${empty list2} -- ${empty list3}<br><!--true,true,false-->
Map:${empty map1} -- ${empty map2} -- ${empty map3}<br><!--true,true,false-->

javabean中

User user1 = null;
User user2 = new User();
User user3 = new User();
user3.setUserId(1);
request.setAttribute("user1", user1);
request.setAttribute("user2", user2);
request.setAttribute("user3", user3);
JavaBean:${empty user1} --${empty user2} --${empty user3} <br><!--true,false,false-->
1.6 EL运算
${a == b }
${c == d }
${c eq d }
${a == 5 }
${c == 'aa' }

二、 JSTL

jsp的标准标签库,最重要的是用于迭代集合以及格式化日期等。

使用JSTL要记得导入两个jar包,使用maven的时候不用导包,它会自动生成一个仓库。

2.1 条件动作标签

2.1.1 if标签
<%
    int num = 10;
    request.setAttribute("num",num);
    int score = 60;
    request.setAttribute("score", score);
%>
<c:if test="${num>1}">
    <h3>num值大于1</h3>
</c:if>

<c:if test="${score<60}">
    <h3>不及格</h3>
</c:if>
<c:if test="${score==60}">
    <h3>刚刚及格</h3>
</c:if>
<c:if test="${score>60}">
    <h3>哎哟不错哦!</h3>
</c:if>
2.1.2 choose、when、otherwise标签

类似于switch、case、default关键字。

<%
    int num = 10;
    request.setAttribute("num",num);
    int score = 60;
    request.setAttribute("score", score);
%>
<c:choose>
    <c:when test="${score < 60}">
        <h3>你个小渣渣!</h3>
    </c:when>
    <c:when test="${score == 60}">
        <h3>分不在高,及格就行!</h3>
    </c:when>
    <c:otherwise>
        <h3>哎哟不错哦!</h3>
    </c:otherwise>
</c:choose>
2.1.3 迭代标签
  1. forEach标签

    <c:forEach var="i" begin="1" end="10">
        ${i}
    </c:forEach>
    <br>
    <%
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        request.setAttribute("list", list);
    
    %>
    <c:forEach var="str" items="${list}">
        ${str}
    </c:forEach><!--常用-->
    
2.1.4 格式化动作标签

格式化日期:(日期类型转化为字符串类型)

<%
    request.setAttribute("date1",new Date());
%>
${date1}<br>
<fmt:formatDate value="${date1}" type="date"></fmt:formatDate><br>
<fmt:formatDate value="${date1}" type="time"></fmt:formatDate><br>
<fmt:formatDate value="${date1}" type="both"></fmt:formatDate><br>
<fmt:formatDate value="${date1}" type="date" dateStyle="FULL"></fmt:formatDate><br>
<fmt:formatDate value="${date1}" type="date" dateStyle="short"></fmt:formatDate><br>
<fmt:formatDate value="${date1}" pattern="yyyy-MM-dd"></fmt:formatDate>

字符串类型转化为日期类型:

<%
	request.setAttribute("str1","2020-08-09");
%>
<fmt:parseDate value="${str1}" type="date" /> <br>
<fmt:parseDate value="2020/01/06" pattern="yyyy/MM/dd" /> <br>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值