关于servlet难理解的问题

问题描述

小弟最近写servlet进行项目开发,最近遇到了几个让我很迷惑的问题,希望大家帮忙!(主要是被多线程和jvm给干扰了!) 项目特点:高并发,服务器端开发模式servlet+dao 首先:我在servlet这块进行了数据的验证,我将验证这块单独写在servlet里面自定义的方法里,然后弄了一个成员变量,比如pid等等,我的疑问是:我这样做对于高并发访问servlet的时候成员变量的值是不是不可靠的,也就是没有同步会互斥?第二个问题是:抒写一个成员变量和方法对于jvm的运行有影响,还是说我直接把这个验证写在post中或者get中更好(主要是验证太多,写在一起以后重写麻烦)第四个:我有点迷糊的就是用户访问一个servelt它是会产生一个新的servlet对象呢?还是以单例的模式只用一个? 二:在dao层中,每个dao都是一个个static方法,然后servlet直接方法,这样做要不要对dao里面的每个方法进行同步。唉,小弟对多线程实在是有点没办法,有什么可以去学习下不 问题补充:servlet不是以单例模式只生成一个吗?怎么会生成一个个对象呢?

解决方案

引用我想说的是,我公司在用dao的时候是每个方法都加了一个static,也就是把dao当成了工具类在使用,所以我在想怎么就没有同步问题呢...servlet这块,我奇怪的是为什么struts2里面成员变量就不怕同步问题呢..servlet就有这问题 struts2的原理其实就是在servlet里面生成多个action,也就是说每次请求都生成一个新action,所以没有线程安全的问题,所以我们把变量现在action里面肯定是没问题的。 而你公司那么用只是说现在的运行环境还没有过同步问题,不代表真的没问题。 至于struts2的原理不懂的可以问我,我最近做了自己的一个mvc,模拟的struts2,可以给你讲讲。
解决方案二:
1,servlet确实线程非安全的,假如你把变量设置成servlet的局部变量,是会有问题的。所以最好在get或者post里面设置变量。2,对于dao这一层,不用每个都加同步,你只需要在方法体内比如 public void save(){ synchronized(this){}}这样加。加的地方越小越好,性能影响的小。3,dao方法设置成static是没有问题的,但是建议不要这么做。假如确实要用成static的或者dao是单例的,那么对于update,save这样的方法体内需要想上面那样加上同步锁。假如是Dao dao=new Dao()这样的,那么就不用加锁,因为每次都会生成一个新的dao,不会有线程问题。希望我的回答对你有帮助,不懂的可以站内问我。
解决方案三:
引用① 我这样做对于高并发访问servlet的时候成员变量的值是不是不可靠的②第四个:我有点迷糊的就是用户访问一个servelt它是会产生一个新的servlet对象呢?还是以单例的模式只用一个? 请参见:http://blog.csdn.net/cyliao/article/details/4098229上面说的很详细,我摘录一段给你看,如下:引用Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。引用抒写一个成员变量和方法对于jvm的运行有影响,还是说我直接把这个验证写在post中或者get中更好建议你别把验证直接写在 POST 或者 GET 方法中,拆分出来的好, 这样一目了然,容易维护。引用在dao层中,每个dao都是一个个static方法,然后servlet直接方法,这样做要不要对dao里面的每个方法进行同步你需要做的是对那些进行数据库访问的操作一定要进行同步,不然并发量一大,必出问题不可。
解决方案四:
同步一定要在非常必要的地方才使用,不然在工程当中到处同步会严重降低系统的反应的。
解决方案五:
1。用户访问一个servelt是会产生一个新的servlet对象的。2。在dao层中,每个dao都是一个个static方法 那你就需要考虑同步的问题了。不明白你为什么会把里面的方法都写成static的。

时间: 2024-12-30 07:08:45

关于servlet难理解的问题的相关文章

一个好难理解的c++编译错误.

问题描述 一个好难理解的c++编译错误. 代码如下: #include using namespace std; main(){ set s; const char* p; s.erase(p); } 编译器发出错误: error: invalid conversion from 'const char*' to 'std::set::key_type {aka char*}' [-fpermissive] s.erase(p); 解决方案 set s: 然后就会runtime error 然后

老一辈难理解的互联网职业:我们不是修电脑的

过年回家,总免不了向家乡父老解释自己的职业,而对互联网行业的极客们来说,向非互联网行业的亲戚朋友说明白自己是干嘛的,也许是比写需求文档和写代码更难完成的任务. 不久前我在极客公园微博上发起了一个讨论 ,让大家来聊聊互联网行业里,那些解释起来很蛋疼的工种.大家的讨论很欢乐,现在把它们整理出来,以飨读者. 我是做网站的 在许多亲戚朋友心中,互联网也许就等同于网站,所以说自己是"做网站的",也许是最简单有效的解决方案: @我是H先生 : 我很艰难才跟老爸解释百度腾讯网易,解释什么是互联网,正

