SpringMVC中JSTL的C标签库以及<c>用法

一、JSTL的C标签库使用

(一)<c:forEach>用于循环遍历,输出所有的元素

使用<c:forEach>要先导入标签库:<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    才可以以使用。

(二)<c:forEach>的参数及用法:

items 用于接收集合对象,

var 定义对象接收从集合里遍历出的每一个元素。同时其会自动转型

begin 定义遍历的开始位置,

end定义遍历的结束位置。begin 和end的引号必须写。

varStatus 表示当前集合的状态,可以访问当前集合元素的信息。

使用方法示例:

<c:forEach var="item" items="${webFrameworkList}">${item}</c:forEach>

循环遍历,输出一个范围类的元素。
<c:foreach items ="${lis}" var = "li " begin="2" end ="12">
${li}
</c:foreach>

(三)varStatus的用法

JSTL中的varStatus和 var 属性一样, varStatus 用于创建限定了作用域的变量。不过,由 varStatus 属性命名的变量并不存储当前索引值或当前元素,而是赋予 javax.servlet.jsp.jstl.core.LoopTagStatus 类的实例。该类定义了一组特性,它们描述了迭代的当前状态。

特性         Getter                       描述current    getCurrent()  当前这次迭代的(集合中的)项

index       getIndex()               当前这次迭代从 0 开始的迭代索引

count       getCount()             当前这次迭代从 1 开始的迭代计数

first          isFirst()                  用来表明当前这轮迭代是否为第一次迭代的标志

last          isLast()                  用来表明当前这轮迭代是否为最后一次迭代的标志

begin      getBegin()             begin 属性值

end         getEnd()                 end 属性值

step        getStep()                step 属性值

使用方法示例:

循环遍历,输出除某个元素以外的元素或输出指定元素。
<c:foreach items="${list}" var ="li" varStatus="status">
<c:if text="${status.count==1}>
${"第一个元素不要"}
</c:if>
${li}
</ c:foreach>							

一、jstl标签介绍:jstl标签是为了解决EL表达式不能循环取出集合对象的问题,是建立在EL表达式基础上的语言,两者之间是互通的,

属于jsp外部的一个标准标签,库导入标签格式为:<%@ taglib uri=”http://Java.sun.com/jsp/jstl/core” prefix=”c” %>

二、各种标签的用法

1、输出<c:out>  语法:

Java代码  

  1. <c:out value="expression" default="expression" escapeXml="boolean"/>  

说明:  该标记对由其 value 属性指定的表达式进行求值,然后打印结果。如果指定了可选属性 default,那么,在对 value 属性的表达式求值所得结果为 null 或空 String 的情况下,<c:out> 将打印其值。  escapeXml 属性也是可选的。它控制当用 <c:out> 标记输出诸如“<”、“>”和“&”之类的字符(在 HTML 和 XML 中具有特殊意义)时是否应该进行转义。如果将 escapeXml 设置为 true,则会自动将这些字符转换成相应的 XML 实体(此处提到的字符分别转换成 &lt;、&gt; 和 &amp;)。  例:

Java代码  收藏代码

  1. <c:out value="${user.company}" escapeXml=="false"/>  

2、赋值<c:set>  语法:

Java代码  收藏代码

  1. <c:set var="name" scope="scope" value="expression"/>  

说明:  <c:set> 操作提供基于标记的机制来创建和设置限制了作用域的变量。其中 var 属性指定了限制了作用域的变量的名称,scope 属性表明了该变量驻留在哪个作用域中,value 属性指定了分配给该变量的值。如果指定变量已经存在,则简单地将所指明的值赋给它。如果不存在,则创建新的限制了作用域的变量,并用该值初始化这个变量。  scope 属性是可选的,其缺省值是 page。  例:

Java代码 收藏代码

  1. <c:set var="timezone" scope="session" value="CST"/>  
  2. <c:set var="square" value="${param['x'] * param['x']}"/>  

3、循环  语法:

Java代码  收藏代码

  1. <c:forEach var="name" items="expression"   
  2. varStatus="name" begin="expression"   
  3. end="expression" step="expression">  
  4.          body content  
  5. </c:forEach>  

说明:  begin 和 end 属性要么是静态整数值,要么是可以得出整数值的表达式。它们分别指定迭代索引的初始值以及迭代索引的终止值。当使用 <c:forEach> 在整数范围内进行迭代时,这两个属性是必需的,而其它所有属性都是可选的。  当出现 step 时,它也必须是整数值。它指定每次迭代后索引的增量。  如果指定了 var 属性,那么将会创建一个带有指定名称的并限定了作用域的变量,并将每次迭代的当前索引值赋给该变量。  items 属性的值应该是一个集合,对该集合的成员进行迭代,通常使用 EL 表达式指定值。  和 var 属性一样, varStatus 用于创建限定了作用域的变量。不过,由 varStatus 属性命名的变量并不存储当前索引值或当前元素,而是赋予 javax.servlet.jsp.jstl.core.LoopTagStatus 类的实例。  例:

