java-web 小知识点

Servlet并发问题

纯理论:1   合理决定在Servlet中定义变量的作用域类型

                局部变量(方法中定义)------->每一个线程执行局部变量所在的方法时,在线程堆栈就会创建这个局部变量,线程执行完毕方法,局部变量就over.  多个线程同时执行该局部变量,那么每个线程都拥有自己的局部变量

            实例变量(类中,非方法中)--->每一个类实例都拥有自己的实例变量,实例生命周期,则变量也就over.多个线程同时执行一个实例方法A,若该实例方法A会访问一个实例变量,这么多的线程访问的是同一个实例变量  

            2  多个线程同时访问共享数据而导致并发问题的情况,使用java同步机制对线程进行同步 在Servlet需要执行的方法中添加  synchronized (this)

            3  废弃的SingleThreadModel接口

                   任一时刻,只允许有一个线程执行Servlet中的service()方法,多个用户访问的时候,则会将客户请求被放入等待队列,容器会依次响应队列中的每个客户请求,实际上禁止了多个客户端对一个Servlet的并发访问

                   Servlet容器为每个Servlet创建一个对象池,池中存放了同一个Servlet类的多个实例。若多个用户访问该Servlet,该Servlet会为每一个请求分配一个工作线程,并且从对象池中取出一个空闲的Servlet实例,将它分配给工作线程

                        每个工作线程执行自己的Sevlet实例的service()方法,实际上不同客户端访问的是同一个Servlet类的不同实例

 

动态部署文件,修改web代码能够及时响应,并且tomcat在启动的时候要点击的按钮是debug的那个按钮

 <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
			<Context path="" reloadable="true" docBase="D:\apache-tomcat-7.0.35\webapps"/>
</Host>

  

 配置log4日志文件输出的位置时

System.getProperty("user.dir");//项目所在的文件夹下面

模拟多次访问一个页面的时候,要使用类似下面的代码,URL加上参数是不能用模拟Post请求的

如下代码仅供参考

 URL                     url = new URL("http://localhost:8010/AGFSDataService/servlet/LoginJudge");
 HttpURLConnection	conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("POST");
		        conn.setConnectTimeout(10000);//连接超时 单位毫秒
		         conn.setReadTimeout(2000);//读取超时 单位毫秒
		         conn.setDoOutput(true);// 是否输入参数
		        StringBuffer params = new StringBuffer();
		        // 表单参数与get形式一样
		        params.append("TxtUserName").append("=").append("1").append("&")
		              .append("TxtPassword").append("=").append("1").append("&")
		              .append("choseDate").append("=").append("week");

  

posted @ 2014-07-15 18:13  奥东  阅读(306)  评论(0编辑  收藏  举报