如何查看自定义标签中被别人封装起来的代码,求高人指教!

手里有个别人写的小项目,里边有些自己封装的标签,但是标签里边具体的方法却看不到,有人说是通过反编译工具可以看到,但是找了半天只找到了能反编译java代码的工具,但是找不到能反编译页面代码的,这个项目的页面是用jsp+js写的,里边也用了些struts2的自定义标签。怎样才能查看,请高手给我指条明路吧!

0

1个回答

标签有两种实现方式:
1.最简单的,通过tag实现,这个tag就是个小的JSP,需要被容器编译后才能执行;
2.自定义标签的dtd,用java实现功能,然后通过taglib导入进来;
一般来说项目中tag 就足够使用了,你可以尝试 从这方面入手^_^。

0
qq_24264771
qq_24264771 表示还是不太明白你说的意思。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
用反编译软件查看公司自己封装好打成jar包的底层代码
越来越多的公司用自己封装的数据层交互框架,在查看底层与数据库交互(增删改查)的时候,用Ctrl+鼠标点击方法时发现封装的方法看不到,以下界面: 这是因为公司已经把该方法的类打成了jar包,如果你想看底层方法怎么实现
JS代码如何不被别人看到?
https://blog.csdn.net/qq_16559905/article/details/51932653
jsp自定义标签Tag封装接口和实现方法
jsp自定义标签Tag封装接口和实现方法
JAVA 面向对象 隐藏和封装
本页面更新日期: 2016年07月22日前言 在前面程序中,经常出现通过某个对象直接访问其成员变量的情况. 这可能引起一些潜在问题,比如将某个 Person 的 age 成员变量直接设为 1000. 这在语法上没有任何问题, 但显然违背了当前的自然规律. 人怎么可能活到 1000岁 - - . (就现在的科学来讲) Java也考虑到了这种情况, 为你提供了 类和对象的成员变量
查看内部封装实现方法
快速查看被调用方法的内部代码
封装整个类到dll
封装整个类到dll中,防止别人查看代码
【自定义标签开发】11-标签案例-打包自己的标签库
我们之前学习了自定义标签开发的原理和一些小样例的开发,那么,我们开发之后的自定义标签怎么发布给别人来使用呢?接下来我们就学习一下如何打包自己的标签库。 要打包自己开发好的自定义标签,需要进行一下步骤: (1)创建一个Java project: (2)将写好的自定义标签处理器类拷贝到工程下: 注意:里面的工程报错是因为缺少了j2ee/jsp/servlet的包,这里我
自定义标签的自定义方法
 判断这个值是不是你输入的内容或者一个输入的范围,我判断一个简单的值是不是它注意:首先基于 ssm框架的   在web.xml   我的请求是以‘/’<servlet-mapping> <servlet-name>spring_mvc</servlet-name> <url-pattern>/</url-pattern></se...
