仓酷云
标题:
JAVA网页编程之Servlet和JSP的线程平安成绩
[打印本页]
作者:
柔情似水
时间:
2015-1-18 11:16
标题:
JAVA网页编程之Servlet和JSP的线程平安成绩
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。js|servlet|平安|成绩<Pstyle="TEXT-INDENT:2em">编写Servlet和JSP的时分,线程平安成绩很简单被疏忽,假如无视了这个成绩,你的程序就存在潜伏的隐患.<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">1.Servlet的性命周期<Pstyle="TEXT-INDENT:2em">Servlet的性命周期是由Web容器卖力的,当客户端第一次哀求Servlet时,容器卖力初始化Servlet,也就是实例化这个Servlet类.今后这个实例就卖力客户真个哀求,一样平常不会再实例化其他Servlet类,也就是有多个线程在利用这个实例.Servlet之以是比CGI效力高就是由于Servlet是多线程的.假如该Servlet被声明为单线程模子的话,容器就会保护一个实例池,那末将存在多个实例.<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">2.Servlet的线程平安<Pstyle="TEXT-INDENT:2em">Servlet标准已声明Servlet不是线程平安的,以是在开辟Servlet的时分要注要这个成绩.这里以一个实际的模子来讲明成绩,先界说一个Servlet类,再界说一个SmulateMultiThread类和WebContainer类.<Pstyle="TEXT-INDENT:2em">importjavax.servlet.http.HttpServlet;<Pstyle="TEXT-INDENT:2em">importjavax.servlet.ServletException;<Pstyle="TEXT-INDENT:2em">importjavax.servlet.http.HttpServletRequest;<Pstyle="TEXT-INDENT:2em">importjavax.servlet.http.HttpServletResponse;<Pstyle="TEXT-INDENT:2em">importjava.io.IOException;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">//该类摹拟多线程Servlet的情形<Pstyle="TEXT-INDENT:2em">publicclassSmulateMultiThreadimplementsRunnable{<Pstyle="TEXT-INDENT:2em">publicSmulateMultiThread(){<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">publicstaticvoidmain(String[]args){<Pstyle="TEXT-INDENT:2em">//处置100个哀求<Pstyle="TEXT-INDENT:2em">for(inti=0;i<100;i++)<Pstyle="TEXT-INDENT:2em">{<Pstyle="TEXT-INDENT:2em">newThread(newSmulateMultiThread()).start();<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">publicvoidrun(){<Pstyle="TEXT-INDENT:2em">HttpServletRequestrequest=null;<Pstyle="TEXT-INDENT:2em">HttpServletResponseresponse=null;<Pstyle="TEXT-INDENT:2em">try{<Pstyle="TEXT-INDENT:2em">WebContainer.getServlet().doGet(request,response);<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">catch(IOExceptionex){<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">catch(ServletExceptionex){<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">//这是一个Servlet类<Pstyle="TEXT-INDENT:2em">classUnsafeServletextendsHttpServlet{<Pstyle="TEXT-INDENT:2em">privateStringunsafe;<Pstyle="TEXT-INDENT:2em">publicvoidinit()throwsServletException{<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">//ProcesstheHTTPGetrequest<Pstyle="TEXT-INDENT:2em">publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{<Pstyle="TEXT-INDENT:2em">unsafe=Thread.currentThread().getName();<Pstyle="TEXT-INDENT:2em">System.out.println(unsafe);<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">//这个是容器类<Pstyle="TEXT-INDENT:2em">classWebContainer{<Pstyle="TEXT-INDENT:2em">privatestaticUnsafeServletus=newUnsafeServlet();<Pstyle="TEXT-INDENT:2em">publicstaticUnsafeServletgetServlet(){<Pstyle="TEXT-INDENT:2em">returnus;<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">}<Pstyle="TEXT-INDENT:2em">输入了100分歧的线程称号,假如有100个哀求同时被这个Servlet处置的话,那末unsafe便可能有100种往值,最初客户端将失掉毛病的值.好比客户1哀求的线程名为thread-1,可是前往给他的多是thread-20.体现在实际中就是,我上岸的用户名是user1,上岸后酿成了user2.<Pstyle="TEXT-INDENT:2em">那末如何才干是Servlet平安呢,但凡多个线程能够共享的就不要利用(实例变量+类变量),就这么复杂.也能够利用synchronized同步办法,可是如许效力不高,还可使用单线程模子,如许的话效力就更低了,100个哀求同时来的时分就要实例化100个实例.<Pstyle="TEXT-INDENT:2em">办法中的一时变量是不会影响线程平安的,由于他们是在栈上分派空间,并且每一个线程都有本人公有的栈空间.<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">3.JSP中线程平安<Pstyle="TEXT-INDENT:2em">JSP的实质是Servlet,一切只需分明了Servlet的平安成绩,JSP的平安成绩应当很简单了解.利用<%!%>声明的变量是Servlet的实例变量,不是线程平安的,其他都是线程平安的.<Pstyle="TEXT-INDENT:2em"><%!StringunsafeVar;%>//不是线程平安的<Pstyle="TEXT-INDENT:2em"><%StringsafeVar;%>//线程平安的<Pstyle="TEXT-INDENT:2em">总结:线程平安成绩次要是由实例变量酿成的,不论在Servlet仍是JSP,大概在Struts的Action内里,不要利用实例变量,任何办法内里都不要呈现实例变量,你的程序就是线程平安的.
但是我同意你的观点,对于大型项目来说,应该是采用框架的一部分,根据功能的不同而改进,欢迎你能再提出些宝贵意见,我会多多学习的。说到jbuilder,我可能是个人感觉,用的时候确实没有vs爽,我最喜欢的IDE是netbeans,谢谢。
作者:
因胸联盟
时间:
2015-1-20 19:01
[url]http://www.ckuyun.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://www.ckuyun.com[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者:
小女巫
时间:
2015-1-25 21:13
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
老尸
时间:
2015-1-26 09:05
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者:
莫相离
时间:
2015-2-4 13:29
是一种突破用户端机器环境和CPU
作者:
再见西城
时间:
2015-2-9 23:36
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
冷月葬花魂
时间:
2015-2-18 01:37
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者:
柔情似水
时间:
2015-3-1 18:29
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者:
分手快乐
时间:
2015-3-7 05:30
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者:
兰色精灵
时间:
2015-3-11 11:44
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者:
爱飞
时间:
2015-3-18 09:10
是一种语言,用以产生「小应用程序(Applet(s))
作者:
第二个灵魂
时间:
2015-3-25 14:34
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2