- 浏览: 74372 次
- 性别:
- 来自: 文一西路969号
文章分类
最新评论
-
weituotian:
什么鬼?看不懂
PhpStorm+Xampp+Xdebug环境搭建 -
簡單從泚銷夨:
houyujiangjun 写道簡單從泚銷夨 写道houyuj ...
web+native客户端静态资源内置与动态更新 -
houyujiangjun:
簡單從泚銷夨 写道houyuj ...
web+native客户端静态资源内置与动态更新 -
簡單從泚銷夨:
houyujiangjun 写道一年前已经做过,这个问题其实不 ...
web+native客户端静态资源内置与动态更新 -
houyujiangjun:
一年前已经做过,这个问题其实不用这样考虑,建议楼主思考缓存的本 ...
web+native客户端静态资源内置与动态更新
之前的分页标签写完了,放到线上没出现问题,之后由于要支持wml和html版本,并且要支持form表单,所以改了一下,在TagSupport加了一些变量,没一会写完了,后测试的时候发现好像有缓存,把之前复制的值存下来了,不是每次都new吗?好吧!google,原来确实如此,反编译jsp生成的class文件,发现一下代码。
public void _jspInit() { this._005fjspx_005ftagPool_005fc_005fchoose = TagHandlerPool.getTagHandlerPool(getServletConfig()); this._005fjspx_005ftagPool_005fc_005fwhen_0026_005ftest = TagHandlerPool.getTagHandlerPool(getServletConfig()); this._005fjspx_005ftagPool_005fc_005fif_0026_005ftest = TagHandlerPool.getTagHandlerPool(getServletConfig()); this._005fjspx_005ftagPool_005fc_005fforEach_0026_005fvar_005fitems = TagHandlerPool.getTagHandlerPool(getServletConfig()); this._el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); this._jsp_annotationprocessor = ((AnnotationProcessor)getServletConfig().getServletContext().getAttribute(AnnotationProcessor.class.getName())); } public void _jspDestroy() { this._005fjspx_005ftagPool_005fc_005fout_0026_005fvalue_005fnobody.release(); this._005fjspx_005ftagPool_005fc_005fchoose.release(); this._005fjspx_005ftagPool_005fc_005fwhen_0026_005ftest.release(); this._005fjspx_005ftagPool_005fc_005fif_0026_005ftest.release(); this._005fjspx_005ftagPool_005fc_005fforEach_0026_005fvar_005fitems.release(); }
这里面有个缓存池-TagHandlerPool,看源码。
public class TagHandlerPool { private Tag[] handlers; public static String OPTION_TAGPOOL="tagpoolClassName"; public static String OPTION_MAXSIZE="tagpoolMaxSize"; // index of next available tag handler private int current; public static TagHandlerPool getTagHandlerPool( ServletConfig config) { TagHandlerPool result=null; String tpClassName=getOption( config, OPTION_TAGPOOL, null); if( tpClassName != null ) { try { Class c=Class.forName( tpClassName ); result=(TagHandlerPool)c.newInstance(); } catch (Exception e) { e.printStackTrace(); result=null; } } if( result==null ) result=new TagHandlerPool(); result.init(config); return result; } protected void init( ServletConfig config ) { int maxSize=-1; String maxSizeS=getOption(config, OPTION_MAXSIZE, null); if( maxSizeS != null ) { try { maxSize=Integer.parseInt(maxSizeS); } catch( Exception ex) { maxSize=-1; } } if( maxSize <0 ) { maxSize=Constants.MAX_POOL_SIZE; } this.handlers = new Tag[maxSize]; this.current = -1; } /** * Constructs a tag handler pool with the default capacity. */ public TagHandlerPool() { // Nothing - jasper generated servlets call the other constructor, // this should be used in future + init . } /** * Constructs a tag handler pool with the given capacity. * * @param capacity Tag handler pool capacity * @deprecated Use static getTagHandlerPool */ public TagHandlerPool(int capacity) { this.handlers = new Tag[capacity]; this.current = -1; } /** * Gets the next available tag handler from this tag handler pool, * instantiating one if this tag handler pool is empty. * * @param handlerClass Tag handler class * * @return Reused or newly instantiated tag handler * * @throws JspException if a tag handler cannot be instantiated */ public Tag get(Class handlerClass) throws JspException { Tag handler = null; synchronized( this ) { if (current >= 0) { handler = handlers[current--]; return handler; } } // Out of sync block - there is no need for other threads to // wait for us to construct a tag for this thread. try { return (Tag) handlerClass.newInstance(); } catch (Exception e) { Rate throw new JspException(e.getMessage(), e); } } /** * Adds the given tag handler to this tag handler pool, unless this tag * handler pool has already reached its capacity, in which case the tag * handler's release() method is called. * * @param handler Tag handler to add to this tag handler pool */ public void reuse(Tag handler) { synchronized( this ) { if (current < (handlers.length - 1)) { handlers[++current] = handler; return; } } // There is no need for other threads to wait for us to release handler.release(); } /** * Calls the release() method of all available tag handlers in this tag * handler pool. */ public synchronized void release() { for (int i=current; i>=0; i--) { handlers[i].release(); } } protected static String getOption( ServletConfig config, String name, String defaultV) { if( config == null ) return defaultV; String value=config.getInitParameter(name); if( value != null ) return value; if( config.getServletContext() ==null ) return defaultV; value=config.getServletContext().getInitParameter(name); if( value!=null ) return value; return defaultV; } }
原来每个jsp生成的servlet都有个TagHandlerPool,每次初始化的时候创建各个标签的连接池,然后想用就从缓存池里面获取,由于此缓存标签用完还要放到缓存池中,所以每次标签里面的变量要重新复制,不然会出现数据不一致的问题。
发表评论
-
MAC设置$JAVA_HOME
2016-05-26 14:46 720MAC设置$JAVA_HOME 查看java信息: ... -
个人心得
2015-01-10 23:26 0总结个人新的,随时补充。 1.分布式id生成器 1 ... -
交换两个int型数据的静态方法
2014-11-06 15:59 599之前朋友面试遇 ... -
Intellij idea-13.1编译mina报NullPointerException
2014-03-22 10:38 1203java程序员碰的最多的异常应该是NullP ... -
JVM-GC调优的经验和规则
2013-11-24 22:47 1441JVM-GC调优的经验和规 ... -
java collector种类
2013-11-24 16:22 1类别 serial collector p ... -
java多线程中的Future模式
2013-08-25 00:33 0java多线程中的Future模式对于java开发者来说不是 ... -
记一次JVM GC优化
2013-07-19 14:44 1944前端时间我们的服务器老收到报警短信,访问的时候又不慢(主要 ... -
JVM参数优化
2013-07-14 16:12 0-XX:+ExplicitGCInvokesConcurre ... -
分析java线程(analyze java thread)
2013-04-18 14:52 1683今天看到一篇好的文章 ... -
Native+Web构建APP
2013-01-01 22:23 0BS和CS架构一直是两个并存的模式,但总有些人认为谁会取代谁, ... -
莫名的错误
2012-08-24 15:13 1656今天做项目迁移,直接在服务器上copy、vim. ... -
jsp标签缓存池分析
2012-05-26 12:24 5之前的分页标签写完了,放到线上没出现问题,之后由 ... -
网站活动开发的苦与乐
2012-05-19 23:03 0记得才进公司的时候,面试的时候经理也没和我具体说进 ... -
网络爬虫简单策略
2012-05-05 21:27 6440前几天同学问我, ... -
SPRING DATA - REDIS配置
2012-04-13 14:49 11648前段时间由于业务需要,研究了下redi ... -
SPRING DATA - REDIS配置
2012-04-13 14:43 0前段时间由于业务需要,研究了下redis,第一次 ... -
Maven发布骨架详解
2012-04-09 11:57 6632由于我们的项目周期比较短,所以要频繁创建项目,而且项目的架构几 ... -
配置Log4j(很详细)
2009-12-10 14:44 735来自:http://www.blogjava.net/ ... -
ThreadLocal实现session唯一(转载)
2009-11-27 18:25 2911在利用Hibernate开发DAO模 ...
相关推荐
- **View**: JSP页面,用于展示系统界面,如登录页面、学生信息展示页等,通常包含HTML、CSS和嵌入的JSP标签或脚本元素。 - **Controller**: Servlet或JSP动作,接收用户的HTTP请求,处理后调用Model进行数据处理,...
- **JSP 页面缓存**:通过缓存 JSP 输出,减少服务器计算,提高响应速度。 - **JSP 预编译**:使用 JSP 编译器预编译 JSP 页面,提高首次请求的响应时间。 - **数据库优化**:优化 SQL 查询,使用连接池,减少...
- EJB与JSP的优缺点分析 **第十三章:JSP与Ajax** - Ajax基础:XMLHttpRequest对象 - 使用JavaScript进行异步通信 - JSP页面与Ajax的交互 **第十四章:JSP的安全性** - 安全问题的识别与防范 - 用户认证与授权 - ...
- **性能优化**:例如缓存策略、数据库连接池、异步处理等,提升系统性能。 通过阅读《JSP核心技术和电子商务应用实例源代码分析》,开发者不仅可以掌握JSP的基本概念和技术,还能深入理解如何在实际项目中应用...
在JSP中,Controller功能通常由Servlet实现,或者使用JSP动作标签如 `<jsp:forward>` 或 `<jsp:include>` 来实现。 **三、MSSQL2000数据库** MSSQL2000是Microsoft公司的一款关系型数据库管理系统,用于存储和管理...
9. **JSP标签库** 可以使用自定义标签库或标准标签库(如JSTL)简化JSP页面的编写,提高可读性和复用性。例如,JSTL的`<c:forEach>`可以用来遍历集合,显示书籍列表。 10. **安全与性能优化** 网上书店系统还需要...
- JSP标签:如JSTL的`fmt`标签用于国际化,`c`标签进行条件判断和循环操作。 7. **部署与运行** - 需要一个支持JSP和Servlet的Web服务器,如Tomcat,Apache,Jetty等。 - 将源码部署到服务器的Web应用目录下,...
10. 安全性:为了防止SQL注入、XSS攻击等安全问题,应使用预编译的SQL语句,进行输入验证,以及使用安全的JSP标签库。 以上就是基于JSP和JavaBean实现BBS项目所涉及的主要知识点,涵盖了Web开发的基础、核心技术和...
- `<jsp:action>`标签:用于执行自定义的行为,如转发、包含、重定向等。 3. 数据库连接与操作: - 通常,学生成绩管理系统会使用关系型数据库,如MySQL或Oracle,存储学生、课程和成绩信息。 - JDBC(Java ...
同时,通过缓存、连接池等技术提升系统性能。 **MyEclipse集成环境** MyEclipse是一款强大的Java EE集成开发环境,支持JSP开发。它集成了Tomcat、Jetty等应用服务器,便于调试和部署JSP应用。在MyEclipse中,可以...
JSP的核心概念包括JSP指令(如page、include和taglib)、脚本元素(scriptlets、表达式和声明)以及JSP标签库(如JSTL)。 2. **Servlet原理**: JSP最终会被转换为Servlet,因此理解Servlet的工作原理至关重要。...
【标题】"jsp 学生成绩系统"是一个基于JavaServer Pages(JSP)技术构建的教育管理应用程序,用于管理和分析学生的学术成绩。JSP是一种服务器端脚本语言,它允许开发人员将HTML、CSS、JavaScript与Java代码结合,...
9. **安全与性能优化**:系统可能涉及到防止SQL注入、XSS攻击的安全措施,以及缓存策略、连接池等性能优化手段。 10. **部署与运行环境**:JSP应用通常需要在支持Java的Web服务器上运行,如Tomcat、Jetty等,开发者...
定期使用性能监控工具分析JSP应用程序的运行状态,找出瓶颈所在,并进行针对性优化。例如,使用JMeter或LoadRunner进行压力测试,了解系统在高并发下的表现;使用VisualVM或JProfiler等工具进行JVM调优,优化内存...
- **1.3.1 JSP页面中的元素**:这部分解释了JSP页面中常见的几种元素,如JSP标签、脚本片段、声明、表达式等。 - **1.3.2 JSP语法概要**:这里提供了JSP语法的基本概述,包括不同类型的标签和它们的作用。 - **1.3.3...
- **自定义标签**:教授如何开发自定义JSP标签,以及如何使用它们来封装复杂的页面逻辑。 - **会话管理**:讨论如何使用cookie、session等机制来进行用户会话管理。 - **错误处理**:介绍如何在JSP中处理异常情况,...
在JSP页面中,开发者可以使用JSP指令、脚本元素、表达式以及EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)标签库来编写代码。 Oracle,作为一款广泛使用的商业关系型数据库管理系统...
JSP文件中,开发人员可能使用了JSP动作标签(如<jsp:include>、<jsp:useBean>)和脚本元素(Scriptlets,如 )来实现动态功能。JSP表达式()可能用于将Java变量输出到页面上。此外,可能还使用了自定义标签库(Tag...
5. **统计分析**:访问量统计、热门文章排行等,可能需要实时更新和缓存技术。 6. **界面设计**:使用CSS和JavaScript提升用户体验,如响应式布局适应不同设备。 通过JSP+SQLServer实现的个人博客系统,不仅可以...