day15--使用传统模式和简单模式开发标签,简单标签开发案例,使用JSTL核心标签库_第1页
day15--使用传统模式和简单模式开发标签,简单标签开发案例,使用JSTL核心标签库_第2页
day15--使用传统模式和简单模式开发标签,简单标签开发案例,使用JSTL核心标签库_第3页
day15--使用传统模式和简单模式开发标签,简单标签开发案例,使用JSTL核心标签库_第4页
day15--使用传统模式和简单模式开发标签,简单标签开发案例,使用JSTL核心标签库_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用传统和简单模式开发标签,简单标签开发案例,使用 JSTL 核心标签库作者:吕鹏时间: 2011-08-09一、传统标签开发模式1、使用实现了 tag 接口的类-六个方法(执行流程)setPageContext 传递页面 pageContext 对象(这个对象可以获取其它八大隐含对象) setParent 设置父标签,没有父标签传 nullgetParentdoStartTag 遇到开始标签执行这个方法doEndTag遇到结束标签执行这个方法release释放资源-继承子类 TagSupport 只重写自己感兴趣的方法2、执行流程IE 请求 jsp 页面到服务器,转换为 Servlet 后,

2、由 Servlet 执行,遇到标签以后,创建标签对 应的标签处理器实例对象,调用标签的setPageContext 方法,把页面的 pageContext 对象传递给标签处理器,然后再调用setParent方法,把父标签传递给标签处理器,如果没有父标签,传null,遇到开始标签,调用doStartTag方法,一般情况下还会执行标签体,遇到结束标签调用doEndTag,最后一般情况下调用realease方法释放资源。3、使用步骤自定义一个类,使其继承TagSupport方法,重写doStartTag方法,方法体中获取 request对象和out对象, 写相关方法; 在WEB-INF目录下建立一个

3、.tld的文件,写以下内容:<?xml version="1.0" encoding="UTF-8" ?>vtaglib xmlns ="xml ns:xsi ="/2001/XMLSchema-i nsta nee" xsi:schemaLocati on ="http:/java.s un. com/xml/ns/j2eehttp:/java.s un .com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"versio n=&

4、quot;2.0"><descripti on >A tag library exercising SimpleTag handlers.</descriptio n ><tlib-version >1.0</tlib-version ><short-name>SimpleTagLibrary </short-name> <!-资源名称-><uri> /itcast-tags </uri><tag><name>viewIP </name>

5、;<tag-class>cn.itcast.web.tag.ViewIpTag </tag-class><body-c ontent >empty </body-c ontent ></tag><tag><!-标签的名字 -><n ame>for </n ame><!-标签的处理器 -><tag-class>c n.itcast.web.tag.SimpleTagTest </tag-class><!-是否有标签体内容-> <body

6、-c ontent >scriptless</body-c ontent > <attribute ><!-用于指定属性的名称 ->< n ame> count</n ame><!-是否默认设置这个属性->< required >true </required ><!-是否可以使用运行时表达式-><rtexprvalue>true</rtexprvalue ></attribute></tag></taglib >在 js

7、p 页面中导入资源包:<% taglib prefix="s" uri="/itcast-tags"%> 4、自定义标签的作用:1、将 jsp 页面中的 java 代码移除2、控制页面某一内容是否输出3、整个 jsp 是否执行4、控制页面内容重复输出5、修改 jsp 内容输出5、 JspTag 接口 空实现的标识类型模式serializable 和 cloneable 都是这样的标识类型规范。目的就是给特殊的类以特殊的权限,就比如clo neable,实现它就表示可以被克隆了。二、使用简单标签模式开发1. 执行过程首先实例化实现了 simpl

8、eTag 的类实例 ,首先调用标签处理类对象的 setJspContext 方法,将代 表 jsp 页面的 pageContext 对象传递给标签处理器对象,然后调用 setParent 方法,将父标签处理器对象传递给这个标签处理器对象(只有父标签存在的情况下才会调用这个方法),如果调用标签时间设置了属性,容器将调用每个输赢对应的setter方法把属性值传递给标签处理器对象,如果标签的属性值是 EL表达式或者脚本表达式则web容器首先计算表达式的值然后把值传递给标签处理器对象。如果简单标签有标签体容器将调用setJspBody方法把代表标签体的JspFragment对象传递进来。这样就完成了标

9、签的初始化工作。执行标签体调用doTag方法,开发人员在方法体内通过操作jspFragment对象,就可以完成是否执行迭代,修改标签提的目的。2、invoke方法详解Invoke方法是jspFragment最重要的方法,利用这个方法可以控制是否执行和输出标签提的 年日哦那个是否迭代执行标签提的内容或者对执行结果进行修改再输出。3、开发带属性的标签1首先在标签处理器中编写每个属性对应的setter方法<lv:forcount ="5" >aaa <br ></ lv:for>/声明属性变量private intcount ;/提供set方法

10、供服务器调用publicvoidsetCo unt(int count) this . count = count;2、在TLD文件中描述标签的属性<tag ><!- 标签的名字 -><name>for </name ><!- 标签的处理器 -><tag-class >cn.itcast.web.tag.SimpleTagTest</ tag-class ><!- 是否有标签体内容 -><body-content> scriptless </ body-content><

11、;attribute ><!-用于指定属性的名称-><name>count </name ><!-是否默认设置这个属性->< required >true </ required ><!-是否可以使用运行时表达式->< rtexprvalue >true </ rtexprvalue ></ attribute ></ tag >4、使用简单标签做一个简单的例子控制页面内容转换成大写然后输出五次(1 )在jsp中引入资源,写标签体内容<% page l

12、anguage="java" import ="java.util.*" pageEncoding="utf-8"%><% taglib prefix = "lv" uri="/itcast-tags"%><html ><head><title > 简单标签 </title ></head><body><lv:for count="5" >aae<br></

13、lv:for ></body></html >(2 )定义标签处理器package cn.itcast.web.tag;import java.io.StringWriter;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.SimpleTagSupport;public class SimpleTagTest extends SimpleTagSupport/声明属性变量private int count;提供set方法供服务器调用public void set

14、Count(int count) this .count = count;/*覆盖doTag方法,逻辑内容在方法体内完成*/Overridepublic void doTag()首先获取jsp的标签体内容JspFragmentjf = this .getJspBody();初始化一个String的带缓冲的写入流StringWriter sw = new StringWriter();执行count次的循环for (int i = 0; i < count; i+) try /将标签体中的内容读入到这个缓冲流当中jf.i nvoke(sw);取出这个缓冲流的内容赋值给Stri ngBuff

