1、使用JSTL,Servlet最低版本:2.4,查看Servlet版本方式:web.xml
2、JSTL可以操作数据库,XML
3、表达式一:EL表达式:
Action
Actionpublic ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //普通字符串 request.setAttribute("hello", "hello world"); //结构 Group group = new Group(); group.setName("和盈"); User user = new User(); user.setUsername("张三"); user.setAge(18); user.setGroup(group); request.setAttribute("user", user); //map Map mapValue = new HashMap(); mapValue.put("key1", "value1"); mapValue.put("key2", "value2"); request.setAttribute("mapvalue", mapValue); //字符串数组 String[] strArray = new String[]{"a", "b", "c"}; request.setAttribute("strarray", strArray); User[] users = new User[10]; for (int i=0; i<10; i++) { User u = new User(); u.setUsername("U_" + i); users[i] = u; } request.setAttribute("users", users); List userList = new ArrayList(); for (int i=0; i<10; i++) { User uu = new User(); uu.setUsername("UU_" + i); userList.add(uu); } request.setAttribute("userlist", userList); //empty request.setAttribute("value1", null); request.setAttribute("value2", ""); request.setAttribute("value3", new ArrayList()); request.setAttribute("value4", "123456"); return mapping.findForward("success"); }
Struts1配置
<action path="/jstlel" type="com.aowin.struts.JstlElAction"> <forward name="success" path="/jstl_el.jsp" /> </action>
JSP:
<h1>测试EL表达式</h1><br> <hr> <li>普通字符串</li><br> hello(jsp脚本):<%=request.getAttribute("hello") %><br> hello(el表达式,el表达式的使用方法$和{}):${hello }<br> hello(el表达式,el的隐含对象pageScope,requestScope,sessionScope,applicationScope,<br> 如果未指定scope,它的搜索顺序为pageScope~applicationScope):${requestScope.hello }<br> hello(el表达式,scope=session):${sessionScope.hello }<br> <p> <li>结构,采用.进行导航,也称存取器</li><br> 姓名:${user.username }<br> 年龄:${user.age }<br> 所属组:${user.group.name }<br> <p> <li>输出map,采用.进行导航,也称存取器</li><br> mapvalue.key1:${mapvalue.key1 }<br> mapvalue.key2:${mapvalue.key2 }<br> <p> <li>输出数组,采用[]和下标</li><br> strarray[2]:${strarray[1] }<br> <p> <li>输出对象数组,采用[]和下标</li><br> userarray[3].username:${users[2].username }<br> <p> <li>输出list,采用[]和下标</li><br> userlist[5].username:${userlist[4].username }<br> <p> <li>el表达式对运算符的支持</li><br> 1+2=${1+2 }<br> 10/5=${10/5 }<br> 10 div 5=${10 div 5 }<br> 10%3=${10 % 3 }<br> 10 mod 3=${10 mod 3 }<br> <!-- ==/eq !=/ne </lt >/gt <=/le >=/ge &&/and ||/or !/not //div %/mod --> <li>测试empty</li><br> value1:${empty value1 }<br> value2:${empty value2 }<br> value3:${empty value3 }<br> value4:${empty value4 }<br> value4:${!empty value4 }<br> 结果: value1:true value2:true value3:true value4:false value4:true
4、表达式二:JSTL核心库:
jstl标签库的配置
* 将jstl.jar和standard.jar拷贝到WEB-INF/lib下(如果使用el表达式,不用拷贝这两个jar)
注意:jstl必须在能够支持j2ee1.4/servlet2.4/jsp2.0版本上的容器才能运行,这个环境是3年前较为常用的环境
Group类:成员属性:name
User类:成员属性:username、age、group
Action:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //普通属性 request.setAttribute("hello", "Hello World"); //测试条件控制标签 request.setAttribute("v1", 1); request.setAttribute("v2", 2); request.setAttribute("v3", new ArrayList()); request.setAttribute("v4", "test"); //html文本 request.setAttribute("sh", "<font color='red'>上海欢迎您</font>"); //测试c:forEach Group group = new Group(); group.setName("和盈"); List userList = new ArrayList(); for (int i=0; i<10; i++) { User user = new User(); user.setUsername("user_" + i); user.setAge(18+i); user.setGroup(group); userList.add(user); } request.setAttribute("userlist", userList); //测试循环输出map Map map = new HashMap(); map.put("k1", "v1"); map.put("k2", "v2"); request.setAttribute("mapvalue", map); //测试c:forTokens request.setAttribute("strTokens", "1,2,3,4,5,6"); return mapping.findForward("success"); }
Struts1配置文件:
<action path="/jstlcore" type="com.aowin.struts.JstlCoreAction"> <forward name="success" path="/jstl_core.jsp" /> </action>
页面显示:
<h1>测试jstl核心库</h1> <hr> <li>测试c:out</li><br> hello(default):<c:out value="${hello}"/><br> hello(el表达式):${hello }<br> hello(default="123"):<c:out value="${abc}" default="123"/><br> <!-- 去不到就为空串 --> hello(default="123"):<c:out value="${abc}">123</c:out><br> sh(defalut):<c:out value="${sh}"/><br> <!-- 取scope里东西value里面要用el表达式 --> bj(escapeXml="true"):<c:out value="${sh}" escapeXml="true"/><br> bj(escapeXml="false"):<c:out value="${sh}" escapeXml="false"/><br> bj(el表达式):${sh }<br> <p> <li>测试c:set和c:remove</li><br> <!-- 生命一个变量 默认scope为page --> <c:set value="123" var="temp"/> temp:${temp }<br> <c:remove var="temp"/> temp:${temp }<br> <p> <li>测试条件控制标签c:if</li><br> <c:if test="${v1 lt v2}" var="v"> v1小于v2<br>v=${v }<br> </c:if> <!-- 为空或者为null test结果都为true --> <c:if test="${empty v3}"> v3为空<br> </c:if> <c:if test="${empty v4}"> v4为空<br> </c:if> <p> <li>测试条件控制标签c:choose,c:when,c:otherwise</li><br> <!-- when 1个或者多个 --> <!--otherwise 0个或者1个 --> <!-- if() else if() else if() else() --> <c:choose> <c:when test="${v2 gt v1}"> v1小于v22<br> </c:when> <c:when test="${v1 lt v2}"> v1小于v23<br> </c:when> <c:otherwise> v1大于v2<br> </c:otherwise> </c:choose> <c:choose> <c:when test="${empty v4}"> v4为空<br> </c:when> <c:otherwise> v4不为空<br> </c:otherwise> </c:choose> <p> <li>测试循环控制标签c:forEach</li><br> <table border="1"> <tr> <td>姓名</td> <td>年龄</td> <td>所属组</td> </tr> <c:choose> <c:when test="${empty userlist}"> <tr> <td colspan="3">没有符合条件的数据!</td> </tr> </c:when> <c:otherwise> <c:forEach items="${userlist}" var="u"> <tr> <td>${u.username }</td> <td>${u.age }</td> <td>${u.group.name }</td> </tr> </c:forEach> </c:otherwise> </c:choose> </table> <p> <li>测试循环控制标签c:forEach,varstatus</li><br> <table border="1"> <tr> <td>姓名</td> <td>年龄</td> <td>所属组</td> </tr> <c:choose> <c:when test="${empty userlist}"> <tr> <td colspan="3">没有符合条件的数据!</td> </tr> </c:when> <c:otherwise> <%--varStatus:变量状态 --%> <c:forEach items="${userlist}" var="user" varStatus="vs"> <c:choose> <c:when test="${vs.count % 2 == 0}"> <tr bgcolor="red"> </c:when> <c:otherwise> <tr> </c:otherwise> </c:choose> <td> <c:out value="${user.username}"/> </td> <td> <c:out value="${user.age}"/> </td> <td> <c:out value="${user.group.name}"/> </td> </tr> </c:forEach> </c:otherwise> </c:choose> </table> <p> <li>测试循环控制标签c:forEach,begin,end,step</li><br> <table border="1"> <tr> <td>姓名</td> <td>年龄</td> <td>所属组</td> </tr> <c:choose> <c:when test="${empty userlist}"> <tr> <td colspan="3">没有符合条件的数据!</td> </tr> </c:when> <c:otherwise> <c:forEach items="${userlist}" var="user" begin="2" end="8" step="2"> <tr> <td>${user.username}</td> <td>${user.age}</td> <td>${user.group.name }</td> </tr> </c:forEach> </c:otherwise> </c:choose> </table> <p> <li>测试循环控制标签c:forEach,普通循环</li><br> <c:forEach begin="1" end="10"> a<br> </c:forEach> <p> <li>测试循环控制标签c:forEach,输出map</li><br> <!-- v:entity对象 --> <c:forEach items="${mapvalue}" var="v"> ${v.key }=${v.value }<br> </c:forEach> <p> <li>测试循环控制标签c:forTokens(逗号间隔或者其他符号间隔的输出)</li><br> <c:forTokens items="${strTokens}" delims="," var="v"> ${v }<br> </c:forTokens> <p> <li>测试c:catch</li><br> <% try { Integer.parseInt("asdfsdf"); }catch(Exception e) { out.println(e.getMessage()); } %> <p> <!-- var:放异常信息的变量 --> <c:catch var="exinfo"> <% Integer.parseInt("asdfsdf"); %> </c:catch> ${exinfo }<br> <p> <!-- 相当于include --> <li>测试c:import</li><br> <c:import url="http://icafebar-pc:8080/struts0400_jstl/"/> <p> <li>测试c:url和c:param</li><br> <!-- 生成一个url串 --> <c:url value="http://www.baidu.com" var="v"> <c:param name="username" value="Jack"/> <c:param name="age" value="20"/> </c:url> ${v }<br> <li>测试:redirect</li><br> <%--如果不用context 则url里面写全路径 <c:redirect context="/struts0400_jstl" url="/index.jsp"/> --%>
页面显示效果:
测试jstl核心库 测试c:out hello(default):Hello World hello(el表达式):Hello World hello(default="123"):123 hello(default="123"):123 sh(defalut):<font color='red'>上海欢迎您</font> bj(escapeXml="true"):<font color='red'>上海欢迎您</font> bj(escapeXml="false"):上海欢迎您 bj(el表达式):上海欢迎您 测试c:set和c:remove temp:123 temp: 测试条件控制标签c:if v1小于v2 v=true v3为空 测试条件控制标签c:choose,c:when,c:otherwise v1小于v22 v4不为空 测试循环控制标签c:forEach 姓名 年龄 所属组 user_0 18 和盈 user_1 19 和盈 user_2 20 和盈 user_3 21 和盈 user_4 22 和盈 user_5 23 和盈 user_6 24 和盈 user_7 25 和盈 user_8 26 和盈 user_9 27 和盈 测试循环控制标签c:forEach,varstatus 姓名 年龄 所属组 user_0 18 和盈 user_1 19 和盈 user_2 20 和盈 user_3 21 和盈 user_4 22 和盈 user_5 23 和盈 user_6 24 和盈 user_7 25 和盈 user_8 26 和盈 user_9 27 和盈 测试循环控制标签c:forEach,begin,end,step 姓名 年龄 所属组 user_2 20 和盈 user_4 22 和盈 user_6 24 和盈 user_8 26 和盈 测试循环控制标签c:forEach,普通循环 a a a a a a a a a a 测试循环控制标签c:forEach,输出map k1=v1 k2=v2 测试循环控制标签c:forTokens(逗号间隔或者其他符号间隔的输出) 1 2 3 4 5 6 测试c:catch For input string: "asdfsdf" java.lang.NumberFormatException: For input string: "asdfsdf" 测试c:import 测试JSTL 测试EL表达式 测试jstl核心库 测试jstl格式化库 测试jstl函数库 测试c:url和c:param http://www.baidu.com?username=Jack&age=20 测试:redirect