Javascript之旅——第十站:为什么都说闭包难理解呢?

研究过js的朋友大多会说,理解了js的原型和闭包就可以了,然后又说这些都是js的高级内容,然后就又扯到了各种神马的作用域...然后不少 人就会被忽悠的云里雾里...下面我也试着来说说闭包,看我说的这个是否浅显易懂...   一:闭包含义 闭包是个专业词汇,这样才能显得在js中是高大上的货色,官方定义我这里就不敢修改它,定义如下:就是有权访问另一个函数作用域的变量的函数.   二:一个简单的场景 上面的定义大概也能看得懂,但是不知道为什么不把"另一个函数" 改成 "包含函数&q

求高手解释API中这2句话。。很难理解

问题描述 java.awt接口TransparencyGraphicsConfigurationgc;BuffedImagebuf=gc.createCompatibleImage(intwidth,intheight,inttransparency);如果transparency=Transparency.BITMASK所创建的buf中的alpha到底是1.0还是0.0!!staticfinalintBITMASK表示保证完全不透明的图像数据(alpha值为1.0)或完全透明的图像数据(alp

HDOJ(HDU) 2178 猜数字(题意有点难理解、、、)

Problem Description A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" . 问B猜n次可以猜到的最大数. Input 第1行是整数T,表示有T组数据,下面有T行 每行一个整数n (1 ≤ n ≤ 30) Output 猜n次可以猜到的最大数 Sample Input 2 1 3 Sample Output 1 7 这个题目我总感觉题意没说明白,没办法.参考了一下网上的题意. 题意就是: 最多猜n次一定可以猜到1

选择jsp而不是servlet作为BS前台主流方案是JAVA的战略性方向错误

js|servlet|错误|战略|主流  原文许多人认为JSP是JAVA向微软ASP挑战的成功产品,到今天,围绕着JSP方案发展出了TAG/EL等技术,JSP作为JAVA的BS前台界面方案看来已经是无法逆转.但在我看来,JAVA选择JSP这种表达形式,恰恰是它最失败的地方,是对ASP的一种拙劣的模仿,它本来可以做得更好的,甚至可能据此让微软彻底退出服务器领域,但最终,却可能成为足以令JAVA最终失败的重大战略方向性错误.JAVA到今天仍具有微软所有语言所不具备的优点,就以C#而言,只不过是形似而

js中的闭包之我理解

闭包是一个比较抽象的概念,尤其是对js新手来说.书上的解释实在是比较晦涩,对我来说也是一样. 但是他也是js能力提升中无法绕过的一环,几乎每次面试必问的问题,因为在回答的时候.你的答案的深度,对术语的理解以及js内部解释器的运作 方式的描述,都是可以看出你js实际水平的.即使你没答对,也能让考官对你的水平有个评估.那么我先来说说我对js中的闭包的理解. 闭包是很多语言都具备的特性,在js中,闭包主要涉及到js的几个其他的特性:作用域链,垃圾(内存)回收机制,函数嵌套,等等. 在理解闭包以前.最好

PHP中类的理解和应用[二]

PHP中类的理解和应用[二]       许多PHP的爱好者在学习过程中感到对PHP中类的概念较难理解和掌握,虽然知道类既然存在就有其存在的道理,但是由于平时接触和使用的机会较少,也就一略而过.其实,只要我们理解变量和函数这些PHP基本概念的话,掌握类的含义就不成问题.鉴于类在PHP的重要作用,本文将结合具体事例介绍PHP中类的概念和应用.         (一)       所谓类就是指由变量和作用于变量的函数组成的集合.类提供了一种对现实世界中事物的描述方式.通过有效的使用类,我们可以将描述

PHP中类的理解和应用[一]

PHP中类的理解和应用[一]       许多PHP的爱好者在学习过程中感到对PHP中类的概念较难理解和掌握,虽然知道类既然存在就有其存在的道理,但是由于平时接触和使用的机会较少,也就一略而过.其实,只要我们理解变量和函数这些PHP基本概念的话,掌握类的含义就不成问题.鉴于类在PHP的重要作用,本文将结合具体事例介绍PHP中类的概念和应用.         (一)       所谓类就是指由变量和作用于变量的函数组成的集合.类提供了一种对现实世界中事物的描述方式.通过有效的使用类,我们可以将描述