15、erStringBuffer sb = sw.getBuffer();将值赋值给ContentString content = sb.toString();获取out流,打印被转换为大写的内容count次this.getJspC on text().getOut().write(c onten t.toUpperCase(); catch (Exception e) throw new RuntimeException(e);(3)在tld文件中注册<tag><!-标签的名字-><n ame>for </n ame><!-标签的处理器-&g

16、t;<tag-class>c n.itcast.web.tag.SimpleTagTest </tag-class><!-是否有标签体内容-><body-c ontent >scriptless</body-c ontent ><attribute ><!-用于指定属性的名称->< n ame> count</n ame><!-是否默认设置这个属性->< required >true </required ><!-是否可以使用运行时表达式 -&g

17、t;<rtexprvalue>true</rtexprvalue ></attribute></tag>三、简单标签开发案例1、开发防盗链标签所谓防盗链就是指如何防止自己的网站非别的网站非法链接,比如说想自己的网站不能别的超链接连接,当有外部连接连接到我的网站的时候,首先判断其来源是不是自己的内部站点,如果是就可以继续浏览网页,如果不是就转到我的主页,这个判断一句可以使用http头信 息的 referer 来判断,具体方法使用 request.getHeader("referer") ,具体怎么实现呢,我们使用 我们的防盗锁标

18、签。( 1)我们想我们的这个标签一定要有两个参数,一个是site 指我们的 web 应用,用以判断客户的地址来源是否来源于我们的应用地址,第二个就是重定向的地址page。所以我们的标签可以这么写:<% page language="java" import ="java.util.*" pageEncoding ="utf-8" %><% taglib prefix= "s" uri= "/lv-tags" %><s:referer site= "http

19、:/localhost" page="/index.jsp" ></s:referer><html ><head><title >使用简单标签实现防盗链 </title ></head>< body >凤姐日记</body ></html >(2)然后,我们自定义一个标签处理类RefererTag.java,这个类的目的就是获取客户的连接地址是否与我们的 web 应用地址一致如果不一致或者为 null, 为 null 表示这个连接地址可能 是从 QQ

20、上或者论坛上看到这个连接直接点进来的。 这两种情况都要考虑到, 这样的话就转 到我们的主页,但是不同的开发人员在写这个标签的习惯不一样,page里的值有的人喜欢直接写主页, 有的人喜欢写具体, 有的人写的不具体, 这样不同的情况我们也要判断然后再 重定向。具体代码如下:package cn.itcast.web.tag.example;import java.io.IOException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.

21、servlet.jsp.JspException;import javax.servlet.jsp.PageContext;import javax.servlet.jsp.SkipPageException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class RefererTag extends SimpleTagSupportprivate String page;private String site;public void setPage(String page) this.page= page;public vo

22、id setSite(String site) this .site = site;public void doTag() throws JspException, IOException 首先获取页面属性对象PageC on text pageC on text = (PageC on text) this .getJspC on text(); 获取 requestHttpServletRequest request = (HttpServletRequest) pageContext.getRequest();获取 responseHttpServletResponse response

23、= (HttpServletResponse) pageContext.getResponse();通过头文件信息referer判断此次请求来源于哪里String referer = request.getHeaderfreferer");/如果referer等于空 或者 不是以site为开始 说明是盗链者根据page设置重定向到网站主页if (referer = null | !referer.startsWith( site)/如果定义的page是以工程为根目录则执行重定向到此网页day15/index.jspif (page.startsWith(request.getCo n

24、textPath()resp on se.se ndRedirectpage); 如果定义的page是以"/"为开始目录/index.jsp else if (page.startsWith("/")respon se.se ndRedirect(request.getC on textPath()+page); else/定义的page为一个页面index.jsprespon se.se ndRedirect(request.getC on textPath()+"/" + page);throw new SkipPageExcep

25、tion();(3)最后,我们要在我们的tld文件中关联我们的标签,所谓关联就是指我们要让我们的服务器知道当其加载到这个页面标签的时候知道其标签处理器是什么,这样它才能帮助我们执行这个标签,具体代码如下:<tag><!-标签的名字 -><n ame>referer</ name><!-标签的处理器 -><tag-class>c n.itcast.web.tag.example.RefererTag </tag-class><!-是否有标签体内容-><body-c ontent >scri

26、ptless</body-c ontent > <attribute ><!-用于指定属性的名称-><n ame>site</name><!-是否默认设置这个属性->< required >true </required ><!-是否可以使用运行时表达式<rtexprvalue >true</rtexprvalue ></ attribute ><attribute ><!- 用于指定属性的名称 -> <name>page

27、</name><!- 是否默认设置这个属性 -> <required>true</required><!- 是否可以使用运行时表达式-><rtexprvalue >true</rtexprvalue ></ attribute ></tag>这样我们的这个防盗链就做好了,当客户来源为 null 或者不是本应用的话就会直接重定向 到我们的 web 工程的主页。2、开发 <c:if> 标签If 标签是很常用的标签, 在分页中, 或者我们要根据一些判断条件显示一些特殊信息的时候,i

28、f 标签就非常有用途了,那我们如何开发一个我们自己的 if 标签呢?(1)首先我们想我们的这个标签的声明,有没有属性,我们说一定有,因为它会根据这个 属性的值进行判断, 如果为真就执行, 如果为假就不执行。 并且我们的这个属性还要设定其 支持我们的 EL 表达式,这样才能动态的判断其值,另外一点我们说我们的标签处理器在定 义属性的时候也要定义为 boolean 型,我们讲我们继承的简单标签为我们自定转型八大基本 数据类型,所以不必考虑转型的过程。那我们来看一下我们的 if 标签的处理器: package cn.itcast.web.tag.example;import java.io.IOEx

29、ception;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class IfTag extends SimpleTagSupportprivate boolean test;public void setTest(boolean test) this .test = test;Overridepublic void doTag() throws JspException, IOException if (test)this .getJspBody().

30、invoke( null );我们发现我们的处理类很简单,就是判断了一下test是真是假,如果为真就调用in voke执行我们的标签体,如果为假就不做操作。(2)然后,我们在我们的tld文件中注册,关联这个标签。<!- IF标签-><tag><n ame>if</name<tag-class>cn.itcast.web.tag.example.1 fTag </tag-class><body-c ontent >scriptless</body-c ontent > <attribute >&

31、lt;n ame>test</name>< required >true </required ><rtexprvalue>true</rtexprvalue ></attribute></tag>(3)页面是这么写的:<% page language="java" import ="java.util.*" pageEncoding="utf-8"%><% taglib prefix = "s" uri=&

32、quot;/lv-tags"%><html ><head><title >使用自定义标签实现if标签</title ></head><body><s:if test="$user!=null" > 登录成功!</s:if><s:if test="$user=null" > 登录失败!</s:if></body></html >3、开发if - else标签在jstl标签当中,没有 else标签,显

33、然是不健全的,jstl中的else标签使用另外一种形式, 就是when和otherwise,而他们是否实行还要看其父类是否为真,假设父类非真说明父类已经执行,则第告诉if或者else不再执行其标签体。看具体实现代码:if中的test是否为真(1 )设计理念,就是说当我们第一次执行这个标签的时候,首先判断且也要保证父标签也为真的时候我们的 if 才会执行,在执行了 if 以后为了确保我们的 else 不执行,那么我们必须让我们的父choose为真,这样else查询父亲的时候if(!choose.isOk()就一定为假了所以else就不会执行了。看我们的父标签的处理器:package cn.itc

34、ast.web.tag.example;/* 父标签*/import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class ChooseTag extends SimpleTagSupportprivate boolean isOk;public boolean isOk() return isOk ;public void setOk(boolean isOk) this .isOk = isOk;publi

35、c void doTag() throws JspException, IOException this .getJspBody().invoke( null );package cn.itcast.web.tag.example;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;/* if-when标签处理器* author 吕鹏*/public class WhenTag extends SimpleTagSupp

36、ort private boolean test;public void setTest(boolean test) this .test = test;Overridepublic void doTag() throws JspException, IOException 首先获得父类的标签ChooseTagchoose = (ChooseTag) this .getPare nt();/如果if为真且父亲的不为真的情况下执行if只有执行过if以后父亲就为真了那else就不能执行了if (test && !choose.isOk()this .getJspBody().inv

37、oke( null);choose.setOk(true); package cn.itcast.web.tag.example;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class OtherwiseTag extends SimpleTagSupport Overridepublic void doTag() throws JspException, IOException ChooseTag

38、choose = (ChooseTag) this .getPare nt(); 获取父标签只在在付标签不为真的情况下才执行但if执行的话父标签就为假了if(!choose.isOk()this .getJspBody().invoke( null);(2 )关联标签<!-if-else 的父标签 Choose -><tag><n ame>choose</name<tag-class>c n.itcast.web.tag.example.ChooseTag</tag-class><body-c ontent >scr

39、iptless</body-c ontent ></tag><!- when标签-><tag><n ame>whe n</n ame><tag-class>cn.itcast.web.tag.example.WhenTag </tag-class><body-c ontent >scriptless</body-c ontent ><attribute ><n ame>test</name>< required >true &l

40、t;/required ><rtexprvalue>true</rtexprvalue ></attribute></tag><!-否则 otherWise标签-><tag><n ame>otherwise </n ame><tag-class>cn.itcast.web.tag.example.OtherwiseTag </tag-class> <body-c ontent >scriptless</body-c ontent ></ta

41、g>(3)页面<% page language="java" import ="java.util.*" pageEncoding="utf-8"%><% taglib prefix = "s" uri="/lv-tags"%><html ><head><title >使用自定义标签实现if-else标签</title ></head><body><s:choose><s:wh

42、en test="$user!=null" >登录成功!</s:whe n><s:otherwise >登录失败!</s:otherwise></s:choose></body></html >4、开发迭代标签得带标签就是说我们在页面上往往要遍历Servlet传递过来的数据,集合或者是 Map,在开发这个迭代标签的时候,我们特别要注意一个问题就是我们所接受的类型有很多种,有集合类型的List或者Set,有Map类型的HashMap等,有对象数据,还有基本数据类型的数组,针对他们要有不同的处理方式,

43、那我们怎么写我们的标签处理器呢,我们可以定义一个Colleaction集合对象,不论接受到的是一个集合也好还是map也好,我们都把它转换成一个集合对象,那么我们在doTag方法中通过迭代器遍历就可以了。那问题就在这,我们如何将我们接受的数据转换成为一个Collection对象呢?针对 map和list等这些还比较好转换,可以对于Object和int等,我们通过看sun公司的jstl标签源码我们发现他们是以传统标签的开发模式设计的,对于int基本类型的数组采用一一判断的方式,代码有些冗长,我们传智播客的老师就是聪明,他们使用一种更为巧妙的方式处理了它。首先,我们来看一下对于最原始的集合类型如何遍

44、历,代码如下:package cn.itcast.web.tag.example;import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class ForeachTag extends SimpleTagSupport private List items;private String var;public voi

45、d setltems(List items) this .items = items;public void setVar(String var) this .var = var;Overridepublic void doTag() throws JspException, IOException Iterator it = items.iterator();while (it.hasNext()Object value = it.next();this .getJspContext().setAttribute( var, value);this .getJspBody().invoke(

46、 null);我们发现缺点很多,对于其它类型不能转换,所以我们改进了它: package cn.itcast.web.tag.example;import java.io.IOException;import java.lang.reflect.Array; import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.servlet.jsp.JspException;import j

47、avax.servlet.jsp.tagext.SimpleTagSupport;public class ForeachTag extends SimpleTagSupportprivate List items;private String var;map者E转private Collection collection ; /定义一个集合类型对象将所有接受的集合或者换成一个 collectionpublic void setltems(List items) this .items = items;if (items instanceof Collection) /list setthis

48、 .collection = (Collection) items;else if(items instanceof Map)Map map= (Map) items;this .collectio n = map.e ntrySet();else if(items.getClass().isArray()this.collection = new ArrayList();();int len = Array. getLength(items);for(int i=0;i<len;i+)Object obj = Array. get(items, i);this.collection.a

49、dd(obj);elsethrow new RuntimeException(”只支持数组、集合和 map");public void setVar(String var) this .var = var;Overridepublic void doTag() throws JspException, IOException Iterator it = items.iterator();while (it.hasNext()Object value = it.next();this .getJspContext().setAttribute( var, value);this .ge

50、tJspBody().invoke( null);最经典的代码已经被红色标记了,使用了 Array这个类节省了很多的代码:jwa. reflect首先转义前我们还是使用我们之前的方法使用StringBuffer获取我们要转义的内容,然后根类 Array据不同的标签转义成为不同的内容:package cn.itcast.web.tag.example;import java.io.IOException;import java.io.StringWriter;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext

51、.JspFragment;import javax.servlet.jsp.tagext.SimpleTagSupport;public class HtmlFilterTag extends SimpleTagSupport Overridepublic void doTag() throws JspException, IOException JspFragmentjf = this .getJspBody();StringWriter sw = new StringWriter();jf.i nvoke(sw);String content = sw.getBuffer().toStri

52、ng();&t;a href=""&gt;点点 </a>content = filter(c onten t);this .getJspC on text().getOut().write(c on te nt);public String filter(String message)if (message= null )return (null);char content = new char message.length();message.getChars(O,message.length(), content, 0);StringBuff

53、er result = new StringBuffer(content. length + 50);for (int i = 0; i < content.length; i+) switch (contenti) case '<':result.append("&lt;");break;case '>':result.append("&gt;");break;case '&':result.append("&amp;");break;

54、result.append("&quot;");break;default :result.appe nd(c onten ti);return (result.toString();6、打包标签库我们讲我们好不容易写了这么多的标签库,我们要想办法重复利用啊,我们可以使用导包的方法将我们写好的标签库打包导出,当我们再在别的工程中使用到标签的时候,我们就将我们的包导入就0K 了。四、JSTL核心标签库使用我们可以使用Apache的jstl标签库来完成一些操作,使用标签库必须导入其架包名称4N Jstljar-standardjar1、<c:out> 标签&

55、lt;c:out>标签可以控制值的简单输出,但其更有用的功能在于它可以帮助我们完成特别字符 的转义,就不用我们再使用我们自定义的htmlFilter来转义特殊字符了,另外,当我们指定其输出显示的值为空的时候,使用其default=xxx可以默认的显示值。<c:out value ="$str"escapeXml ="true"default =:"xxxx" ></ c:out >这句话的意思就是说页面显示str ,如果str 为空,贝y显示xxxx如果str中有特殊字符,进行转义。标签对象中。属性名是否

56、支谓性廻属性描述ValuetrueObject指走要愉出的内容escapelfiiiltrueBoolean楷定是否林人 *尊特殊字符 进血编码转换后再进f曲出.默认 值为truedefault1truer1Object扌旨定如果対属性的值为!mil时所輸出 的默认值F2、<c:set> 标签<c:set>标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或 JavaBean类型的属性对象的属性。<br/>c:setpage request sessionapplictionmap iavabean <

57、br/><c:set var="str" value ="abc" scope="application" ></c:set>$str <%Map map = new HashMap(); request.setAttribute( "map" ,map);%><c:set property ="name" value="xxx" target="$map" ></c:set>$map.na

58、me <%Personp = new Person(); request.setAttribute( "pers on" ,p);%><c:set property ="name" value="flx" target="$person" ></c:set> $ TipivusetA标签*箭鳥靑篇蠶翳高段鶴鬻爲豊纏1鵜潭壽薯麴置或中属性名是否支持EL属性类型属性描述valuetrueObject用于指是属性值KvarfalseString用于指定要设置的坯属

59、性的名称scopefalseString用于指定属性所在的粧b域targettrueObject用于指定要设置色性的对象,这个对象必须 是J avaBean 对象或 j ava, ut il.Map 对象property1trueristringr1用于抬定当前要为对象设置的属性名称3、<c:remove><c:remove>标签用于删除各种 Web域中的属性。 其语法格式如下:<c:remove var="varName"scope="page|request|session|application" />4、<

60、;c:catch><c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:<c:catchvar="varName">nested actions</c:catch>var属性用于标识<c:catch>标签捕获的异常对象,它将保存在page这个 Web域中。<c:catch var="aa"><%int i = 1/0;%></c:catch>Tip : VuHfA标签 <c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,

61、其语 法格式如下:<c:catch var=arNamer,>nestetf actions<>c.cch> varSli用于标识<c:catch>标签捕获的异常对彖,它寤杠存在pe*ge 这个Web域中°<% taqlib prefix=V iri='http7/java.suaconrVjsp/jstVcore' %> page contentType= textfhtml;charset=gti2312 %><c:catch var= esc1 scope= page>10/0;<ac

62、atch>异常:<c:out value=nexr /> Smye3(<br >异當 ni)ex.getMessag&t <c:out value="5iwex.message'/><tx/> 异 my ex.getCause: c:out value- 5 my ex. cause- ><t)r f> 异myex.getStackTrace: <c:out valuer Sm>ex.stackTrace;: 处理JSP异常的解决方案: Exception对象执行错误页面 Web.xml文件中配置各种 Exception目标页面 <c:catch>标签捕获异常被错误日志记录异常:遇到异常一定要抛-建议转成运行时异常往上抛要上一层知道-在最上层web层不要再抛了,因为 web层客户 通过友好信息反馈给用户-使用日志文件记录异常保存后台5、<c:if><c:if test="” >标签可以构造简单的"if-then ”结构的条件表达式<c:if var ="test"tes

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论