百味皆苦 java后端开发攻城狮

java复习jsp

2019-03-19
百味皆苦

jsp

  • 在Servlet中输出html代码,特别是稍微复杂一点的html代码,就会给人一种很酸爽的感觉,如果能够直接使用Html代码,然后在html中写java代码,就好了,JSP就可以干这个事情

执行过程

  • 把 hello.jsp转译为hello_jsp.java
  • hello_jsp.java 位于:d:\tomcat\work\Catalina\localhost_\org\apache\jsp
  • hello_jsp.java是一个servlet
  • 把hello_jsp.java 编译为hello_jsp.class
  • 执行hello_jsp,生成html
  • 通过http协议把html 响应返回给浏览器

  • 我们说HelloServlet是一个Servlet,不是因为它的类名里有一个”Servlet”,而是因为它继承了 HttpServlet
  • 打开转译hello.jsp 后得到的hello_jsp.java,可以发现它继承了类org.apache.jasper.runtime.HttpJspBase,而HttpJspBase 继承了HttpServlet,所以我们说hello_.jsp.java 是一个Servlet

页面元素

  • 静态内容:就是html,css,javascript等内容
  • 指令:以<%@开始 %> 结尾,比如<%@page import=”java.util.*”%>
  • 表达式 <%=%>,用于输出一段html
  • Scriptlet:在<%%> 之间,可以写任何java 代码
  • 声明:在<%!%> 之间可以声明字段或者方法。但是不建议这么做。
  • 动作: 在jsp页面中包含另一个页面
  • 注释 <%– – %>:不同于 html的注释 <!-- --> 通过jsp的注释,浏览器也看不到相应的代码,相当于在servlet中注释掉了

表达式

  • <%="hello jsp"%> 就相当于<%out.println("hello jsp");%>
  • out是jsp的隐式对象,可以直接使用
  • 注: <%=%> 不需要分号结尾,<%%> 需要以分号结尾,和java代码一样

循环

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
<%
    List<String> words = new ArrayList<String>();
    words.add("today");
    words.add("is");
    words.add("a");
    words.add("great");
    words.add("day");
%>
 
<table width="200px" align="center" border="1" cellspacing="0">
 
用java遍历


 
</table>

include

  • 每个网页的最下方都有 版权声明等信息。 如果不使用包含,那么每个网页都需要单独写,如果版权声明要修改,则需要很大的工作量。
  • 使用include的办法,只需要准备一个footer.jsp,然后在其他页面包含footer.jsp即可。
  • 修改的时候,只需要修改footer.jsp所有的页面就都修改了,维护成本降低了很多。
  • include有两种方式指令include动作include
<hr>
<p style="text-align:center">copyright@2016
</p>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
    
你好  JSP

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

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
    
你好  JSP

<jsp:include page="footer.jsp" />

区别

  • 如果是指令include :<%@include file="footer.jsp" %>,footer.jsp的内容会被插入到 hello.jsp 转译 成的hello_jsp.java中,最后只会生成一个hello_jsp.java文件
  • 如果是动作include :<jsp:include page="footer.jsp" />,footer.jsp的内容不会被插入到 hello.jsp 转译 成的hello_jsp.java中,还会有一个footer_jsp.java独立存在。 hello_jsp.java 会在服务端访问footer_jsp.java,然后把返回的结果,嵌入到响应中。

传参

  • 因为指令<%@include 会导致两个jsp合并成为同一个java文件,所以就不存在传参的问题,在发出hello.jsp 里定义的变量,直接可以在footer.jsp中访问。
  • 而动作其实是对footer.jsp进行了一次独立的访问,那么就有传参的需要。

<%@page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
 
你好 JSP
<%=new Date().toLocaleString()%>

<jsp:include page="footer.jsp">
	<jsp:param  name="year" value="2017" />
</jsp:include>




<hr>
	<p style="text-align:center">copyright@<%=request.getParameter("year")%>
</p>

跳转

  • Servlet的跳转一样,JSP的跳转也分服务端跳转和客户端跳转。

客户端

