编写线程安全的JSP应用程序

作者: 新闻动态  发布:2020-01-03

  JSP暗中同意是以多线程方式试行的,这是JSP与ASP,PHP,PEGL450L等脚本语言不平等的地点,也是它的优势之风姿罗曼蒂克,但万一不细心四线程中的同步难题,会使所写的JSP程序有难以开掘的不当。上边以贰个例证表达JSP中的二十四线程难题及消除措施。

  外界财富:

  局地变量

[1] [2]  下一页

  局部变量在仓库中分配,因为各类线程都有它和睦的库房空间,所以是线程安全的。

  静态类不用被实例化,就可平昔采取,亦非线程安全的。

  静态类

  JSP系统提供的8个类变量,JSP中用到的OUT,REQUEST,RESPONSE,SESSION,CONFIG,PAGE,PAGECONXT是线程安全的,应用程式LICATION在所有连串内被选择,所以不是线程安全的。

  当客商端第一遍呼吁某二个JSP文件时,服务端把该JSP编写翻译成二个CLASS文件,并创立一个此类的实例,然后创造三个线程管理CLIENT端的倡议。假诺有多个客商端同期乞请该JSP文件,则服务端会创立四个线程。每一个客商端乞请对应三个线程。以四线程方式进行可大大收缩对系统的财富要求,进步系统的并发量及响适时间.对JSP中只怕用的的变量表达如下:

  实例变量是在堆中分红的,并被归于该实例的保有线程分享,所以不是线程安全的。

  实例变量

  上边的次第模拟网上买东西中的生机勃勃有的,把客商在浏览器中输入的客商名,购买的物料名称,数量保存到表BUY中。在savebuy(State of Qatar函数中用到了实例变量,所以它不是线程安全的。因为:程序中的每一条语句都不是原子操作,如name=request.getParameter("name"卡塔尔国;在实施是会对应三个机器指令,在别的时候都大概因系统调解而转入梦眠境况,让别的的线程继续执行。若是线程A在施行到(1卡塔尔的时候转入睡眠情形,线程B初始实行并改正QUANTITY的值,那么当又到A实行时,它会从调用savebuy(卡塔尔函数起首施行,那样它保存到表中的QUANTITY是被线程B改革的值,那么线程A对应的顾客所实际购买的数码与保持到表中的数码不均等,那是个相当惨恻的标题。

  在前后相继中或者会有多个线程或进度同不经常候操作同二个能源(如:四个线程或进度同期对三个文书进行写操作State of Qatar.当时也要介怀同步难题。

  风度翩翩、JSP的中存在的三十二线程难点:

  <%@ page import="javax.naming.*,java.util.*,java.sql.*,weblogic.common.*" %><%String nameString product;long quantity;name=request.getParameter("name");product=request.getParameter("product");quantity=request.getParameter("quantity"); /*(1)*/savebuy();%><%!public void savebuy(){ /*进行数据库操作,把数据保存到表中*/ try {  Properties props = new Properties();  props.put("user","scott");  props.put("password","tiger");  props.put("server","DEMO");  Driver myDriver = (Driver) iver").newInstance();  conn = myDriver.connect("jdbc:weblogic:oracle", props);  stmt = conn.createStatement();  String inssql = "insert into buy(empid, name, dept) values (?, ?, ?,?)";  stmt = conn.prepareStatement(inssql);  stmt.setString(1, name);  stmt.setString(2, procuct);  stmt.setInt(3, quantity);  stmt.execute(); } catch (Exception e) {  System.out.println("SQLException was thrown: " + e.getMessage()); } finally //close connections and {  try {   if(stmt != null)    stmt.close();   if(conn != null)    conn.close();  } catch (SQLException sqle) {   System.out.println("SQLException was thrown: " + sqle.getMessage());  } }}%>

  二、上边包车型大巴事例存在的十二线程难题:

本文由全球彩票历史版本发布于新闻动态,转载请注明出处:编写线程安全的JSP应用程序

关键词:

上一篇:中的类型转换
下一篇:没有了