仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 555|回复: 12
打印 上一主题 下一主题

[学习教程] JAVA网站制作之编程手艺:编写线程平安的JSP程序

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。js|平安|编程|程序<Pstyle="TEXT-INDENT:2em">JSP默许是以多线程体例实行的,这是JSP与ASP,PHP,PERL等剧本言语纷歧样的中央,也是它的上风之一,但假如不注重多线程中的同步成绩,会使所写的JSP程序有难以发明的毛病。上面以一个例子申明JSP中的多线程成绩及办理办法。<Pstyle="TEXT-INDENT:2em">1、JSP的中存在的多线程成绩:<Pstyle="TEXT-INDENT:2em">当客户端第一次哀求某一个JSP文件时,服务端把该JSP编译成一个CLASS文件,并创立一个该类的实例,然后创立一个线程处置CLIENT真个哀求。假如有多个客户端同时哀求该JSP文件,则服务端会创立多个线程。每一个客户端哀求对应一个线程。以多线程体例实行可年夜年夜下降对体系的资本需求,进步体系的并发量及呼应工夫.对JSP中大概用的的变量申明以下:<Pstyle="TEXT-INDENT:2em">实例变量<Pstyle="TEXT-INDENT:2em">实例变量是在堆平分配的,并被属于该实例的一切线程共享,以是不是线程平安的.<Pstyle="TEXT-INDENT:2em">JSP体系供应的8个类变量<Pstyle="TEXT-INDENT:2em">JSP顶用到的OUT,REQUEST,RESPONSE,SESSION,CONFIG,PAGE,PAGECONXT是线程平安的,APPLICATION在全部体系内被利用,以是不是线程平安的.<Pstyle="TEXT-INDENT:2em">部分变量<Pstyle="TEXT-INDENT:2em">部分变量在仓库平分配,由于每一个线程都有它本人的仓库空间,以是是线程平安的.<Pstyle="TEXT-INDENT:2em">静态类<Pstyle="TEXT-INDENT:2em">静态类不必被实例化,便可间接利用,也不是线程平安的.<Pstyle="TEXT-INDENT:2em">内部资本:<Pstyle="TEXT-INDENT:2em">在程序中大概会有多个线程或历程同时操纵统一个资本(如:多个线程或历程同时对一个文件举行写操纵).此时也要注重同步成绩.<Pstyle="TEXT-INDENT:2em">2、上面的例子存在的多线程成绩:<Pstyle="TEXT-INDENT:2em">
  1. <%@pageimport="javax.naming.*,java.util.*,java.sql.*,weblogic.common.*"%><%StringnameStringproduct;longquantity;name=request.getParameter("name");product=request.getParameter("product");quantity=request.getParameter("quantity");/*(1)*/savebuy();%><%!publicvoidsavebuy(){/*举行数据库操纵,把数据保留到表中*/try{Propertiesprops=newProperties();props.put("user","scott");props.put("password","tiger");props.put("server","DEMO");DrivermyDriver=(Driver)iver").newInstance();conn=myDriver.connect("jdbc:weblogic:oracle",props);stmt=conn.createStatement();Stringinssql="insertintobuy(empid,name,dept)values(?,?,?,?)";stmt=conn.prepareStatement(inssql);stmt.setString(1,name);stmt.setString(2,procuct);stmt.setInt(3,quantity);stmt.execute();}catch(Exceptione){System.out.println("SQLExceptionwasthrown:"+e.getMessage());}finally//closeconnectionsand{try{if(stmt!=null)stmt.close();if(conn!=null)conn.close();}catch(SQLExceptionsqle){System.out.println("SQLExceptionwasthrown:"+sqle.getMessage());}}}%>
复制代码
<Pstyle="TEXT-INDENT:2em">下面的程序摹拟网上购物中的一部分,把用户在扫瞄器中输出的用户名,购置的物品称号,数目保留到表BUY中。在savebuy()函数顶用到了实例变量,以是它不是线程平安的.由于:程序中的每条语句都不是原子操纵,如name=request.getParameter("name");在实行是会对应多个呆板指令,在任什么时候候都大概因体系调剂而转入眠眠形态,让其他的线程持续实行.假如线程A在实行到(1)的时分转入眠眠形态,线程B入手下手实行并改动QUANTITY的值,那末当又到A实行时,它会从挪用savebuy()函数入手下手实行,如许它保留到表中的QUANTITY是被线程B悔改的值,那末线程A对应的用户所实践购置的数目与坚持到表中的数据纷歧致.这是个很严峻的成绩.<Pstyle="TEXT-INDENT:2em">3、办理办法<Pstyle="TEXT-INDENT:2em">接纳单线程体例<Pstyle="TEXT-INDENT:2em">在该JSP文件中加上:,使它以单线程体例实行,这时候,仍旧只要一个实例,一切客户真个哀求以串行方式实行。如许会下降体系的功能.<Pstyle="TEXT-INDENT:2em">对函数savebuy()加synchronized举行线程同步,该JSP仍旧以多线程体例实行,但也会下降体系的功能publicsynchronizedvoidsavebuy()
{
......
}
<Pstyle="TEXT-INDENT:2em">接纳部分变量取代实例变量,函数savebuy()声明以下:<Pstyle="TEXT-INDENT:2em">由于在savebuy()中利用的是传给他的形参,是在仓库平分配的,以是是线程平安的.<Pstyle="TEXT-INDENT:2em">publicvoidsavebuy(Stringname,Stringproduct,intquantity)
{
......
}<Pstyle="TEXT-INDENT:2em">挪用体例改成:<Pstyle="TEXT-INDENT:2em"><%<Pstyle="TEXT-INDENT:2em">Stringname<Pstyle="TEXT-INDENT:2em">Stringproduct;<Pstyle="TEXT-INDENT:2em">longquantity;<Pstyle="TEXT-INDENT:2em">name=request.getParameter("name");<Pstyle="TEXT-INDENT:2em">product=request.getParameter("product");<Pstyle="TEXT-INDENT:2em">quantity=request.getParameter("quantity");<Pstyle="TEXT-INDENT:2em">savebuy(name,product,quantity)%>
<Pstyle="TEXT-INDENT:2em">假如savebuy的参数良多,或这些数据要在良多中央用到,也可声明一个类,并用他做参数,如:publicclassbuyinfo
{
Stringname;
Stringproduct;
longquantity;
}
publicvoidsavebuy(buyinfoinfo)
{
......
}
<Pstyle="TEXT-INDENT:2em">挪用体例改成:<Pstyle="TEXT-INDENT:2em"><%<Pstyle="TEXT-INDENT:2em">buyinfouserbuy=newbuyinfo();<Pstyle="TEXT-INDENT:2em">userbuy.name=request.getParameter("name");<Pstyle="TEXT-INDENT:2em">userbuy.product=request.getParameter("product");<Pstyle="TEXT-INDENT:2em">userbuy.quantity=request.getParameter("quantity");<Pstyle="TEXT-INDENT:2em">savebuy(userbuy);%>
<Pstyle="TEXT-INDENT:2em">以是最好是用3,由于1,2会下降体系的功能.多线程成绩一样平常只要在在年夜并发量会见时,才有大概呈现,而且很难反复呈现,以是应在编程时就时候注重。

再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
不帅 该用户已被删除
沙发
发表于 2015-1-20 18:33:54 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
莫相离 该用户已被删除
板凳
发表于 2015-1-29 14:35:20 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
谁可相欹 该用户已被删除
地板
发表于 2015-2-2 20:43:50 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
简单生活 该用户已被删除
5#
发表于 2015-2-6 19:25:55 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
金色的骷髅 该用户已被删除
6#
发表于 2015-2-10 11:45:22 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
因胸联盟 该用户已被删除
7#
发表于 2015-2-28 10:37:06 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
admin 该用户已被删除
8#
发表于 2015-3-2 19:46:37 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
海妖 该用户已被删除
9#
发表于 2015-3-4 07:20:17 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
飘飘悠悠 该用户已被删除
10#
发表于 2015-3-7 19:23:41 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
第二个灵魂 该用户已被删除
11#
发表于 2015-3-11 00:56:18 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
若相依 该用户已被删除
12#
发表于 2015-3-17 17:10:54 | 只看该作者
是一种为 Internet发展的计算机语言
山那边是海 该用户已被删除
13#
 楼主| 发表于 2015-3-24 13:52:12 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 19:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表