<% 
	response.sendRedirect("hello.jsp");
%>

服务端

<jsp:forward page="hello.jsp"/>
  • 有的网站,登陆的时候,会出现一个选项,问你是否要一周内或者一个月内保持登陆状态。如果你选了,那么一周之内,都不需要再输入账号密码。这个功能,就是靠cookie来实现的
  • Cookie是一种浏览器和服务器交互数据的方式。
  • Cookie是由服务器端创建,但是不会保存在服务器
  • 创建好之后,发送给浏览器。浏览器保存在用户本地
  • 下一次访问网站的时候,就会把该Cookie发送给服务器。
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>

<%
	Cookie c = new Cookie("name", "Gareen");
	c.setMaxAge(60 * 24 * 60);
	c.setPath("/");
	response.addCookie(c);
%>

<a href="getCookie.jsp">跳转到获取cookie的页面</a>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>

<%
	Cookie[] cookies = request.getCookies();
	if (null != cookies)
		for (int d = 0; d <= cookies.length - 1; d++) {
			out.print(cookies[d].getName() + ":" + cookies[d].getValue() + "<br>");
		}
%>

session

  • Session对应的中文翻译是会话。
  • 会话指的是从用户打开浏览器访问一个网站开始,无论在这个网站中访问了多少页面,点击了多少链接,都属于同一个会话。 直到该用户关闭浏览器为止,都属于同一个会话。
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>

<%
   session.setAttribute("name", "teemo");
%>

<a href="getSession.jsp">跳转到获取session的页面</a>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>

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

session中的name: <%=name%>

  • 如果浏览器把cookie功能关闭,那么服务端就无法获取jsessionid,每一次访问,都会生成一个新的session对象。
  • 为了解决这个问题,可以使用response.encodeURL("getSession.jsp")把getSession.jsp这个url转换为getSession.jsp;jsessionid=22424AEA86ADBE89F335EEB649D997A8
  • 通过这个方式,提交jsessionid到服务器。 服务器根据这个jsessionid匹配到对应的session. 与session相关的功能,就可以正常工作了。
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>

<%
   session.setAttribute("name", "teemo");
%>

<a href="<%=response.encodeURL("getSession.jsp")%>">跳转到获取session的页面</a>

  • session的有效期默认为30分钟,可以通过 d:/tomcat/conf/web.xml 中的session-config 配置进行调整

作用域

  • JSP有4个作用域,分别是 pageContext 当前页面 requestContext 一次请求 sessionContext 当前会话 applicationContext 全局,所有用户共享

pageContext

  • pageContext表示当前页面作用域
  • 通过pageContext.setAttribute(key,value)的数据,只能在当前页面访问,在其他页面就不能访问了。

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	pageContext.setAttribute("name","gareen");
%>

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


<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

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

requestContext

  • requestContext 表示一次请求。随着本次请求结束,其中的数据也就被回收。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 
<%
    request.setAttribute("name","gareen");
%>
 
<%=request.getAttribute("name")%>



<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

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

  • requestContext指的是一次请求
  • 如果发生了服务端跳转,从setContext.jsp跳转到getContext.jsp,这其实,还是一次请求。 所以在getContext.jsp中,可以取到在requestContext中设置的值
  • 这也是一种页面间传递数据的方式

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	request.setAttribute("name","gareen");
%>

<jsp:forward page="getContext.jsp"/>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

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

  • 客户端跳转,浏览器会发生一次新的访问,新的访问会产生一个新的request对象。
  • 所以页面间客户端跳转的情况下,是无法通过request传递数据的。

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	request.setAttribute("name","gareen");
	response.sendRedirect("getContext.jsp");
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

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

sessionContext

  • sessionContext 指的是会话,从一个用户打开网站的那一刻起,无论访问了多少网页,链接都属于同一个会话,直到浏览器关闭。
  • 所以页面间传递数据,也是可以通过session传递的。
  • 但是,不同用户对应的session是不一样的,所以session无法在不同的用户之间共享数据。

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	session.setAttribute("name","gareen");
	response.sendRedirect("getContext.jsp");
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

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

applicationContext

  • applicationContext 指的是全局,所有用户共享同一个数据
  • 在JSP中使用application对象, application对象是ServletContext接口的实例
  • 也可以通过 request.getServletContext()来获取。
  • 所以 application == request.getServletContext() 会返回true
  • application映射的就是web应用本身。

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	application.setAttribute("name","gareen");
	System.out.println(application == request.getServletContext());
	response.sendRedirect("getContext.jsp");
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

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

隐式对象

  • JSP的隐式对象指的是不需要显示定义,直接就可以使用的对象

  • JSP一共有9个隐式对象,分别是 request,response,out

pageContext, session,application

page,config,exception

page

  • page 对象即表示当前对象
  • JSP 会被编译为一个Servlet类 ,运行的时候是一个Servlet实例。 page即代表this
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
     
page:<%=page%>
<br>
this:<%=this%>

config

  • config可以获取一些在web.xml中初始化的参数。
  • 在JSP中使用config比较复杂,需要如下几个步骤
    1. 在web.xml中进行配置
    2. 创建一个testconfig.jsp通过config.getInitParameter(“database-ip”) 获取参数
    3. 访问路径,获取web.xml中配置的参数
  • 注1: 不能通过 http://127.0.0.1/testconfig.jsp 获取参数,只能通过/testconfig路径
  • 注2:这种用法不常见,不推荐使用


	<servlet>
		<!-- 把 testconfig.jsp配置为一个 servlet -->
		<servlet-name>testconfig</servlet-name>
		<jsp-file>/testconfig.jsp</jsp-file>
		<!-- 配置初始化参数 -->
		<init-param>
			<param-name>database-ip</param-name>
			<param-value>127.0.0.1</param-value>
		</init-param>
	</servlet>
	<!-- 将路径 testconfig映射到testconfig.jsp -->
	<servlet-mapping>
		<servlet-name>testconfig</servlet-name>
		<url-pattern>/testconfig</url-pattern>
	</servlet-mapping>



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
     
database-ip: <%=config.getInitParameter("database-ip")%>

exception

  • exception 对象只有当前页面的<%@page 指令设置为isErrorPage=”true”的时候才可以使用。
  • 同时,在其他页面也需要设置 <%@page 指令 errorPage=”” 来指定一个专门处理异常的页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" errorPage="catch.jsp"%>

<%
	int[] a = new int[10];
	a[20] = 5;
%>


<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" isErrorPage="true"%>
	
<%=exception%>

JSTL

  • JSTL JSP Standard Tag Library 标准标签库
  • JSTL允许开人员可以像使用HTML标签 那样在JSP中开发Java功能。
  • JSTL库有core, i18n, fmt, sql 等等。
  • i18n和sql用的很少,core和fmt在工作中会用到,本章节主要讲解core和fmt
  • 首先需要两个jar包,分别是jstl.jar 和standard.jar
在页面中使用JSTL需要在jsp中 通过指令进行设置
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
prefix="c" 表示后续的标签使用都会以<c: 开头

<c:set var="name" value="${'gareen'}" scope="request" />
在作用域request中设置name,相当于<%request.setAttribute("name","gareen")%>

<c:out value="${name}" />
相当于 <%=request.getAttribute("name")%>

<c:remove var="name" scope="request" />
在作用域request中删掉name,相当于<%request.removeAttribute("name")%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<c:set var="name" value="${'gareen'}" scope="request" />

通过标签获取name: <c:out value="${name}" /> <br>

<c:remove var="name" scope="request" /> <br>

通过标签获取name: <c:out value="${name}" /> <br>

if else

  • JSTL通过**** 进行条件判断
  • 但是JSTL没有<c:else,所以常用的办法是在<c:if的条件里取反
  • 配合if使用的还有通过empty进行为空判断
  • empty可以判断对象是否为null,字符串长度是否为0,集合长度是否为0
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="java.util.*"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<c:set var="hp" value="${10}" scope="request" />

<c:if test="${hp<5}">
	<p>这个英雄要挂了</p>
</c:if>

<c:if test="${!(hp<5)}">
	<p>这个英雄觉得自己还可以再抢救抢救</p>
</c:if>

<% 
	pageContext.setAttribute("weapon", null);
	pageContext.setAttribute("lastwords", "");
	pageContext.setAttribute("items", new ArrayList());
%>

<c:if test="${empty weapon}">
	<p>没有装备武器</p>
</c:if>
<c:if test="${empty lastwords}">
	<p>挂了也没有遗言</p>
</c:if>
<c:if test="${empty items}">
	<p>物品栏为空</p>
</c:if>


choose

  • 虽然JSTL没有提供else标签,但是提供了一个else功能的标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="java.util.*"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<c:set var="hp" value="${3}" scope="request" />

<c:choose>
    <c:when test="${hp<5}">
		<p>这个英雄要挂了</p>
	</c:when>
	<c:otherwise>
		<p>这个英雄觉得自己还可以再抢救抢救</p>
	</c:otherwise>
</c:choose>

forEach

<c:forEach items="${heros}" var="hero" varStatus="st"  >
items="${heros}" 表示遍历的集合
var="hero" 表示把每一个集合中的元素放在hero上
varStatus="st" 表示遍历的状态
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="java.util.*"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%
	List<String> heros = new ArrayList<String>();
	heros.add("塔姆");
	heros.add("艾克");
	heros.add("巴德");
	heros.add("雷克赛");
	heros.add("卡莉丝塔");
	request.setAttribute("heros",heros);
%>

<!-- 使用jsp中的for循环来遍历List -->
<table width="200px" align="center" border="1" cellspacing="0">
<tr>
    <td>编号</td>
    <td>英雄</td>
</tr>
  
<%
int i =0;
for (String hero : heros) {
i++;
%>
 
<tr>
    <td><%=i%></td>
    <td><%=hero%></td>
</tr>
 
<%}%>
  
</table>

<br>
<!-- 使用JSTL中的c:forEach 循环来遍历List -->
<table width="200px" align="center" border="1" cellspacing="0">
<tr>
    <td>编号</td>
    <td>英雄</td>
</tr>
  
<c:forEach items="${heros}" var="hero" varStatus="st"  >
	<tr>
	    <td><c:out value="${st.count}" /></td>
	    <td><c:out value="${hero}" /></td>
	</tr>
</c:forEach>
</table>

forTokens

  • <c:forTokens专门用于字符串拆分,并且可以指定多个分隔符
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 
<c:set var="heros" value="塔姆,艾克;巴德|雷克赛!卡莉丝塔" /> 

<c:forTokens items="${heros}" delims=":;|!" var="hero">
	<c:out value="${hero}" /> <br />
</c:forTokens>

格式数字

  • fmt 标签常用来进行格式化,其中fmt:formatNumber用于格式化数字
  • 使用之前要加上<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix='fmt' %>
  • <fmt:formatNumber type="number" value="${money}" minFractionDigits="2"/>
  • <fmt:formatNumber 表示格式化数字 minFractionDigits 小数点至少要有的位数 maxFractionDigits 小数点最多能有的位数
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
    
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix='fmt' %>  

<c:set var="money" value="888.8" />
<c:set var="pi" value="3.1415926" />
最少两个小数点:
<fmt:formatNumber type="number" value="${money}" minFractionDigits="2"/>
<br>
最多两个小数点:
<fmt:formatNumber type="number" value="${pi}" maxFractionDigits="2" />

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
    
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix='fmt' %>  

<%
	Date now = new Date();
	pageContext.setAttribute("now",now);
%>

完整日期: <fmt:formatDate value="${now}" pattern="G yyyy年MM月dd日 E"/><br>
完整时间: <fmt:formatDate value="${now}" pattern="a HH:mm:ss.S z"/><br>
常见格式: <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>

fn

  • fn标签提供各种实用功能,首先使用之前使用加入如下指令
  • <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

fn:contains(string, substring)

"如果参数string中包含参数substring,返回true"

fn:containsIgnoreCase(string, substring)