H5如何自定义标签
lang="en">     charset="UTF-8">   type="text/javascript" src="angular-1.3.0.js">       var app = angular.module("timer", []);   app.directive("nowTim
代码求指教,求高人指教
rn#includern#includern#includern#includern#define RANK 9rnusing namespace std;rnclass Openrn public:rn Open():vec(RANK);rn Open(const vector& vec,const int fn):vec(RANK)rn this->vec.assign(vec.begin(),vec.begin()+9);rn this->fathernumber = fn;rn ;rn void exchange(int x,int y)rn swap(this->vec[x],this->vec[y]);rn ;rn int getfathernumber()return this->fathernumber;;rn vector getvec()return this->vec;;rn protected:rn vector vec;rn int fathernumber;rn ;rnrnclass Close:public Openrn public:rn Close();rn Close(const vector& vec,const int fn,const int number):Open(vec,fn)this->number=number;;rn int getnumber()return this->number;;rn int find(int x)rn bool flag = false;rn int i ;rn for( i = 0 ; i < this->vec.size() ; i++ )rn if( this->vec[i] == x )rn flag = true;rn break;rn rn if(flag) return i ;rn else return -1 ;rn ;rn protected:rn int number ;rn rn ;rnostream& operator<<(ostream& output,const vector& vec)rn for( int i = 0 ; i < vec.size() ; i++ ) output<& sg)vect.assign(sg.begin(),sg.end());;rn bool operator()(Close* clo) const rn bool tflag = true ;rn for(int i = 0 ; i < 9 ; i++ )rn if( clo->getvec()[i] != this->vect[i] )rn tflag = false;rn break;rn rn return tflag;rn ;rn private:rn static vector vect;rn ; rn vector Compare::vect; rn void Input(vector& s0,vector& sg);rnint main()rnrn int count = 0 ;rn vector s0,sg;rn int arr0[9]=2,8,3,1,0,4,7,6,5;rn int arr1[9]=8,1,3,2,0,4,7,6,5;rn //Input(s0,sg);rn s0.assign(arr0,arr0+9);rn sg.assign(arr0,arr0+9);rn Open open0(s0,0);rn Open openg(sg,0);rn rn queue open;rn open.push(&open0);rn vector close;rn close.reserve(100);rn bool successflag = false;rn Open* subnode;rn Close* closenew;rn vector temp; rn dorn cout<getvec()<getvec(),openfirst->getfathernumber(),++count);rn close.push_back(closenew);rn rn if( equal((*closenew).getvec().begin(),(*closenew).getvec().end(),sg.begin()))//successrn rn successflag = true;rn break;rn rn rn rn int blankpos = closenew->find(0);rn rn cout<<"size"<getvec()<getvec().begin(),closenew->getvec().begin()+9); //wrong!!!!!!!!!rn system("pause");rn if( blankpos !=0 && blankpos != 3 && blankpos != 6 ) //leftrn rn swap(temp[blankpos-1],temp[blankpos]);rn //subnode = new Open(closenew->getvec(),closenew->getnumber());rn subnode = new Open(temp,closenew->getnumber());rn if( equal(subnode->getvec().begin(),subnode->getvec().end(),sg.begin()))//successrn rn successflag = true;rn break;rn rn rn swap(temp[blankpos-1],temp[blankpos]);rn Compare::setVect(subnode->getvec());rn cout<<"left:"<getvec()<::iterator close_find_if = find_if(close.begin(),close.end(),Compare());rn if( close_find_if == close.end() ) cout<<"ddd"; open.push(subnode);rn else delete(subnode);rn rn if( blankpos !=0 && blankpos !=1 && blankpos !=2 ) //uprn rn swap(temp[blankpos-3],temp[blankpos]);rn subnode = new Open(temp,closenew->getnumber());rn if( equal(subnode->getvec().begin(),subnode->getvec().end(),sg.begin()))//successrn rn successflag = true;rn break;rn rn swap(temp[blankpos-3],temp[blankpos]);rn rn Compare::setVect(subnode->getvec());rn cout<<"up:"<getvec()<::iterator close_find_if = find_if(close.begin(),close.end(),Compare()); rn if( close_find_if == close.end() ) open.push(subnode);rn else delete(subnode);rn rn if( blankpos !=2 && blankpos !=5 && blankpos !=8 ) //rightrn rn swap(temp[blankpos+1],temp[blankpos]);rn subnode = new Open(temp,closenew->getnumber());rn if( equal(subnode->getvec().begin(),subnode->getvec().end(),sg.begin()))//successrn rn successflag = true;rn break;rn rn swap(temp[blankpos+1],temp[blankpos]);rn rn Compare::setVect(subnode->getvec());rn cout<<"right:"<getvec()<::iterator close_find_if = find_if(close.begin(),close.end(),Compare());rn if( close_find_if == close.end() ) open.push(subnode);rn else delete(subnode);rn rn if( blankpos !=6 && blankpos !=7 && blankpos !=8 ) //downrn rn swap(temp[blankpos+3],temp[blankpos]);rn subnode = new Open(temp,closenew->getnumber()); rn if( equal(subnode->getvec().begin(),subnode->getvec().end(),sg.begin()))//successrn rn successflag = true;rn break;rn rn swap(temp[blankpos+3],temp[blankpos]); rn Compare::setVect(subnode->getvec());rn cout<<"down:"<getvec()<::iterator close_find_if = find_if(close.begin(),close.end(),Compare());rn if( close_find_if == close.end() ) open.push(subnode);rn else delete(subnode);rn rn vector().swap(temp);rn while( !open.empty() );rn if(successflag)rn cout<<"reachable"<
求一个字节中被置1 的位的个数。
实现原理参考我的另一篇博客 嵌入式开发中对寄存器的位操作 #include &amp;lt;stdio.h&amp;gt; int numOfBitOne(char var) { int i, cnt = 0; for(i=0; i&amp;lt;8; i++) { if( (var&amp;gt;&amp;gt;i) &amp;amp; 0x1 ) cnt++; } return cnt; } int main() ...
Qt 如何打包成.exe程序,让别人直接运行起来
Qt程序写好了,想打包成.exe可执行文件,让别人的电脑也能直接运行起来,很简单。 找到Qt的自带工具: 打开它: 1.dir 2. cd bin 3.dir *deploy* 4.windeployqt.exe C:\...\...\.....--------------------得到Qt  Debug的文件夹exe文件处,例如我的: windeployqt.exe C:\U...
约瑟夫环vc++代码
数据结构作业约瑟夫环的c++代码 第一次上传 求指教
JSP自定义标签(封装<select>标签)
JSP自定义标签,封装<select>标签,有两个属性,第一个属性是SQL select语句,只要语法准确,查询出来的数据就会自动加载到select标签,否则无法加载;第二个属性是标签的名称.绝对实用
java实现端口扫描程序
本程序实现端口扫描,但有一点问题,请高人指教以下
asp.net文件系统网站
学习asp.net时的课程设计,请高人指教,嘎嘎。。。
Web版聊天系统
对ajax结合.net的简单应用!望高人指教!
artcurs
artcurs(未破解)求高人破解
如何学习别人的代码(代码量较大时)
  最近开始看一些大工程量的python代码,作为深度学习小白,每次看着那么多份文件、遇到几千行代码就很头疼,无从下手。而且经常会遇到看了后边忘前面、看不下去等问题。   搜了一些博客和知乎,看到了大神们提出的阅读代码的方法,就想着整理一下,可帮助自己梳理代码逻辑和进阶写代码。最近也有在实践,感觉比硬着头皮看要好多了,希望以后能更加熟练!   以下只涉及阅读学习的一些方法。当然,想要掌握得更好,光...
将声卡音量控制封装成一个类
看懂别人写的代码改的,请多指教!
用Struts做的图书管理(未做完)
用Struts做的图书管理(未做完),请高人指教
spring&nbsp;MVC整合redis实例(简…
个人官方网站 :点击进入 第一步:pom.xml文件中//因为项目中需要用到jedis的jar (jedis是redis的客户端 通过这个客户端我们可以操作我们的redis数据库) MVC整合redis实例(简单配置实例)泽0715新浪博客" TITLE="spring MVC整合redis实例(简单配置实例)泽0715新浪博客" /> 第二步:spring的配置文件
实现jsp自定义标签
如何在jsp页面中写自定义标签 这里我要实现一个自定义标签的小例子,我把用户名存在cookie中,在登录界面我要从cookie中取出用户名 一.创建和使用一个tag library的基本步骤: 1.创建标签的处理类URLDEcoderTag.java package tm.change.tag; import java.io.IOException; import java.ne
Aandroid88KUY
求指教
用teplate标签封装小程序中多次复用的html代码
先用tempalte标签封装好要复用的html代码,然后在另一个文件引入此模板,然后调用模板,注意无法封装对应的js文件,而且css文件也需要引入模板对应的css文件   注意:(&amp;lt;improt  src=&quot;&quot;   /&amp;gt;  此处要有闭合斜杆号 ) ...
(一)解析第三方接口封装为对象
最近做了一个还算可以上手的外包项目,就是解析第三方接口的数据然后展示在页面中,整个项目做下来还是有很多收获的,学到的有很多,包括xml的解析,echarts曲线的应用,video标签的应用及添加定时任务器定时刷新数据库等,耗时将近两个月,在这里先做一个简单的整理,后续还会继续完善。      1、得到第三方给的开放接口说明文档。            1)、接口地址:            
【React】运行他人的react项目遇到的坑
    在学习React的过程中,研究其他人写的react项目,是个很好的方式。由于react项目,有许多的依赖包,而且一般在上传源码的过程中都不会上传node_modules下的依赖包,因此在运行其他人的react项目时,需要自己在本地安装依赖环境。 本次学习的项目是W3CSchool的一个练习项目,从网上下载到本地,放在自己的工作空间中,该项目下载链接参考如下: W3C学习项目下载地址 ...
leetcode学习其他人的代码
最近刷leetcode时发现了一个比较好的学习方法, accept后,可以查看其他人的代码,对比自己的,可以学到很多精妙的思路。 例如,这道题目,求出一个列表的所有子列表: If nums = [1,2,3], a solution is: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
Java Web学习笔记(一)FreeMarker自定义标签实现生成前端脚本验证
最近在学习Java Web因为.net已经写的想吐了。通过网易云课堂了解了当前常用的SSM框架的使用方法,前期一切都很顺利,包括数据库的访问、事务提交、对象注入、面向切片等等,但是当我对页面视图进行实现时发现相对于.net有一点不方便。Java Web的视图层的实现方式非常多,常用的有JSP、FreeMarker和Thymeleaf等等,但是在验证这一块我发现都只能使用后端验证,通过例如hiber
Codeforces上如何查看别人的代码
第一步:点击题目右边的人数 第二步:点击最左边的数字即可查看
往后狗生请指教字体(.ttf格式)
往后狗生请指教字体是XFont字库中的一款个性字体,该字体书写的非常认真,横平竖直,笔画中没有勾画与弯曲,能够应用于文本装潢、信息展示、网页设计、篆刻制模、数据制作、装潢设计、计算艺术设计、视觉设计、字帖等一切合法应用场景,欢迎大家前来下载。 PS:该字体支持android、Windows、Mac等系统。 Windows系统文字安装方法 第一种:适合安装多个字体文件 直接将字体复制到C:\
每日一题 No.34 Codeforces怎么查看别人代码和查看自己错在哪里
本题要求:一般的A题网站无法查看别人的代码和每个测试案例是什么。 但是Codeforces就不同啦,只要不是正在比赛的题,你就可以查看别人的代码和看自己的测试点到底哪里出错啦,具体的我今天来交给大家输入格式:无输出格式:无输入样例:无输出样例:无解题思路 :查看别人代码 点击这个题号即可查看别人代码。查看自己错在哪里 勾选查看的代码都是朋友的(包括自己) 接下来就跟查看别人代码一样了
别人自定义组件如何查看代码
<%@ Register Assembly="OnlineUser" Namespace="OnlineUser" TagPrefix="cc1" %> rnrn rnrnAssembly="OnlineUser" 这个是什么意思的呢?rnrn如何查看他的代码 ? 怎么查找联系的呢? 高手帮忙 谢谢。rnrn是不是这个刷新的呢rnnamespace OnlineUserrnrn /// rn /// Script 生成执行xmlhttp的js脚本。rn /// rn public class Script : PlaceHolderrn rn /// rn /// 设置js自动刷新的间隔时间,默认为25秒。rn /// rn public virtual int RefreshTimern rn getrn rn object obj1 = this.ViewState["RefreshTime"];rn if (obj1 != null) return int.Parse(((string)obj1).Trim()); rn return 25;rn rn setrn rn this.ViewState["RefreshTime"] = value;rn rn rn protected override void Render(HtmlTextWriter writer)rn rn //从web.config中读取xmlhttp的访问地址rn string refreshUrl = (string)ConfigurationSettings.AppSettings["refreshUrl"];rn string scriptString = @"
一键查看别人网站源码
一键查看别人网站源码 还用辛苦的去收集源码么 想要 就拿
关于 C# 封装 C++ 代码 求高人指教
//声明rntypedef int SMTK_INT;rntypedef unsigned int SMTK_UINT;rntypedef unsigned long SMTK_DWORD;rntypedef unsigned long SMTK_HANDLE;rnrnrn//结构rnrntypedef struct _tagSmtkChannel /* 通道 */rnrnSMTK_INT nID; /* 通道号 */rnSMTK_INT nType; /* 见(通道类型定义) */rnchar szName[StringLength]; /* 通道名称 */rn SmtkChannel, *PSmtkChannel;rnrntypedef struct _tagSmtkDeviceResource /* 设备资源 */rnrnchar szPUID[16]; /* PUID */rnchar szName[StringLength]; /* 设备名称 */rnSMTK_INT nChannelCount; /* 通道数量 */rnSmtkChannel stChannel[1]; /* 通道数组 */rn SmtkDeviceResource, *PSmtkDeviceResource;rnrnrn//方法rnrn/**************** 设备配置接口 ***************/rnSMTK_INT SMTK_GetDeviceResource(SMTK_HANDLE hHandle, PSmtkDeviceResource pDeviceResource, SMTK_DWORD dwBufferLength);rnrnrn//调用rnm_sWndPair[m_iWndPair].hSmtk 指设备信息rnm_sWndPair[m_iWndPair].hSmtk = SMTK_Login(csUser, csPas, szBufIP, 3456);rnrnrn BYTE Buffer[1024] = 0;rnSmtkDeviceResource* pSmtkDeviceResource = (SmtkDeviceResource*)Buffer;rnSMTK_INT iGet = SMTK_GetDeviceResource(m_sWndPair[m_iWndPair].hSmtk, pSmtkDeviceResource, 1024);rnif(iGet != 0)rnrnMessageBox("获取设备资源失败!");rnreturn;rnrnrnrnrn下面是我的rnrnrn /// rn /// 设备资源rn /// rn public struct SmtkDeviceResourcern rn /// rn /// char szPUID[16]; szPUIDrn /// rn public string szPUID;rnrn /// rn /// char szPUID[32]; szName 设备名称 rn /// rn public string szName;rn /// rn /// 通道数量 rn /// rn public int nChannelCount;rn /// rn /// 通道数组rn /// rn ///[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]rn public SmtkChannel[] stChannel;rn rnrn ///通道信息rn public struct SmtkChannelrn rn /// rn /// 通道号rn /// rn public int nID;rnrn /// rn /// 见(通道类型定义)rn /// rn public int nType;rnrn /// rn /// char szPUID[32]; szName 通道名称 rn /// rn public string szName;rn rnrnrnrn /// rn /// 获取设备信息rn /// rn /// rn /// rn /// rn /// [DllImport("SMTK.dll")]rn public static extern int SMTK_GetDeviceResource(IntPtr hHandle, IntPtr pDeviceResource, int dwBufferLength);rnrnrn//调用rn rnrn byte[] vBuffer = new byte[1024];rn IntPtr vAddress = Marshal.UnsafeAddrOfPinnedArrayElement(vBuffer, 0); // 取得内存首地址rnrn int cmd = SmartSDK.SMTK_GetDeviceResource(m_hSmtk, vAddress, vBuffer.Length);rnrn SmtkDeviceResource entries = (SmtkDeviceResource)BytesToStruct(vBuffer, typeof(SmtkDeviceResource));rnrn报 C# 尝试读取或写入受保护的内存。这通常指示其他内存已损坏rn求高人指教rnprivate static object BytesToStruct(byte[] bytes, Type strcutType)rn rn int size = Marshal.SizeOf(strcutType);rn IntPtr buffer = Marshal.AllocHGlobal(size);rn tryrn rn Marshal.Copy(bytes, 0, buffer, size);rn return Marshal.PtrToStructure(buffer, strcutType);rn rn finallyrn rn Marshal.FreeHGlobal(buffer);rn rn
vs2010 如何快速查看 别人工程代码
最近需要查看一个工程的代码,快速熟悉别人的代码,才能在别人代码的基础上继续开发, 方法1、  使用vs 的 查看类图功能:               使用方法:点击-->  项目名---右键----查看类图   结果如下边的图所示,点击每一个类,在右下角可以看到每个类的详细情况。   改方法能够看到类结构,但是还不是UML, 看起属性和方法还是有点费劲。
如何修改别人的PE为己所用-系统封装教程
修改别人的PE为己所用-系统封装教程 系统封装教程-3如何修改别人的PE为己所用
Eclipse 自定义标签库
建立文件: SelfTag:自己创建的类(名字随便起) tag.tld:标签库的自定义文件(后缀必须为 .tld) web.xml:用于映射标签库的地址 TestTag.jsp:测试使用的jsp     SelfTag类 package com.Tag; import java.io.IOException; import java.sql.Connection; i...
Java Web 自定义标签 tag
        在项目中,涉及到细粒度的权限管理,需要控制按钮级别的显示与隐藏,由于需要达到可配置,不能写死在页面中,因此想到了使用自定义标签来实现。        实现的大概思路是,在后台判断用户是否具有相应的按钮权限,如果有,则显示按钮,如果没有则隐藏按钮。(这种方法对于安全性要求不够高,因为懂得编程的人都能够通过执行特定的方法来调用后端接口,因此需要在后端继续做一层用户的判断,此处不多介绍。...
Spring自定义标签使用及原理
最近大半年一直在看spring的源码,寻思着需要写点什么,也锻炼下自己文档编写的能力。本篇我们将分为以下小节进行讲解。 自定义标签的用途 自定义标签使用 自定义标签如何被spring解析 1.自定义标签的用途 自定义标签可以说是spring提供的最大、最强的Hook(钩子),通俗的讲就是给后续小伙伴开发组件,提供一个标准公共可拔插”接口”,大家可以理解为手机充电器的工业标准口,为了方便各个...