javaweb之jstl标签库

JSTL标签库

Apache提供的标签库,
jar包:jstl-1.2.jar,如果傅MyEclipse,它会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入。


导入JSTL核心标签库
<%taglib prefix=“c” uri=“http://java.sun.com/jstl/core”%>

<c:set>

  • <c:set var=“a” value=“hello”/> 创建名为a,值为hello的域属性,范围:page
  • <c:set var=“a” value=“hello” scope=“session”/> 范围为session

<c:out>

  • <c:out value=“aaa”/> 输出字符串aaa
  • <c:out value="KaTeX parse error: Expected '}', got 'EOF' at end of input: …/> 输出域属性aaa,其中与{aaa}相同
  • <c:out value=" a a a &quot; d e f a u l t = &quot; x x x &quot; / &gt; 如 果 {aaa}&quot; default=&quot;xxx&quot;/&gt;如果 aaa"default="xxx"/>{aaa}不存在,那么输出xxx字符串
  • <c:out value=" a a a &quot; e s c a p e X m l = &quot; t r u e &quot; / &gt; 如 果 {aaa}&quot; escapeXml=&quot;true&quot;/&gt;如果 aaa"escapeXml="true"/>{aaa}中包含特殊字符,那么转义它。这可以防止javascript攻击

<c:remove>

  • <c:remove var=“a”/> 删除名为a的域属性
  • <c:remove var=“a” scope=“page”/> 删除page域中名为a的域属性

<c:url>

  • <c:url value="/AServlet"/> 输出URL:/项目名/AServlet
  • <c:url value="/AServlet" var=“url” scope=“page”/> 把生成的url保存到page域中,而不会输出
  • <c:url value="/AServlet">:输出URL:/项目名/AServlet?username=%xx%xx%xx%xx%xx%xx,其中张三会被URL编码
    <c:param name=“username” value=“张三”/>
    </c:url/>

<c:if>

  • <c:if test="${条件}"> 当条件为true时执行标签体内容
    hello
    </c:if>

<c:choose>

  • <c:choose>
    <c:when test=" 条 件 1 &quot; &gt; a &lt; / c : w h e n &gt; &lt; c : w h e n t e s t = &quot; {条件1}&quot;&gt;a&lt;/c:when&gt; &lt;c:when test=&quot; 1">a</c:when><c:whentest="{条件2}">b</c:when>
    <c:when test="${条件3}">c</c:when>
    <c:otherwise>d</c:otherwise>
    </c:choose>

    等同与:
    if() {
    } esle if() {
    } esle if() {
    } else if() {
    } else {
    }


<c:forEach>

可以用来遍历数组、List、Map、

  1. 计数循环

<c:forEach begin=“1” end=“10” var=“i”>
${i}
</c:forEach>
等同于
for(int i = 1; i <= 10; i++) {
out.println(i);
}

<c:forEach begin=“1” end=“10” var=“i” step=“2”>
${i}
</c:forEach>
等同于
for(int i = 1; i <= 10; i+=2) {
out.println(i);
}


  1. 遍历数组

<%
String[] names = {“zhangSan”, “liSi”, “wangWu”, “zhaoLiu”};
pageContext.setAttribute(“ns”, names);
%>
<c:forEach var=“item " items=”${ns } ">
<c:out value="name: ${item } "/>

</c:forEach>


  1. 遍历List

<%
List names = new ArrayList();
names.add(“zhangSan”);
names.add(“liSi”);
names.add(“wangWu”);
names.add(“zhaoLiu”);
pageContext.setAttribute(“ns”, names);
%>
<c:forEach var=“item” items="${ns }">
<c:out value=“name: ${item }”/>

</c:forEach>


  1. 遍历Map

<%
Map<String,String> stu = new LinkedHashMap<String,String>();
stu.put(“number”, “N_1001”);
stu.put(“name”, “zhangSan”);
stu.put(“age”, “23”);
stu.put(“sex”, “male”);
pageContext.setAttribute(“stu”, stu);
%>
<c:forEach var=“item " items=” s t u &quot; &gt; &lt; c : o u t v a l u e = &quot; {stu }&quot;&gt; &lt;c:out value=&quot; stu"><c:outvalue="{item.key }: ${item.value } "/>

</c:forEach>


  1. 循环状态对象

循环状态对象是用来说明循环的状态的,属性如下:
count:int类型,当前以遍历元素的个数;
index:int类型,当前元素的下标;
first:boolean类型,是否为第一个元素;
last:boolean类型,是否为最后一个元素;
current:Object类型,表示当前项目。

<c:forEach var=“item” items=" n s &quot; v a r S t a t u s = &quot; v s &quot; &gt; &lt; c : i f t e s t = &quot; {ns }&quot; varStatus=&quot;vs&quot; &gt; &lt;c:if test=&quot; ns"varStatus="vs"><c:iftest="{vs.first } “>第一行:</c:if>
<c:if test=” v s . l a s t &quot; &gt; 最 后 一 行 : &lt; / c : i f &gt; &lt; c : o u t v a l u e = &quot; 第 {vs.last } &quot;&gt;最后一行:&lt;/c:if&gt; &lt;c:out value=&quot;第 vs.last"></c:if><c:outvalue="{vs.count } 行: “/>
<c:out value=”[${vs.index } ]: "/>
<c:out value="name: ${vs.current } "/>

