博客
关于我
javaweb学习总结(二十三)——jsp自定义标签开发入门
阅读量:354 次
发布时间:2019-03-04

本文共 6007 字,大约阅读时间需要 20 分钟。

???JSP?????????

????????

???JSP??????????????JSP?????Java??????????????????????????????????????????????????

?????????

1. ????????

???????Tag??????????????????????????

package me.gacl.web.tag;import java.io.IOException;import javax.servlet.http.HttpServletRequest;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.PageContext;import javax.servlet.jsp.tagext.Tag;public class ViewIPTag implements Tag {    private PageContext pageContext;    @Override    public int doEndTag() throws JspException {        System.out.println("??doEndTag()??");        return 0;    }    @Override    public int doStartTag() throws JspException {        System.out.println("??doStartTag()??");        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();        JspWriter out = pageContext.getOut();        String ip = request.getRemoteAddr();        try {            out.write(ip);        } catch (IOException e) {            throw new RuntimeException(e);        }        return 0;    }    @Override    public Tag getParent() {        return null;    }    @Override    public void release() {        System.out.println("??release()??");    }    @Override    public void setPageContext(PageContext pageContext) {        System.out.println("setPageContext(PageContext pageContext)");        this.pageContext = pageContext;    }    @Override    public void setParent(Tag arg0) {    }}

2. ???????

??????????WEB-INF/tld???????

viewIP
me.gacl.web.tag.ViewIPTag
empty

?JSP??????????

?????

?JSP????????????

<%@ page language="java" pageEncoding="UTF-8" %><%@ taglib uri="/gacl" prefix="xdp" %>

????

????????IP??????????

?????????

  • ????JSP??????????????setPageContext??PageContext???????

  • ????????setParent?????????????????

  • ?????????????????????doStartTag???

  • ?????????????????????doEndTag???

  • ??????????????release????????

  • ???JSP????Java??????

    package org.apache.jsp;import javax.servlet.http.*;import javax.servlet.jsp.*;public class jspTag_005fTest1_jsp extends HttpJspBase {    private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();    private static java.util.List _jspx_dependants;    static {        _jspx_dependants = new java.util.ArrayList(1);        _jspx_dependants.add("/WEB-INF/gacl.tld");    }    private org.apache.jasper.runtime.TagHandlerPool _005fjspx_005ftagPool_005fxdp_005fviewIP_005fnobody;    private javax.el.ExpressionFactory _el_expressionfactory;    private org.apache.AnnotationProcessor _jsp_annotationprocessor;    public Object getDependants() {        return _jspx_dependants;    }    public void _jspInit() {        _005fjspx_005ftagPool_005fxdp_005fviewIP_005fnobody = org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig());        _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();        _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());    }    public void _jspDestroy() {        _005fjspx_005ftagPool_005fxdp_005fviewIP_005fnobody.release();    }    public void _jspService(HttpServletRequest request, HttpServletResponse response)            throws IOException, ServletException {        PageContext pageContext = null;        HttpSession session = null;        ServletContext application = null;        ServletConfig config = null;        JspWriter out = null;        Object page = this;        JspWriter _jspx_out = null;        PageContext _jspx_page_context = null;        try {            response.setContentType("text/html;charset=UTF-8");            pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);            _jspx_page_context = pageContext;            application = pageContext.getServletContext();            config = pageContext.getServletConfig();            session = pageContext.getSession();            out = pageContext.getOut();            _jspx_out = out;            out.write("
    "); out.write("??????IP"); out.write("
    "); String ip = request.getRemoteAddr(); out.write(ip); if (_jspx_meth_xdp_005fviewIP_005f0(_jspx_page_context)) { return; } } catch (Throwable t) { if (!(t instanceof SkipPageException)) { out = _jspx_out; if (out != null && out.getBufferSize() != 0) { try { out.clearBuffer(); } catch (IOException e) { } } if (_jspx_page_context != null) { _jspx_page_context.handlePageException(t); } } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } private boolean _jspx_meth_xdp_005fviewIP_005f0(PageContext _jspx_page_context) throws Throwable { PageContext pageContext = _jspx_page_context; JspWriter out = pageContext.getOut(); me.gacl.web.tag.ViewIPTag _jspx_th_xdp_005fviewIP_005f0 = (me.gacl.web.tag.ViewIPTag) _005fjspx_005ftagPool_005fxdp_005fviewIP_005fnobody.get(me.gacl.web.tag.ViewIPTag.class); _jspx_th_xdp_005fviewIP_005f0.setPageContext(pageContext); _jspx_th_xdp_005fviewIP_005f0.setParent(null); int _jspx_eval_xdp_005fviewIP_005f0 = _jspx_th_xdp_005fviewIP_005f0.doStartTag(); if (_jspx_th_xdp_005fviewIP_005f0.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) { _005fjspx_005ftagPool_005fxdp_005fviewIP_005fnobody.reuse(_jspx_th_xdp_005fviewIP_005f0); return true; } _005fjspx_005ftagPool_005fxdp_005fviewIP_005fnobody.reuse(_jspx_th_xdp_005fviewIP_005f0); return false; }}

    ??

    ???????????????????JSP?????????????????????JSP?????????????????????????????

    转载地址:http://wnkr.baihongyu.com/

    你可能感兴趣的文章
    OpenMCU(四):STM32F103启动汇编代码分析
    查看>>
    OpenMetadata 命令执行漏洞复现(CVE-2024-28255)
    查看>>
    OpenMMLab | AI玩家已上线!和InternLM解锁“谁是卧底”新玩法
    查看>>
    OpenMMLab | S4模型详解:应对长序列建模的有效方法
    查看>>
    OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
    查看>>
    OpenMMLab | 不是吧?这么好用的开源标注工具,竟然还有人不知道…
    查看>>
    OpenMMLab | 如何解决大模型长距离依赖问题?HiPPO 技术深度解析
    查看>>
    OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
    查看>>
    OpenMP 线程互斥锁
    查看>>
    OpenMV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
    查看>>
    openoffice使用总结001---版本匹配问题unknown document format for file: E:\apache-tomcat-8.5.23\webapps\ZcnsDms\
    查看>>
    views
    查看>>
    OpenPPL PPQ量化(2):离线静态量化 源码剖析
    查看>>
    OpenPPL PPQ量化(3):量化计算图的加载和预处理 源码剖析
    查看>>
    OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
    查看>>
    OpenPPL PPQ量化(5):执行引擎 源码剖析
    查看>>
    openpyxl 模块的使用
    查看>>
    OpenResty & Nginx:详细对比与部署指南
    查看>>
    openresty 前端开发入门六之调试篇
    查看>>