1.JSP标签
JSP(JavaServer Pages)标签是用于在JSP页面中插入Java代码和动态内容的特殊标记。
常用的JSP标签:
<% ... %>:JSP脚本标签,用于插入Java代码块。
<%= ... %>:JSP表达式标签,用于在页面中输出Java表达式的结果。
<%@ ... %>:JSP指令标签,用于指定页面的属性和配置信息,例如导入Java类、设置页面的编码等。
<jsp:include>:用于在当前页面中包含其他页面或文件。
<jsp:forward>:用于将请求转发到其他页面或URL。
使用forward:
<jsp:forward page = "d2.jsp"/>
也可以在转发的时候携带参数:
<jsp:forward page = "d2.jsp"> <jsp:param name = "name" value = "Freya"/> <jsp:param name = "mood" value = "awesome"/> </jsp:forward>
然后在转发过去的页面接收参数:
<%= request.getParameter("name") %> <%= request.getParameter("mood") %>
2.JSTL标签
JSTL标签的出现为了弥补HTML的不足,这些标签的功能和java代码一样。使用JSTL可以使JSP页面的代码更加简洁、易读和可维护。
JSTL(JSP Standard Tag Library)是一个标准的JSP标签库,为JSP页面提供了一组可重用的标签和函数,用于简化和增强JSP页面的开发。
它由一组自定义标签和函数组成,可以用于处理逻辑、控制流程、格式化数据、访问数据库等常见的任务。
JSTL提供了以下几个主要的标签库:
- Core标签库(`<c:>`):提供了一些基本的标签,用于控制流程、迭代、条件判断等。
- Formatting标签库(`<fmt:>`):提供了一些标签,用于格式化日期、时间、数字等数据。
- SQL标签库(`<sql:>`):提供了一些标签,用于执行SQL查询和操作数据库。
- XML标签库(`<x:>`):提供了一些标签,用于处理XML文档和数据。
3.JSTL标签的使用
下面是一个简单的示例:
取到表单中的输入框的值,然后做一个简单的If判断,输出对应内容
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<h2>D3 Sunday!</h2>
<form action="d3.jsp" method = "get">
flower name: <input type="text" name="flower" value = "${param.flower}">
<br>
<input type="submit" value="log in">
</form>
<c:if test="${param.flower=='sun'}" var="isSun">
<c:out value = "This is a sunflower"/>
</c:if>
<c:out value ="${isSun}"/>
</body>
</html>
我写的时候一直报这个错误:
根据标记文件中的TLD或attribute指令,attribute[value]不接受任何表达式
其实就是引入标签库那里版本不对:
JSTL 1.0 的声明是:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core " %>JSTL1.1以后 的声明是:
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core %>
我用的jstl是1.2,所以要用第二个声明
JSTL标签的功能和java一样,所以java有的语句它都有,比如for循环:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.ArrayList" %>
<html>
<body>
<%
ArrayList<String> list = new ArrayList<>();
list.add("tulip");
list.add("balsam");
list.add("sweet pea");
list.add("lily");
request.setAttribute("list", list);
%>
<c:forEach var="flower" items="${list}">
<c:out value="${flower}"/>
<br>
</c:forEach>
</body>
</html>
需要注意的是,要使用ArrayList是要用page指令引入对应的包的。
在JSTL中也不能直接使用<%%>内的java代码定义的变量,而是要把变量放到page或request或session或application中。
再在JSTL中用EL表达式${}去取。