zoukankan      html  css  js  c++  java
  • jsp:set/getProperty底层实现的探究

    关于jsp:set/getProperty底层实现的探究

    今天上课讲到<jsp:useBean>时涉及到了<jsp:setProperty>和<jsp:getProperty>两个标签。使用它俩可以获取和修改JavaBean中Java类的属性值,后面例子中又给出了直接调用Java类方法获取和修改属性值的方法,我们发现二者结果是一样的,旁边的hyx给出了关键性的问题,setP和getP实现机制和类方法调用一致吗?我心生疑问。

    我们来一探究竟:

    1. 起初我先注释掉*.Java文件中setXXX()和getXXX()方法,然后运行jsp,看会发生什么。

     

    发现会在setProperty()以及getProperty()那里报错。

     我感觉setP()和getP()底层实现应该会是调用了Java类中的方法,但依水老师持不同观点,她认为setP()和getP()应该另有一套机制。

    2. 查找资料后发现,Servlet会为jsp生成Java文件,我们去找找答案。

    来到eclipse-workplace(你自己的eclipse-workplace目录)

    ->.metadata->.plugins->org.eclipse.wst.server.core->tmp0->work->Catalina->localhost->first->org->apache->jsp->yourfilename_jsp.java

    我们来比较一下

    *.Jsp

     

     我们可以看出,具体实现的时候,是用pageContext的findAttribute方法找对应类,然后调用该类方法来实现的setProperty()和getProperty()。

    3. 我们再来对比一下直接调用类方法和getP()

     

     在生成Java代码时,直接调用类方法……清爽整洁,而setP()和getP()……存在即合理吧!

    总结:

    1. jsp:set/getProperty在代码生成的时候是经由pageContext找到类(对象)然后调用其类方法实现的。而不是有其他什么magic 操作!

    2. 速度上来讲,看的出来(jsp标签手续繁多)比直接调用类方法慢的多!!!

    参考资料:

    [1]如何找到Servlet编译jsp生成的*.java文件

    https://blog.csdn.net/qq_39021393/article/details/81108916

    [2]点子的来源

    http://www.cnblogs.com/Mike_Chang/p/10082550.html

  • 相关阅读:
    KTorrent 2.1
    Krusader-双面板文件治理器
    VirtualBox 1.3.4
    QEMU 0.9.0 & QEMU Accelerator 1.3.0pre10
    Sweep:音频编辑器材
    USBSink-优盘同步备份东西
    玩转 MPlayer(1)
    玩转 MPlayer(2)
    活动目录之迁移
    再学 GDI+[26]: TGPPen 画笔对齐 SetAlignment
  • 原文地址:https://www.cnblogs.com/yocichen/p/10656352.html
Copyright © 2011-2022 走看看