1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

时间:2022-11-29 06:36:03

相关推荐

12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

EL应用 自定义一个标签,实现两个字符串的相加1回顾1.1servlet生命周期init(ServletConfig)service(ServletRequest,ServletResponse)destory() 1.2回话技术 cookie:浏览器端 (服务器需要浏览器保存少量的数据)服务器创建对象:new Cookie(name,value) cookie.setMaxage(秒); 有效时间 cookie.setMaxage(0) 删除cookie cookie.setPath(“/”) 路径 cookie.setDomain() 设置域名,默认:localhost发送到浏览器:response.addCookie(cookie)服务器接收:request.getCookies() Cookie[] 如果没有返回nullsession:服务器端获得或创建session:request.getSession(); 没有创建,有返回request.getSession(boolean) ,true 没有创建,有返回; false:没有不操作,有返回作用域(属性attribute)操作:setAttribute getAttribute removeAttribute (xxxAttribute) 1.3 JSP 脚本元素:声明:<%! …. %>代码片段:<% java代码 %>表达式:<%= 表达式输出到浏览器端 %> 注释:<%-- 内容 --%> 指令:<%@指令名称 。。。。%>page:给当前jsp页面配置include:静态包含,ABjsp,AB合并生成一个servlet,编译,运行taglib:标签库引用 jsp内置对象:9个pageconfigapplication(ServletContext)requestsessionresponseoutexceptionpageContext-- jsp上下文对象(jsp管理者) 启用其他8个内置对象:getXxx() 例如:getOut() 方便操作不同的作用域:xxxAttribute(name,value,scope) 依次获得不同域:findAttribute() jsp动作标签 <jsp:forward> 转发 <jsp:include> 动态包含:ABjsp,单独生成ABservlet,单独编译AB 字节码,运行时合并 <jsp:param> 给以上设置参数,URL编码 /helloServlet?usename=%20%232 el表达式格式:${ … }获得用户自定义数据 -- 注意:作用域中的数据 <% pageContext.setAttribute(“user”,”sdfsd”,PageContext.REQUEST_SCOPE)%> ${user} 使用不同对象的api --通过对象的属性(property)操作 ${pageContext.request.contextPath} 操作对象的方法(java ee 6.0提供) 作用域有list集合 ${list.size()} el内置对象:11个 域:pageScope、requestScope、sessionScope、applicationScope 管理者:pageContextel : ${pageContext.request.contextPath} 获得发布到tomcat下的web项目的项目名称 或嵌入java代码获得((HttpServletRequest)pageContext.getRequest()).getContextPath() 请求头:header 、headerValues 请求参数:param、paramValues cookie : cookie 初始化参数:initParam3 JSTLJavaServer Pages Standard Tag Library , 由JCP(Java Community Process)指定标准(规范、接口)提供给 Java Web 开发人员一个标准通用的标签函数库和 EL 来取代传统直接在页面上嵌入 Java 程序(Scripting)的做法,以提高程序可读性、维护性和方便性jstl 和 el表达式取代 jsp脚本 apache 提供标准的实现手动导入jar包(eclipse需要) myeclipse自动导入 3.2标签库分类 3.3核心标签库 3.3.1域操作out标签:将value的内容输出到浏览器,支持el表达式 escapeXml属性:设置是否进行转义,默认值true default属性, 默认为true,指定如果value属性的值为null时所输出的默认值set标签:给指定的作用域设置属性值,等价于: pageContext.setAttribute(var,value,scope) 或用来将变量储存至JavaBean和Map的属性中 * var: 指定要设置的Web域属性的名称 * value:用于指定属性值,value为null则移除 * scope:作用域,(取值:page/request/session/application)remove标签: * var : 指定要设置的Web域属性的名称 * scope:作用域 3.3.2逻辑操作if标签:与if语句等效 * test : 逻辑条件,支持el表达式choose标签:相当于switch,必须使用break when子标签:相当于case otherwise子标签:相当于default 3.3.3其他url标签:在jsp页面处理路径 * value : 需要处理的路径,如果只有value,处理的结果将输出到浏览器端 * var : 如果使用了var,处理的结果将存放在作用域中 * scope : 作用域 * param 子标签:给url设置请求参数 * 进行URL编码redirect 标签:用于进行重定向,如果/开头,自动添加web项目的名称 3.3.4foreachforEach标签:用于对集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。 * items:将要迭代的集合对象,或数组,支持el表达式 * var : 遍历的每一个数据,在标签体中可以通过el表达式获得,指定将当前迭代到的元素保存到page这个Web域中的属性名称 * begin :开始 * end : 介绍 * step :步长,默认值14自定义JSTL4.1自定义标签编写流程 1.编写一个是实现tag接口的类 2.tld配置文件 3.jsp引入并使用 4.2实现类