</c:forEach>


导入JSTL格式化标签库

<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>

<%
Date date = new Date();
pageContext.setAttribute(“d”, date);
%>
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss "/>


<%
double d1 = 3.5;
double d2 = 4.4;
pageContext.setAttribute(“d1”, d1);
pageContext.setAttribute(“d2”, d2);
%>
<fmt:formatNumber value=" d 1 &quot; p a t t e r n = &quot; 0.00 &quot; / &gt; &lt; b r / &gt; &lt; f m t : f o r m a t N u m b e r v a l u e = &quot; {d1 }&quot; pattern=&quot;0.00 &quot;/&gt;&lt;br/&gt; &lt;fmt:formatNumber value=&quot; d1"pattern="0.00"/><br/><fmt:formatNumbervalue="{d2 }" pattern="#.## "/>

  • pattern:0.00,表示小数不足两位时,使用0补足两位
  • pattern:#.##,表示小数不足两位时,有几位显示几位,不会补足

============================

============================

自定义标签

自定义标签:

  1. 实现Tag接口,即传统标签。不建议使用!
  2. 实现SimpleTag接口,即简单标签。建议使用!

JavaWeb中还提供了SimpleTagSupport类,继承它要比实现SimpleTag接口方便。


步骤:

  1. 标签处理类:继承SimpleTagSupport类
    public class HelloTag extends SimpleTagSupport {
    public void doTag() throws JspException, IOException {
    // 获取JspContext对象,再获取out对象,再向页面输出
    // 获取到的JspContext其实就是当前页面的pageContext对象
    this.getJspContext().getOut().write(“

    Hello SimpleTag!

    ”) ;
    }
    }
  2. 标签描述符文件(tld)

/WEB-INF/tlds/itcast.tld

<?xml version="1.0" encoding="UTF-8"?>

<tlib-version>1.0</tlib-version> 
<short-name>itcast</short-name> 
<uri>http://www.itcast.cn/tags</uri> 
<tag> 
	<name>hello</name> <!--标签名称-->
	<tag-class>cn.itcast.tag.HelloTag</tag-class> <!--标签处理类名称-->
	<body-content>empty</body-content> <!--标签体为空,即空标签-->
</tag>
  1. jsp页面中使用自定义标签

<%@ taglib prefix=“it” uri="/WEB-INF/hello.tld" %>

it:hello/


有标签体的标签

  1. 标签处理类
    public class HelloTag extends SimpleTagSupport {
    public void doTag() throws JspException, IOException {
    PageContext pc = (PageContext) this.getJspContext();
    HttpServletRequest req = (HttpServletRequest) pc.getRequest();
    String s = req.getParameter(“exec”);
    if(s != null && s.endsWith(“true”)) {
    // 获取标签体对象
    JspFragment body = this.getJspBody() ;
    // 执行标签体
    body.invoke (null);
    }

    }
    }

  2. tld

    hello cn.itcast.tags.HelloTag scriptless

不执行标签下面的页面内容

public void doTag() throws JspException, IOException {
	this.getJspContext().getOut().print("<h1>只能看到我!</h1>");
	throw new SkipPageException();
}

带有属性的标签

public class IfTag extends SimpleTagSupport {
private boolean test;//设置属性,提供getter/setter方法
public boolean isTest() {
return test;
}
public void setTest (boolean test) {
this.test = test;
}
@Override
public void doTag() throws JspException, IOException {
if(test) {//如果test为true,执行标签体内容
this.getJspBody().invoke(null);
}
}
}

<tag> 
	<name>if</name> 
	<tag-class>cn.itcast.tag.IfTag</tag-class> 
	<body-content>scriptless</body-content>
	<!--部署属性-->
	<attribute> 
		<name>test</name> <!--属性名-->
		<required>true</required> <!--属性是否为必须的-->
		<rtexprvalue>true</rtexprvalue> <!--属性值是否可以为EL或JSTL等-->
	</attribute> 
</tag>

MVC

  1. 什么是MVC
      MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
  • 控制器Controller:对请求进行处理,负责请求转发;
  • 视图View:界面设计人员进行图形界面设计;
  • 模型Model:程序编写程序应用的功能(实现算法等等)、数据库管理;
  1. Java与MVC

JSP Model1第一代:JSP + DB
JSP Model1第二代:JSP + javabean + DB
JSP Model2:JSP + Servlet + JavaBean + DB


JavaWeb三层框架

  • Web层(表述层):与Web相关的,例如jsp、servlet都是Web层
  • Business层(业务逻辑层):封装业务逻辑,通常对应一个业务功能,例如登录、注册都是一个业务功能。
  • Data层(数据访问层):封装对数据库的操作,通常对应一次对数据库的访问,例如添加、修改、删除、查询等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值