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[]     如果没有返回null

session:服务器端

获得或创建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个

page

config

application(ServletContext)

request

session

response

out

exception

pageContext--  jsp上下文对象(jsp管理者)

启用其他8个内置对象:getXxx()   例如:getOut()

方便操作不同的作用域:xxxAttribute(name,value,scope)

依次获得不同域:findAttribute()

jsp动作标签

<jsp:forward> 转发

<jsp:include>  动态包含:ABjsp,单独生成ABservlet,单独编译AB 字节码,运行时合并

<jsp:param>    给以上设置参数,URL编码  /helloServlet?usename=%20%23



2 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

管理者:pageContext

el : ${pageContext.request.contextPath}   获得发布到tomcat下的web项目的项目名称

或嵌入java代码获得((HttpServletRequest)pageContext.getRequest()).getContextPath()

请求头:header 、headerValues

请求参数:param、paramValues

cookie : cookie

初始化参数:initParam



3 JSTL

JavaServer 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.4foreach

forEach标签:用于对集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。

* items:将要迭代的集合对象,或数组,支持el表达式

* var : 遍历的每一个数据,在标签体中可以通过el表达式获得,指定将当前迭代到的元素保存到page这个Web域中的属性名称

* begin :开始

* end : 介绍

* step :步长,默认值1



4自定义JSTL

4.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_INCLUDE

doEndTag的两个返回值是:

Tag.SKIP_PAGE:表示停止标签后面的JSP代码的执行。

Tag.EVAL_PAGE:表示按正常顺序执行标签的后续JSP代码。

IterationTag接口

EVAL_BODY_AGAIN

Request the reevaluation of some body

int doAfterBody()  //特有方法

Process body (re)evaluation.

If doAfterBody returns EVAL_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 returns SKIP_BODY, the value of out will be restored using the popBody method in pageContext prior to invoking doEndTag.

BodyTag接口

static int EVAL_BODY_BUFFERED

Request 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页面内容重复执行

public class Demo3 extends TagSupport {

private int i =0;

@Override

public int doStartTag() throws JspException {

return Tag.EVAL_BODY_INCLUDE ;

}

@Override

public int doAfterBody() throws JspException {

i++;

if(i <=4)

return IterationTag.EVAL_BODY_AGAIN;

else{

i=0;

return Tag.SKIP_BODY ;

}

}

}

修改jsp页面内容输出

public class Demo4 extends BodyTagSupport {

@Override

public int doAfterBody() throws JspException {

// 得到标签体

String str = this.getBodyContent().getString().toLowerCase();

try {

this.getPreviousOut().println(str);

catch (IOException e) {

throw new RuntimeException(e );

}

return Tag.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模式和案例(下一天)

时间: 2024-10-03 09:10:18

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

javaEE(6)_自定义标签&amp;JSTL标签(JSP Standard Tag Library)

一.自定义标签简介 1.自定义标签主要用于移除Jsp页面中的java代码,jsp禁止出现一行java脚本. 2.使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤: •编写一个实现Tag接口的Java类(标签处理器类). •编写标签库描述符(tld)文件,在tld文件中对标签处理器类进行描述. 3.快速入门:使用标签输出客户机IP //java类 public class ViewPortTag extends TagSupport{ @Override public int

JSP常用标签——JSTL标签和EL表达式

一.JSTL简介 1.什么是JSTL JSTL是Java中的一个定制标记库集.(这个标记库集不需要自己编写,可以直接使用) 2.为什么要使用JSTL 实现了JSP页面中的代码复用(基于标签库原理,重复率较高的代码块支持复用,提高效率) 书写JSP页面时可读性更强(长得很像xml,方便前端查看和参与开发) 用事实告诉你为什么使用JSTL: 实现: 但是,使用JSTL效果如下: 3.JSTL环境搭建 JSTL的下载: 下载地址:http://archive.apache.org/dist/jakar

Java实战之04JavaWeb-04JSP、EL表达式、JSTL标签库

一.jsp部分 只要是与页面显示相关的都是重点 1.jsp的脚本 <%java代码%>:被翻译到service方法内部,局部变量,局部的功能 <%=表达式或变量%>:翻译成service方法中out.write(表达式或变量) <%!java代码%>:被翻译成servlet的全局的内容,方法,全局变量 2.jsp的运行原理 jsp在运行时翻译成servlet index.jsp------>work/index_jsp.java----->work/inde

[原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Java Web基础教程(二)开发基础

Java Web基础教程(二)开发基础 转载:Future魏来 前言 Java web是一种基于B\S(浏览器\服务器)架构的网络应用程序的技术实现.这种结构的Web应用程序被大量的企业级应用所采用.随着Web应用程序的规模不断扩大,传统的Web开发模式无法满足日渐复杂的业务需要,所以出现了更加合理更加先进的MVC开发模式.随之而来的也出现了一系列的基于MVC模式的开发框架,Struts框架.Spring MVC 等. 1. Web 技术的发展 1. 第一阶段 静态网站 Web技术出现伊始,由于

Mac OS X上IntelliJ IDEA 13与Tomcat 8的Java Web开发环境搭建

这标题实在有点拗口,不知道怎么写好,但看了标题也就明白文本的内容.最近几天在折腾这些玩意儿,所以写写总结.除了环境搭建,本文还是一篇入门级的上手教程. 去下载一些东西 JDK安装 Tomcat安装 Tomcat的配置 配置管理员账号 配置Tomcat端口 配置HTTPS 添加web应用 IntelliJ的安装 创建Java Web项目 运行Java Web项目 打成war包 去下载一些东西 老样子,先废话几句,IntelliJ IDEA,这个名字不知道谁想出来的,也真够拗口的,发音大致如此:[i

Java web 常见对象的取值方法整理

一.从request中取值: 1.取param: servlet:  request.getParameter() request.getParameterValues() jsp脚本:request.getParameter() request.getParameterValues() jstl/el:  ${param.name} ${paramaValues.names[0]} struts ognl:<s:property value="#parameters.ParamName[

常用/常见Java Web 服务器/应用服务器介绍

常用/常见应用服务器介绍:自己总结.整理一些常见的应用服务器,资料主要来源于网上. 常用Java Web 服务器Java Web应用程序需要部署在Java web服务器中运行,常用的Java Web服务器有Tomcat.GlassFish.WebLogic.JBoss.WebSphere.Jetty.JRun等. Apache Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使

web day13 JSTL标签库(c标签,自定义标签),MVC设计模式,JavaWeb经典三层框架

JSTL 1. jstl的概述 *apache的东西,依赖EL * 使用jstl需要导入jstl1.2.jar * 四大库: > core:核心库,重点 > fmt:格式化:日期.数字 > sql:过时 > xml:过时 2. 导入标签库 *jar包 * 在jsp页面中:<%@taglib prefix="前缀" uri="路径"%> ---------------------- core --> c标签! 1. out和s