"如果参数string中包含参数substring(忽略大小写),返回true"

fn:endsWith(string, suffix)

"如果参数 string 以参数suffix结尾,返回true"

fn:escapeXml(string)

"将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回"

fn:indexOf(string, substring)

"返回参数substring在参数string中第一次出现的位置"

fn:join(array, separator)

"将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。"

fn:length(item)

"返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。"

fn:replace(string, before, after)

"返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果"

fn:split(string, separator)

"返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素"

fn:startsWith(string, prefix)

"如果参数string以参数prefix开头,返回true"

fn:substring(string, begin, end)

"返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符"

fn:substringAfter(string, substring)

"返回参数substring在参数string中后面的那一部分字符串"

fn:substringBefore(string, substring)

"返回参数substring在参数string中前面的那一部分字符串"

fn:toLowerCase(string)

"将参数string所有的字符变为小写,并将其返回"

fn:toUpperCase(string)

"将参数string所有的字符变为大写,并将其返回"

fn:trim(string)

"去除参数string 首尾的空格,并将其返回"

EL

取值

  • 为了保证EL表达式能够正常使用,需要在<%@page 标签里加上isELIgnored=”false”
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 
<c:set var="name" value="${'gareen'}" scope="request" />
 
通过标签获取name: <c:out value="${name}" /> <br>

通过 EL 获取name: ${name}

优先级

  • EL会按照从高到低的优先级顺序获取 pageContext>request>session>application
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 
<c:set var="name" value="${'gareen-pageContext'}" scope="page" />
<c:set var="name" value="${'gareen-request'}" scope="request" />
<c:set var="name" value="${'gareen-session'}" scope="session" />
<c:set var="name" value="${'gareen-application'}" scope="application" />
 
4个作用域都有name,优先获取出来的是  ${name}

实体类

  • JavaBean的标准
    1. 提供无参public的构造方法(默认提供)
    2. 每个属性,都有public的getter和setter
    3. 如果属性是boolean,那么就对应is和setter方法
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false" import="bean.*"%>
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 
<%
	Hero hero =new Hero();
	hero.setName("盖伦");
	hero.setHp(616);
	
	request.setAttribute("hero", hero);
%>
 
英雄名字  ${hero.name} <br>
英雄血量  ${hero.hp}
 

结合

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 
<%
    List<String> heros = new ArrayList<String>();
    heros.add("塔姆");
    heros.add("艾克");
    heros.add("巴德");
    heros.add("雷克赛");
    heros.add("卡莉丝塔");
    request.setAttribute("heros",heros);
%>
 
<table width="200px" align="center" border="1" cellspacing="0">
<tr>
    <td>编号</td>
    <td>英雄</td>
</tr>
   
<c:forEach items="${heros}" var="hero" varStatus="st"  >
    <tr>
        <td>${st.count}</td>
        <td>${hero}</td>
    </tr>
</c:forEach>
</table>

取参

  • EL表达式还可以做到request.getParameter(“name”) 这样的形式获取浏览器传递过来的参数
  • http://127.0.0.1/jstl.jsp?name=abc
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%>

${param.name}

eq

eq相等 ne、neq不相等,
gt大于, lt小于
gt大于, lt小于
gte、ge大于等于 
lte、le 小于等于 
not非 mod求模 
is [not] div by是否能被某数整除 
is [not] even是否为偶数 
is [not] odd是否为奇
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%
request.setAttribute("killNumber", "10");
%>

c:if 的用法运行结果
<c:if test="${killNumber>=10}">
超神
</c:if>
<c:if test="${killNumber<10}">
还没超神
</c:if>
<br>
c:choose 的用法运行结果

<c:choose>
    <c:when test="${killNumber>=10}">
    	超神
	</c:when>
	<c:otherwise>
		还没超神
	</c:otherwise>
</c:choose>
<br>
EL表达式eq的用法运行结果
${killNumber ge 10? "超神":"还没超神" }

本文章参考自:http://how2j.cn


上一篇 java复习servlet

下一篇 java复习MVC

Comments

Content