Jstl自定义标签:

 自定义标签主要用于移除JSP页面中的Java代码。Jsp页面主要是用来显示给前台的,如果里面有过多的java代码的话,会显得很乱,但是没有java代码也无法获取相关数据或完成相关操作。那么这时候我们就可以自己定义一个标签,来完成需要用java代码完成的事情,这样Jsp页面就会清洁很多,可读性也更强。JSP中使用自定义标签移除只需要完成以下两个步骤:

        1编写一个实现Tag接口的java类(标签处理类)
        2
编写标签库描述符(tld)文件,在tld文件中对标签处理类进行描述。

 

 

    自定义标签可以定义一个或多个属性,这样在JSP页面中应用自定义标签时就可以设置这些属性的值,通过这些属性为标签处理器传递参数信息,从而提供标签的灵活性和复用性。想要让一个自定义标签具有属性,通常需要完成两个任务即可:

        1)在标签处理器中编写每个属性对应的setter方法

        2)在tld文件中描述标签的属性

       为自定义标签定义属性时,每个属性都必须按照javaBean的属性命名方式,在标签处理器中定义属性名对应的setter方法,用来接收JSP页面调用自定义标签时传递进来的属性值。例如属性url,在标签处理器类中就要定义相应的setUrl(Stringurl)方法。在标签处理器中定义相应的set方法后,JSP引擎在解析执行开始标签前,也就是调用doStartTag方法前,会调用set属性方法,为标签设置属性。我们看下面的例子:

防盗链: 我们来用自定义JSTL标签开发一个防盗链的标签:如果客户端直接访问http://localhost:8888/jstl/test.jsp,会被阻止,先跳转到主页index.jsp,再访问1.jsp

 

Index.jsp

 jstl-自定义标签

Java文件

package jstl;

 

import java.io.IOException;

 

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.PageContext;

import javax.servlet.jsp.SkipPageException;

importjavax.servlet.jsp.tagext.SimpleTagSupport;

 

public class RefererTag extendsSimpleTagSupport { 

              

             private String site; 

             private String page; 

              

             public void setSite(String site) { 

                 this.site = site; 

             } 

             public void setPage(String page) { 

                 this.page = page; 

             } 

              

             @Override 

             public void doTag() throws JspException,IOException { 

          

                 //看来访者是从哪个页面来的 

                 PageContext pageContext =(PageContext)this.getJspContext(); 

                 HttpServletRequest request =(HttpServletRequest)pageContext.getRequest(); 

                          

                 String referer =request.getHeader("referer");//得到是从哪个页面来的 

                  

                 //判断是否从自己的主页过来的 

                 if(referer == null ||!referer.startsWith(site)) { 

                      

                     HttpServletResponse response =(HttpServletResponse)pageContext.getResponse(); 

                     String webroot =request.getContextPath(); //example 

                     if(page.startsWith(webroot)) 

                        response.sendRedirect(page); 

                     else 

                         response.sendRedirect(webroot +page); 

                      

                     //重定向后,控制保护的页面不要执行 

                     throw new SkipPageException(); 

                 } 

             } 

         }

 

         dlt文件

 jstl-自定义标签

 

Test.jsp

jstl-自定义标签


jstl-自定义标签

相关文章: