为了账号安全,请及时绑定邮箱和手机立即绑定

JSP自定义标签

难度初级
时长 1小时55分
学习人数
综合评分9.70
52人评价 查看评价
9.9 内容实用
9.8 简洁易懂
9.4 逻辑清晰
  • 接下来创建一下Connection的引用 Connection conn=null; Statement stmt=null; ResultSet rs=null; 然后将连接数据库的业务逻辑代码写到doEndTag()方法中, 这里首先创建一个try-catch块,因为连接数据库会抛出异常 try{ Class.forName(this.driver); conn=DriverManager.getConnection(this.url, this.username, this.password); stmt=conn.createStatement(); rs=stmt.executeQuery(this.sql); if(rs!=null){ while(rs.next()){ //打印出name这一列的内容 pageContext.getOut().print(rs.getString("name")+"<br/>"); } } //如果成功了,执行标签下面的代码 return EVAL_PAGE; }catch(Exception e){ e.printStackTrace(); //如果抛出异常,就不执行标签下面的代码 return SKIP_PAGE; }finally{ //关闭数据库的连接,这里依然会抛出异常,在这里对其捕获 try { if(rs != null){ rs.close(); } if(stmt != null){ stmt.close(); } if(conn != null){ conn.close(); } } catch (Exception e2) { // TODO: handle exception } }
    查看全部
  • 经过前面的学习,我们不仅可以控制标签体内容的显示,也可以控制标签结束后内容是够显示,我们还可以在标签中增加 属性来丰富自定义标签的功能 在标签中增加属性,只需要在处理类中增加相应字段的set方法以及在标签描述文档中的tag标签中加入 attribute这个标签来进行配置, 我们这里来定义一个连接数据库的标签,来演示如何设置标签中的属性 切换到开发环境 第一步:创建标签处理类: 首先创建一个标签的处理类,DBConnectionTag这里继承TagSupport,复写doEndTag()方法 这里来声明一些与数据库信息相关的属性 private String driver; private String url; private String password; private String sql; private Stirng username; 这里要创建一下set方法,因为这些将会是标签的属性 public void setDriver(String driver) { this.driver = driver; } public void setUrl(String url) { this.url = url; } public void setPassword(String password) { this.password = password; } public void setSql(String sql) { this.sql = sql; } public void setUsername(String username) { this.username = username; }
    查看全部
  • 第三部:定义一个JSP页面:demo2.jsp <body> <imooc:SkipPageOrEvalPage/> <h3>中国最大的免费在线培训平台--www.imooc.com</h3> </body> 启动tomcat,查看jsp页面 http://localhost:8080/jspCustomTag/demo2.jsp我们通过浏览器输入地址 的方式对它进行访问,这里可以看到,如果是这种方式访问的话, 会显示“不能访问”,那么接下来我们通过超链接的形式对它进行访问, 在这里再新建一个JSP:access.jsp 这个jsp只包含一个a标签,然后我们将http://localhost:8080/jspCustomTag/demo2.jsp这个地址 赋予a标签的href: <body> <a href="http://localhost:8080/jspCustomTag/demo2.jsp">站内访问</a> </body> 再来访问access.jsp。 http://localhost:8080/jspCustomTag/access.jsp 点击这个超链接,这时候在jsp页面中标签后面的代码呢,就可以正常的执行了。 第四步:总结: 通过控制返回SKIP_PAGE和EVAL_PAGE这两个常量就能控制标签后的内容是否可以显示
    查看全部
  • 下面来得到一个url String url="http://"+request.getServerName(); 然后就可以判断一下: 请求过来的究竟是通过浏览器呢,还是通过点击超链接来访问的, if(referer != null && referer.startsWith(url)){ } 确保这个请求是通过本站的超链接请求过来的, 这里首先来判断http请求头中的referer这个属性,是否为空,并且 是通过本站的链接连接进来的,那么如果条件成立的话,就 return EVAL_PAGE;也就是让它正确的执行, 否则就输出一个提示,pageContext.getOut().print("不能访问!"); 然后return SKIP_PAGE; 第二步:在标签描述文件中注册这个标签: <tag> <name>SkipPageOrEvalPage</name> <tag-class>com.imooc.tag.SkipPageOrEvalPageTag</tag-class> <body-content>empty</body-content> </tag>
    查看全部
  • 这节课内容: 如何控制执行标签体结束后的内容: 假设有个需求,对于jsp页面只能通过本站的超链接才能访问,其他的访问方式都会使jsp停止执行其中的内容 类似防盗链的这种功能, 第一步:写标签处理类: 切换到开发环境,创建一个java类:SkipPageOrEvalPageTag,同样需要继承TagSupport这个父类, 这里需要重写doEndTag()方法,该方法默认是返回EVAL_PAGE,也就是说执行标签结束后的内容, JSP引擎在解析到该结束标记时呢,会回调此方法,下面来实现以下这个方法: 这里需要首先得到一个request对象, HttpServletRequest request=(HttpServletRequest) pageContext.getRequest(); 之后,需要得到HTTP请求头的一个属性, String referer=request.getHeader("referer"); 那么这个属性是属于http请求头中的一个属性, 可以通过这个属性来判断客户是从哪个页面链接过来的, 只有通过超链接和表单提交,该链接才会有效 ( 意思是:只有通过超链接和表单提交向服务器发送请求,在请求头里才会有 Referer: http://localhost:8080/jspCustomTag/access.jsp这个属性, 倘若通过在浏览器的地址栏中直接输入 Referer: http://localhost:8080/jspCustomTag/demo2.jsp的这种方式,它不是超链接 也不是表单提交的方式,所以在请求头里面没有referer这个属性,所以 得不到referer这个属性的值。 )
    查看全部
  • body-content标签有4个值: empty,JSP,scriptless,tagdependent empty表名它是一个空的标签体 JSP是允许标签体内出现JSP脚本,也就是java代码 scriptless可以接受文本,EL表达式,和JSP的动作 tagdependent它是指,在标签体的内容可以直接被写入bodyContent,由自定义标签处理类来处理,而不被JSP容器所解析。
    查看全部
  • 这里使用scriptless: 综上: <tag> <name>SkipBodyOrEvalBodyInclude</name> <tag-class>com.imooc.tag.SkipBodyOrEvalBodyIncludeTag</tag-class> <body-content>scriptless</body-content> </tag> 标签定义好了,那么再来创建一个JSP页面,demo1.jsp 这里需要引入标签库文件: <%@ taglib prefix="imooc" uri="/imooc-tag" %> 然后在body中: <body> <imooc:SkipBodyOrEvalBodyInclude> <h3>中国最大的免费在线培训平台--www.imooc.com</h3> </imooc:SkipBodyOrEvalBodyInclude> </body> 然后启动tomcat,查看这个jsp 第一次输入http://localhost:8080/jspCustomTag/demo1.jsp的时候, 页面中什么也没有显示,接下来加上一个参数: http://localhost:8080/jspCustomTag/demo1.jsp?name=imooc 这时候,由于标签处理类中接收到了name值,它满足了要求,所以它就会执行标签体中的内容 也就是在页面上显示 中国最大的免费在线培训平台--www.imooc.com 那么我们就可以使用这种方式,在页面上将一些满足相应条件的才能显示的内容,放在 标签体中,然后对用户的权限进行判断,来决定是否显示相应的内容
    查看全部
  • 这节课内容: 如何控制标签体中内容的显示 首先写个java类SkipBodyOrEvalBodyIncludeTag继承TagSupport,并重写doStartTag()方法 这个方法是调用了父类的doStartTag()方法,查看父类的doStartTag()方法,它返回的是一个 SKIP_BODY的常量,也就是说它是默认不执行标签体的, 这里从url上接收一个参数: String name=pageContext.getRequest().getParameter("name"); 然后来判断一下这个name的值, 如果name值是imooc,return EVAL_BODY_INCLUDE;也就是执行标签体。 否则返回return SKIP_BODY; 接下来需要在标签库描述文件中,对其进行注册 这里将它命名为:SkipBodyOrEvalBodyInclude,再指明它的标签处理类 com.imooc.tag.SkipBodyOrEvalBodyIncludeTag 然后看一下body-content标签 这个标签有四个值: 分别是empty,JSP,scriptless,tagdependent empty表名它是一个空的标签体 JSP是允许标签体内出现JSP脚本,也就是java代码 scriptless可以接受文本,EL表达式,和JSP的动作 tagdependent它是指,在标签体的内容可以直接被写入bodyContent, 由自定义标签处理类来处理,而不被JSP容器所解析。
    查看全部
  • IterationTag继承了Tag接口,除了拥有Tag接口的常量和方法之外呢, 它还增加了doAfterBody()方法和EVAL_BODY_AGAIN常量。 从这个接口的名称上呢,可以看出它提供了对代码循环的功能, 如果doAfterBody()方法向WEB容器返回了EVAL_BODY_AGAIN, WEB容器会把这个标签体的内容再执行一次,执行完之后再次执行, 直到doAfterBody()方法返回SKIP_BODY,容器才会开始处理标签的结束 标记,和调用doEndTag这个方法。 TagSupport是IterationTag的实现类,所以在实际的开发中, 可以继承该类,而简化自定义标签的处理类的开发 而后来看BodyTag这个接口,这个接口继承了IterationTag 并且增加了两个方法,setBodyContent(BodyContent b) doInitBody() 和一个常量 EVAL_BODY_BUFFERED 而EVAL_BODY_TAG是一个已经过时的常量 EVAL_BODY_BUFFERED可以对标签体的内容进行修改, BodyTagSupport实现了BodyTag的接口,它可以简化开发, 接下来看一下SimpleTag,这个接口是为了简化自定义标签的开发 在jsp2.0规范中,所新增加的接口,这里蛀牙看doTag这个方法, 该方法会在执行自定义标签时会被调用,并且只会被调用一次, Tag接口及其子接口所提供的功能呢,在doTag这个方法中,都可以完成, 它有一个实现类SimpleTagSupport,我们平时使用最多的就是 SimpleTagSupport类, 那么经过这个结构图的学习呢,我们可以对自定义标签的各个接口和 类有个大概的了解,为我们今后继续学习打下基础
    查看全部
  • 二,这节课关注jsp规范提供的自定义标签的类和接口的层次结构 在源码中,TagSupport整个类实现了IterationTag整个接口 IterationTag接口又继承了Tag接口 Tag接口又继承了JspTag这个接口 JspTag这个接口是一个空的接口,它没有任何的方法,它是自定义标签的顶级父接口。 除了子接口Tag之外,它还有另外一个子接口SimpleTag SimpleTag有一个实现类是SimpleTagSupport 为了表名它们之间的层次结构呢,这里有个简单的类图: JspTag是所有自定义标签的父接口,没有任何的属性和方法,它有两个直接的子接口, 分别是Tag和SimpleTag Tag接口是jsp2.0规范之前就存在的,而SimpleTag是为了简化自定义标签的开发,在 jsp2.0以后才出现的 Tag接口中定义了两个重要的方法doStartTag()和doEndTag() 还定义了四个静态常量,EVAL_BODY_INCLUDE SKIP_BODY EVAL_PAGE SKIP_PAGE 在jsp页面运行过程中,当碰到了自定义标签的开始标记,就会调用标签处理类的 doStartTag方法,我们在第一个例子中就是这个方法实现了处理逻辑的, doStartTag方法执行完毕后,会向WEB容器返回常量, EVAL_BODY_INCLUDE SKIP_BODY 以此来决定是否执行标签体, EVAL_BODY_INCLUDE是执行自定义标签的标签体 SkIP_BODY是跳过标签体,也就是它不执行标签体之间的内容 当我们执行自定义标签的结束标签时,doEndTag方法就会被调用 它会返回 EVAL_PAGE SKIP_PAGE 这两个常量 EVAL_PAGE是告诉WEB容器接着执行自定义标签后面的代码 SKIP_PAGE就是忽略自定义标签结束后的内容
    查看全部
  • 一,上一节课的回顾: 自定义标签的开发过程: 第一步:编写一个继承TagSupport的类。作为标签的处理类。并且要重写这个类的doStartTag方法。 该方法包含了,业务的处理逻辑。该方法由jsp引擎所回调。 第二步:在WEB-INF下定义一个tld文件,也就是标签库的描述文件,该文件可以定义多个tag 一个tag代表在jsp页面中使用的一个标签, 在tag里,定义了标签的名字。处理类。之间的对应关系。 将整个文件放到WEB-INF下或其子目录中。 jsp引擎在对jsp代码进行编译时,会自动的加载该文件, 第四步:在jsp页面中使用该标签了
    查看全部
  • 简单的类图:如视频
    查看全部
  • 第四步:结论: 结果与之前一样, 但这样:jsp页面清爽很多,并没有多余的java代码 那它的执行过程,可以这样理解: jsp页面在被jsp引擎解析时,当碰到页面中自定义的标签时,会通过页面中的 uri,就是<%@ taglib prefix="imooc" uri="/imooc-tag" %>中的uri的地址 去查找标签库文件,根据标签库文件再去查找自定义标签的处理类,也就是这个地方: <tag-class>com.imooc.tag.LoginDateTag</tag-class> 当jsp引擎处理到开始标记时,系统就会自动的调用类LoginDateTag中的doStartTag()方法 我们可以在这个方法上写入相应的业务处理逻辑。 这里的标签实例是线程安全的,也就是每执行一次标签,都会生成一个新的对象。
    查看全部
  • 第三步:在jsp中如何使用该标签呢? 打开logininfo.jsp, 在开头引入: <%@ taglib prefix="imooc" uri="/imooc-tag" %> ,然后在body标签中写入如下代码: <body> 欢迎来到imooc,你的登录时间是:<imooc:loginDate/> </body> 得到: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="imooc" uri="/imooc-tag" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 欢迎来到imooc,你的登录时间是:<imooc:loginDate/> </body> </html> 再来启动tomcat,访问这个jsp页面。
    查看全部
  • 第二步:在WEB-INF下创建一个后缀名为tld的文件。这是一个标签库文件,我们所定义的标签都要在这里进行注册 这个tld文件可以在C:\apache-tomcat-7.0.68\webapps\examples\WEB-INF\jsp2中找到。一个示例的文件 这个文件内容比较多,我们拷贝出对我们有用的部分。 然后在WEB-INF下新建一个imooctag.tld,内容如下: <?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>A tag library exercising SimpleTag handlers.</description> <tlib-version>1.0</tlib-version> <short-name>SimpleTagLibrary</short-name> <uri>/imooc-tag</uri> <tag> <name>loginDate</name> <tag-class>com.imooc.tag.LoginDateTag</tag-class> <body-content>empty</body-content> </tag> </taglib> 这样一个标签库文件就写完了。
    查看全部

举报

0/150
提交
取消
课程须知
学习本门课程前需要对Java Web的基础知识有所了解,并会使用JSP的标准标签库。
老师告诉你能学到什么?
1、什么是自定义标签 2、如何实现自定义标签及应用

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!