Java代码  收藏代码

  1. <table>  
  2.   <c:forEach items=  
  3.     "${entryList}" var="blogEntry" varStatus="status">  
  4.     <tr><td align="left" class="blogTitle">  
  5.       <c:out value="${status.count}"/>.  
  6.       <c:out value="${blogEntry.title}" escapeXml="false"/>  
  7.     </td></tr>  
  8.     <tr><td align="left" class="blogText">  
  9.       <c:out value="${blogEntry.text}" escapeXml="false"/>  
  10.     </td></tr>  
  11.   </c:forEach>  
  12. </table>  

4、If判断  语法:

Java代码  收藏代码

  1. <c:if test="expression" var="name" scope="scope">  
  2.         body content  
  3. </c:if>  

说明:  测试表达式(test属性值)进行求值,接下来,仅当对表达式求出的值为 true 时,它才处理标记的主体内容  <c:if> 通过其 var 和 scope 属性(它们所起的作用和在 <c:set> 中所起的作用一样)选择将测试结果赋给限定了作用域的变量。  例:

Java代码  收藏代码

  1. <table>  
  2.   <c:forEach items=  
  3.     "${entryList}" var="blogEntry" varStatus="status">  
  4.     <c:if test="${status.first}">  
  5.       <tr><td align="left" class="blogDate">  
  6.             <c:out value="${blogEntry.created}"/>  
  7.       </td></tr>  
  8.     </c:if>  
  9.     <tr><td align="left" class="blogTitle">  
  10.       <c:out value="${blogEntry.title}" escapeXml="false"/>  
  11.     </td></tr>  
  12.     <tr><td align="left" class="blogText">  
  13.       <c:out value="${blogEntry.text}" escapeXml="false"/>  
  14.     </td></tr>  
  15.   </c:forEach>  
  16. </table>  

Choose操作语法  语法:

Java代码  

  1. <c:choose>  
  2.   <c:when test="expression">  
  3.     body content  
  4.   </c:when>  
  5.   ...  
  6.   <c:otherwise>  
  7.     body content  
  8.   </c:otherwise>  
  9. </c:choose>  

说明:  每个要测试的条件都由相应的 <c:when> 标记来表示,至少要有一个 <c:when> 标记。只会处理第一个其 test 值为 true 的 <c:when> 标记体内的内容。如果没有一个 <c:when> 测试返回 true ,那么会处理 <c:otherwise> 标记的主体内容。  例:

Java代码  

  1. <c:choose>  
  2.   <c:when test="${pageContext.request.scheme eq 'http'}">  
  3.     This is an insecure Web session.  
  4.   </c:when>  
  5.   <c:when test="${pageContext.request.scheme eq 'https'}">  
  6.     This is a secure Web session.  
  7.   </c:when>  
  8.   <c:otherwise>  
  9.     You are using an unrecognized Web protocol. How did this happen?!  
  10.   </c:otherwise>  
  11. </c:choose>  

<c:url> 操作的语法  语法:

Java代码  

  1. <c:url value="expression" context="expression" var="name" scope="scope">  
  2.   <c:param name="expression" value="expression"/>  
  3.   ...  
  4. </c:url>  

说明:  <c:url> 标记,用于生成 URL。  value 属性用来指定基本 URL,然后在必要时标记对其进行转换。如果这个基本 URL 以一个斜杠开始,那么会在它前面加上 servlet 的上下文名称。可以使用 context 属性提供显式的上下文名称。如果省略该属性,那么就使用当前 servlet 上下文的名称。这一点特别有用,因为 servlet 上下文名称是在部署期间而不是开发期间决定的。(如果这个基本 URL 不是以斜杠开始的,那么就认为它是一个相对 URL,这时就不必添加上下文名称。)  如果通过嵌套 <c:param> 标记指定了任何请求参数,那么将会使用 HTTP GET 请求的标准表示法将它们的名称和值添加到生成的 URL 后面。此外,还进行 URL 编码:为了生成有效的 URL,将对这些参数的名称或值中出现的任何字符适当地进行转换。  例:

Java代码  

  1. <a href="<c:url value='/content/sitemap.jsp'/>">View sitemap</a>  
  2. <c:url value="/content/search.jsp">  
  3.   <c:param name="keyword" value="${searchTerm}"/>  
  4.   <c:param name="month" value="02/2003"/>  
  5. </c:url>  

