1、核心标签: C
<c:set var="name" value="zhangsan" scope="page"></c:set><br>
${name }
<c:redirect url="LoginServlet">
<c:param name="id" value="1"></c:param>
</c:redirect>
C标签比较核心的是forEach和if标签
格式化FMT标签:
日期格式化:
<fmt:formatDate value="<%=new Date() %>" pattern="yyyy-MM-dd"/>
<p>日期格式化 (1): <fmt:formatDate type="time"
value="${now}" /></p>
<p>日期格式化 (2): <fmt:formatDate type="date"
value="${now}" /></p>
<p>日期格式化 (3): <fmt:formatDate type="both"
value="${now}" /></p>
<p>日期格式化 (4): <fmt:formatDate type="both"
dateStyle="short" timeStyle="short"
value="${now}" /></p>
<p>日期格式化 (5): <fmt:formatDate type="both"
dateStyle="medium" timeStyle="medium"
value="${now}" /></p>
<p>日期格式化 (6): <fmt:formatDate type="both"
dateStyle="long" timeStyle="long"
value="${now}" /></p>
<p>日期格式化 (7): <fmt:formatDate pattern="yyyy-MM-dd"
value="${now}" /></p>
<p>格式化数字 (1): <fmt:formatNumber value="${balance}"
type="currency"/></p>
<p>格式化数字 (2): <fmt:formatNumber type="number"
maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化数字 (3): <fmt:formatNumber type="number"
maxFractionDigits="3" value="${balance}" /></p>
<p>格式化数字 (4): <fmt:formatNumber type="number"
groupingUsed="false" value="${balance}" /></p>
<p>格式化数字 (5): <fmt:formatNumber type="percent"
maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化数字 (6): <fmt:formatNumber type="percent"
minFractionDigits="10" value="${balance}" /></p>
<p>格式化数字 (7): <fmt:formatNumber type="percent"
maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化数字 (8): <fmt:formatNumber type="number"
pattern="###.###E0" value="${balance}" /></p>
jstl实现国际化:
<fmt:setLocale value="${param.word }"/>
<fmt:bundle basename="Message">
<a href="<%=path%>jsp/jst3.jsp?word=zh_CN">中文版</a>
<a href="<%=path%>jsp/jst3.jsp?word=en_US">English</a>
<br><br>
<form action="?" method="post">
<fmt:message key="login"/>:<input type="text"> <br>
<fmt:message key="pwd"/>:<input type="password"> <br>
<input type="submit" value="<fmt:message key="btn"/>"> <br>
</form>
</fmt:bundle>
c标签主要是用于页面布局及展示数据使用
fmt标签主要是用于格式化一些数据使用
fn标签主要是用于进行我们的字符串处理使用
fn主要是就是一些针对字符串操作的函数,我们js、java都已经大量使用过了,所以很简单,只是使用的方式需要注意一下
OK
${fn:substring(data,0,3) }
剩下的sql标签和xml标签,已经基本不使用了,因为有更好的框架来替代他们,
我们只需要了解
sql标签:一组可以操作数据库数据的标签
xml标签:一组可以对xml进行生成、解析的标签
什么是xml:xml是一种标准的数据格式:用于网络之间传输数据使用
<duogediannao>
<diannao>
<x>ThinkpadT400<x>
<yanse>黑色</yanse>
<zhongliang>120</zhongliang>
</dinnao>
<diannao>
<xinghao>123<xinghao>
<yanse>黑色</yanse>
<zhongliang>120</zhongliang>
</dinnao>
<duogediannao>
jsp实现页面分页
页面<!-- 一页只显示3条 -->
<a href="<%=path%>servlet/StoreListServlet?page=${page-1}">上一页</a>
<a>${page }</a>
<a href="<%=path%>servlet/StoreListServlet?page=${page+1}">下一页</a>``
servlet代码:
//获取参数
String page = request.getParameter(“page”);
//调用dao完成功能
StoreDao dao = new StoreDao();
ArrayList<Store> list = dao.storeList(page);
//跳转页面
request.setAttribute("list", list);
request.setAttribute("page", page);
request.getRequestDispatcher("../jsp/storeList.jsp").forward(request, response);
dao代码:
public ArrayList storeList(String page) {
ArrayList list = new ArrayList();
Connection conn = null;
PreparedStatement pre = null;
ResultSet rs = null;
String sql = “select * from store limit ?, 3”;
int num = Integer.parseInt(page);
int start = (num-1) * 3;
/**
* select * from store limit 3,3
* 第一页 0 - 3
* 第二页 3 - 3
* 第三页 6
* 第四页 9
* 第五页 12
*
* (页数-1) * 3
*
*/
try {
conn = DBUtils.getConn();
pre = conn.prepareStatement(sql);
pre.setInt(1, start);
rs = pre.executeQuery();
Store g = null;
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String statu = rs.getString("statu");
Date createDate =rs.getDate("createDate");
int leval = rs.getInt("leval");
String userName = rs.getString("userName");
String address = rs.getString("address");
String phone = rs.getString("phone");
g = new Store(id, name, userName, leval, address, phone, statu, createDate);
list.add(g);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtils.closeDB(conn, pre, rs);
}
return list;
}
“`
解决上一页和下一页可以错误点击的BUG:
上一页是0还是可以点击,下一页已经没有数据了。但还是可以点击
我们编码的原则是能在客户端拦截就在客户端拦截,不要访问服务器,增加服务器压力