1.传统标签:实现接口:Tag,或继承类:TagSupport
2.简单标签:jsp2.0提供,实现接口:SimpleTag,或继承类:SimpleTagSupport
自定义标签的主要接口类 TagSupport使用最为频繁的类,可设置属性。 BodyTagSupport 可以处理body体部分的内容,使用不是很多。 SimpleTagSupport 简单标签实现类,是JSP2.0以后添加的新类,可以快速开发自定义标签。 JspTag接口: 所有的标签处理类,都要实现JspTag接口。这个接口只是一个标识接口,它里面没有定义任何方法。Tag接口:定义了所有传统标签处理类要实现的基本方法。 setPageContext(PageContext ctx)由Servlet容器调用。向当前的标签处理类传递当前PageContext对像。 setParent(Tag t) – 由Servlet容器调用此方法,向当前Tag对象传递父标签的Tag对象。 doStartTag() – 当遇到标签体开始标记时执行的方法,需要用户实现。 doEndTag() – 当遇到标签体结束标记时执行的方法。需要用户实现。 其中doStartTag和doEndTag方法都要求用户返回一个int类型的值,此值决定标签的后续部分如何处理。doStartTag的两个返回值是: Tag.SKIP_BODY:表示标签的主体部分将被忽略。If the TagLibraryDescriptor file indicates that the action must always have an empty action, by an <body-content> entry of "empty", then the doStartTag() method must return SKIP_BODY. Tag.EVAL_BODY_INCLUDE:表示标签的主体部分将被正常执行。Otherwise, the doStartTag() method may return SKIP_BODY or EVAL_BODY_INCLUDEdoEndTag的两个返回值是: Tag.SKIP_PAGE:表示停止标签后面的JSP代码的执行。 Tag.EVAL_PAGE:表示按正常顺序执行标签的后续JSP代码。IterationTag接口EVAL_BODY_AGAINRequest the reevaluation of some body int doAfterBody() //特有方法Process body (re)evaluation. If doAfterBody returnsEVAL_BODY_AGAIN, a new evaluation of the body will happen (followed by another invocation of doAfterBody). If doAfterBody returns SKIP_BODY, no more body evaluations will occur, and the doEndTag method will be invoked. If this tag handler implements BodyTag and doAfterBody returnsSKIP_BODY, the value of out will be restored using the popBody method in pageContext prior to invoking doEndTag.BodyTag接口static int EVAL_BODY_BUFFEREDRequest the creation of new buffer, a BodyContent on which to evaluate the body of this tag. void setBodyContent(BodyContent b)Set the bodyContent property. TagSupport类添加了默认的实现,在实际的开发,基本上都是使用此类来开发自定义的标签。 在使用此类进行开发时,只需要实现部分方法即可。 此类支持自定义的属性。 BodyTagSupport使用标签控制标签体是否输出 Tag下doStartTag()方法可以返回Tag.SKIP_BODY; Tag.EVAL_BODY_INCLUDE; 控制整个jsp页面是否执行 Tag下doEndTag()方法可以返回Tag.SKIP_PAGE;返回Tag.EVAL_PAGE; 控制jsp页面内容重复执行publicclassDemo3extendsTagSupport {privateinti=0; @OverridepublicintdoStartTag()throwsJspException {returnTag.EVAL_BODY_INCLUDE; } @OverridepublicintdoAfterBody()throwsJspException {i++;if(i<=4)returnIterationTag.EVAL_BODY_AGAIN;else{i=0;returnTag.SKIP_BODY; } } } 修改jsp页面内容输出publicclassDemo4extendsBodyTagSupport {@OverridepublicintdoAfterBody()throwsJspException {// 得到标签体 String str =this.getBodyContent().getString().toLowerCase();try{this.getPreviousOut().println(str); }catch(IOExceptione) {thrownewRuntimeException(e); }returnTag.EVAL_PAGE; } }简单标签为了简化自定义标签的开发,JSP2.0开始又引入了一种新的标签扩展机制。 称为“简单标签扩展”: 1、对于熟悉Java编程语言的开发人员,可以定义实现javax.servlet.jsp.tagext.SimpleTag接口的标签处理类。 2、SimpleTag的一个子类是:SimpleTagSupport。 setJspContext方法:该方法把代表JSP页面的pageContext对象传递给标签处理器对象 setParent方法:该方法把父标签处理器对象传递给当前标签处理器对象 getParent()方法:该方法用于获得标签的父标签处理器对象 setJspBody:方法:由Servlet容器调用此方法,用于设置标签的主体部分。JspFrgment类代表JSP的部分代码, 它的方法有:invoke方法用于执行body体部分的内容。将内容输出到IE上。 doTag() 方法:负责标签的处理过程,完成所有的标签逻辑。与doStartTag和doEndTag方法不同的是doTag方法没有返回值。该方法可以抛出javax.servlet.jsp.SkipPageException 异常,用于通知web容器不在执行JSP页面中位于结束标记后面的内容。 使simpletag标签控制标签体是否输出 控制整个jsp页面是否执行 控制jsp页面内容重复执行 修改jsp页面内容输出 4.3TLD配置文件 EMPTY JSP scriptless tagdepentend 基于xml的配置文件 扩展名:tld 内容:xml 位置: 位置1: WEB-INF目录任意,但除classes和lib目录外 位置2:WEB-INF/lib/*.jar/META-INF目录 基本类型的一维数组,是对象(Object),但不是对象数组(Oject[]) 5EL函数 el表达式中可以使用已经声明好的函数(方法) 格式:${前缀:函数(…..)}6案例:用户登录7模式和案例(下一天)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。