<c:redirect> 操作的语法  语法:

Java代码  

  1. <c:redirect url="expression" context="expression">  
  2.   <c:param name="expression" value="expression"/>  
  3.   ...  
  4. </c:redirect>  

说明:  <c:redirect>用于向用户的浏览器发送 HTTP 重定向响应,它是 JSTL 中与 javax.servlet.http.HttpServletResponse 的 sendRedirect() 方法功能相当的标记。  例:

Java代码  

  1. <c:catch var="exception">  
  2.   <c:import url="ftp://ftp.example.com/package/README"/>  
  3. </c:catch>  
  4. <c:if test="${not empty exception}">  
  5.   <c:redirect url="/errors/remote.jsp"/>  
  6. </c:if>  

所有使用c标签的过程中,使用了var属性,代表保存了该数据,则都可以通过EL表达式取出,${var的变量名}。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
抱歉,我是一个语言模型AI,无法提供完整的代码。但我可以给你提供一个简单的 Maven 项目示例,你可以根据自己的需求进行修改和完善。 1. 创建 Maven 项目,添加所需的依赖 在 pom.xml 文件添加以下依赖: ```xml <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- SpringMVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- MySQL 数据驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- CXF --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency> <!-- JSTL 标签 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> <!-- 版本号 --> <properties> <spring.version>5.1.9.RELEASE</spring.version> <mybatis.version>3.5.2</mybatis.version> <mysql.version>8.0.17</mysql.version> <cxf.version>3.2.6</cxf.version> </properties> ``` 2. 配置 Spring 配置文件 在 src/main/resources 目录下创建 spring-config.xml 文件,配置 MySQL 数据源和 MyBatis 的配置、事务管理器的配置、CXF 的配置等。 ```xml <!-- 数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC" /> <property name="username" value="root" /> <property name="password" value="123456" /> </bean> <!-- MyBatis 配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean> <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper" /> </bean> <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- CXF 配置 --> <jaxws:endpoint id="userService" implementor="com.example.service.UserService" address="/user" /> <jaxws:client id="userClient" serviceClass="com.example.service.UserService" address="http://localhost:8080/user" /> <!-- 开启注解支持 --> <context:annotation-config /> <mvc:annotation-driven /> <tx:annotation-driven /> ``` 3. 创建实体类和相应的 Mapper 接口 在 src/main/java 目录下创建 User 实体类和 UserMapper 接口。 User.java ```java public class User { private Integer id; private String name; private Integer age; // 省略 getter 和 setter 方法 } ``` UserMapper.java ```java public interface UserMapper { User getUserById(Integer id); List<User> getAllUsers(); void addUser(User user); void updateUser(User user); void deleteUser(Integer id); } ``` 4. 创建 Service 层 在 src/main/java 目录下创建 UserService 接口和 UserServiceImpl 实现类,调用 Mapper 层的方法进行数据操作。 UserService.java ```java public interface UserService { User getUserById(Integer id); List<User> getAllUsers(); void addUser(User user); void updateUser(User user); void deleteUser(Integer id); } ``` UserServiceImpl.java ```java @Service @Transactional public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getUserById(Integer id) { return userMapper.getUserById(id); } @Override public List<User> getAllUsers() { return userMapper.getAllUsers(); } @Override public void addUser(User user) { userMapper.addUser(user); } @Override public void updateUser(User user) { userMapper.updateUser(user); } @Override public void deleteUser(Integer id) { userMapper.deleteUser(id); } } ``` 5. 创建 Controller 层 在 src/main/java 目录下创建 UserController 类,使用 SpringMVC 实现请求的映射和响应的处理。 UserController.java ```java @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/get") @ResponseBody public User getUserById(@RequestParam("id") Integer id) { return userService.getUserById(id); } @RequestMapping("/add") @ResponseBody public String addUser(@RequestBody User user) { userService.addUser(user); return "success"; } // 省略其他方法 } ``` 6. 配置 CXF 的服务端和客户端 在 spring-config.xml 已经配置了 CXF 的服务端和客户端。 7. 创建 JSP 页面 在 src/main/webapp 目录下创建 index.jsp 页面,使用 JSTL 标签和 EL 表达式实现页面的渲染。 index.jsp ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>User List</title> </head> <body> <table border="1"> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> <c:forEach items="${userList}" var="user"> <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.age}</td> </tr> </c:forEach> </table> </body> </html> ``` 8. 部署项目到 Web 容器 将项目打包成 war 包,部署到 Tomcat 等 Web 容器,访问 index.jsp 页面,测试项目是否正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一位远方的诗人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值