EL和jstl给了我们在jsp页面中去掉scriptlet的两个有利的武器,我们为什么要在jsp页面中消除
scriptlet?原因在于:scriptlet不利于的页面可读性、可维护性和可重用性.当你看到使用jstl和EL给我们
带来优雅的表示时,我想你一定会决定在jsp页面中消除嵌入的java代码。那就好好学jstl、el和
自定义的tag吧。
Example 1:
(scriptlet形式)
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY BGCOLOR=cyan><FONT size=1>
<%!int i=0;
%>
<%i++;
%>
<P>您是第
<%=i%>
个访问本站的客户。
</BODY>
</HTML>
(jstl和EL形式)
<%@page contentType="text/html;charset=GB2312" %>
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<html>
<body bgcolor="cyan"><font size=4>
<c:set var="sessionCounter" scope="session"
value="${sessionCounter+1}"/>
你是第<b>
<c:out value="${sessionCounter}"/>
</b> 个访问本站的客户。
</font>
</body>
</html>
Example 2
(scriptlet形式):
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY bgcolor=cyan><FONT size=1>
<%!
long continueSum(int n)
{ int sum=0;
for(int i=1;i<=n;i++)
{ sum=sum+i;
}
return sum;
}
%>
<P>1到100的连续和:<BR>
<% long sum;
sum=continueSum(100);
out.print(""+sum);
%>
</BODY>
</HTML>
(jstl和EL形式):
<%@page contentType="text/html;charset=GB2312" %>
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<html>
<body bgcolor=cyan>
<font size=4>
<p>1到100的连续和:<br>
<c:forEach begin="1" end="100" step="1">
<c:set var="number" value="${number+1}" scope="request"/>
<c:set var="sum" value="${sum+number}" scope="request"/>
</c:forEach>
<c:out value="${sum}"/>
</font>
</body>
</html>
Example 3:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.util.*" %>
<MHML>
<BODY bgcolor=cyan>
<Font size=1 >
<BR>客户使用的协议是:
<% String protocol=request.getProtocol();
out.println(protocol);
%>
<BR>获取接受客户提交信息的页面:
<% String path=request.getServletPath();
out.println(path);
%>
<BR>接受客户提交信息的长度:
<% int length=request.getContentLength();
out.println(length);
%>
<BR>客户提交信息的方式:
<% String method=request.getMethod();
out.println(method);
%>
<BR>获取客户的IP地址:
<% String IP=request.getRemoteAddr();
out.println(IP);
%>
<BR>获取客户机的名称:
<% String clientName=request.getRemoteHost();
out.println(clientName);
%>
<BR>获取服务器的名称:
<% String serverName=request.getServerName();
out.println(serverName);
%>
<BR>获取服务器的端口号:
<% int serverPort=request.getServerPort();
out.println(serverPort);
%>
<BR>获取客户端提交的所有参数的名字:
<% Enumeration enum=request.getParameterNames();
while(enum.hasMoreElements())
{String s=(String)enum.nextElement();
out.println(s);
}
%>
<BR>获取头名字的一个枚举:
<% Enumeration enum_headed=request.getHeaderNames();
while(enum_headed.hasMoreElements())
{String s=(String)enum_headed.nextElement();
out.println(s);
}
%>
<BR>获取头文件中指定头名字的全部值的一个枚举:
<% Enumeration enum_headedValues=request.getHeaders("cookie");
while(enum_headedValues.hasMoreElements())
{String s=(String)enum_headedValues.nextElement();
out.println(s);
}
%>
</Font>
</BODY>
</HTML>
(jstl和EL形式)
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<MHML>
<BODY bgcolor=cyan>
<Font size=3 >
<BR>客户使用的协议是:
<c:out value="${pageContext.request.protocol}"/>
<BR>获取接受客户提交信息的页面:
<c:out value="${pageContext.request.servletPath}"/>
<BR>接受客户提交信息的长度:
<c:out value="pageContext.request.contentLength"/>
<BR>客户提交信息的方式:
<c:out value="pageContext.request.method"/>
<BR>获取客户的IP地址:
<c:out value="${pageContext.request.remoteAddr}"/>
<BR>获取客户机的名称:
<c:out value="${pageContext.request.remoteHost}"/>
<BR>获取服务器的名称:
<c:out value="${pageContext.request.serverName}"/>
<BR>获取服务器的端口号:
<c:out value="${pageContext.request.serverPort}"/>
<BR>获取客户端提交的所有参数的名字<br>:
<c:forEach items="${param}" var="p">
<c:out value="${p.key}"/><br>
<c:out value="${p.value}"/><br>
</c:forEach>
<BR>获取头的一个枚举:<br>
<c:forEach items="${headerValues}" var="h">
<c:out value="${h.key}"/><br>
<c:forEach items="${h.value}" var="value">
<br><c:out value="${value}"/>
</c:forEach>
</c:forEach>
<br>获取cookies的内容:<br>
<c:forEach items="${pageContext.request.cookies}" var="c">
<c:out value="${c.name}"/><br>
<c:out value="${c.value}"/><br>
</c:forEach>
</Font>
</BODY>
</HTML>