JSTL(JSP Standard Tag Library)JSP 标准标签库
业务数据从后端传递到前端,前端需要对他们进行处理展示,遍历
JSP 的特点是将HTML代码和java代码混合在一起
<% %> 符号以内的是Java代码,符号以外的是html代码
允许分割获取,比如获取数组的时候
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("重写的doGet方法,下面是业务逻辑");
// 获取到url中的query参数
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
req.setAttribute("list",list);
// 设置请求转发路径,跳转到page.jsp
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/page.jsp");
// 请求转发
requestDispatcher.forward(req,resp);
}
<h1>Hello</h1>
<h1>${list}</h1>
<%
List<String> list = (List<String>) request.getAttribute("list");
for (int i = 0; i <list.size() ; i++) {
%>
<h1><%=list.get(i)%></h1>
<%
}
%>
直接通过EL表达式获取的时候
${list}
,输出的是[张三, 李四, 王五]而下面的for循环分割输出的是三个h1标签的内容
如果需要访问类的属性呢,创建一个类:
name:公有,其它的私有
public class User {
public String name;
private String password;
private String email;
public User(String name, String password, String email) {
this.name = name;
this.password = password;
this.email = email;
}
@Override
public String
toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
'}';
}
}
将user存入request
User user = new User("赵六", "123456", "[email protected]");
req.setAttribute("user",user);
用EL表达式访问
${user}
${user.name}
${user.password}
报错:
未找到属性PropertyNotFoundException方法
咦?为什么公有的也访问不到呢
其实jsp在编译的时候就会将user.name换成user.getName()方法,其实是调用的属性的get方法
我们将get方法加入User进去试试呢
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public String getEmail() {
return email;
}
可以看见访问到了name和password属性
为了我们的简化编写出现的一个工具,比如我们要写一个表格的形式,那数据太难拼接了吧
1、提供了一组标准标签
2、可用于编写各种动态功能
<h1>Hello</h1>
<table>
<tr>
<td>姓名</td>
<td>密码</td>
<td>邮箱</td>
</tr>
<%
List<User> list = (List<User>) request.getAttribute("list");
for (User user : list) {
%>
<tr>
<td><%=user.getName()%></td>
<td><%=user.getPassword()%></td>
<td><%=user.getEmail()%></td>
</tr>
<%
}
%>
List<String> list = new ArrayList<>();
req.setAttribute("list",list);
User user1 = new User("赵六", "123456", "[email protected]");
User user2 = new User("张三", "234567", "[email protected]");
User user3 = new User("李四", "345678", "[email protected]");
list.add(user1.name);
list.add(user2.name);
list.add(user3.name);
req.setAttribute("list",list);
添加多个对象进request
Jstl写法:
<h1>Hello</h1>
<table>
<tr>
<td>姓名</td>
<td>密码</td>
<td>邮箱</td>
</tr>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.name}</td>
<td>${user.password}</td>
<td>${user.email}</td>
</tr>
</c:forEach>
</table>
set、out、remove、catch
set:向作用域(request)中添加一个数据
添加数据并取出
<c:set var="test" value="欧克"></c:set>
<h1>${test}</h1>
更新数据从已经存在的变量
<%
User user2 =new User("shuwu","123","[email protected]")
%>
<c:set value="java" property="name" target="user2"></c:set>
<%
int a = 1/0;
%>
如果num1>num2 ,则输出num1
${num1}
遍历数字列表
第${status.count}项: ${num}
格式化示例
<%
pageContext.setAttribute("date", new java.util.Date());
pageContext.setAttribute("price", 1234567.89);
%>
当前时间:
价格格式化:
字符串处理
字符串长度: ${fn:length(text)}
包含"JSTL"? ${fn:contains(text, 'JSTL')}
分割字符串:
${word},