仓酷云

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

[学习教程] JAVA教程之jspsmartupload

[复制链接]
跳转到指定楼层
#
发表于 2015-1-18 11:20:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难js1、安装篇

  jspSmartUpload是由www.jspsmart.com网站开辟的一个可无偿使用的全功效的文件上传下载组件,适于嵌进实行上传下载操纵的JSP文件中。该组件有以下几个特性:

1、利用复杂。在JSP文件中仅仅誊写三五行JAVA代码就能够弄定文件的上传或下载,便利。

2、能全程把持上传。使用jspSmartUpload组件供应的对象及其操纵办法,能够取得全体上传文件的信息(包含文件名,巨细,范例,扩大名,文件数据等),便利存取。

3、能对上传的文件在巨细、范例等方面做出限定。云云能够滤失落不切合请求的文件。

4、下载天真。仅写两行代码,就可以把Web服务器酿成文件服务器。不论文件在Web服务器的目次下或在别的任何目次下,都能够使用jspSmartUpload举行下载。

5、能将文件上传到数据库中,也能将数据库中的数据下载上去。这类功效针对的是MYSQL数据库,由于不具有通用性,以是本文禁绝备举例先容这类用法。

  jspSmartUpload组件能够从www.jspsmart.com网站上自在下载,紧缩包的名字是jspSmartUpload.zip。下载后,用WinZip或WinRAR将其解压到Tomcat的webapps目次下(本文以Tomcat服务器为例举行先容)。解压后,将webapps/jspsmartupload目次下的子目次Web-inf名字改成全年夜写的WEB-INF,如许一改jspSmartUpload类才干利用。由于Tomcat对文件名巨细写敏感,它请求Web使用程序相干的类地点目次为WEB-INF,且必需是年夜写。接侧重新启动Tomcat,如许就能够在JSP文件中利用jspSmartUpload组件了。

  注重,按上述办法安装后,只要webapps/jspsmartupload目次下的程序可使用jspSmartUpload组件,假如想让Tomcat服务器的一切Web使用程序都能用它,必需做以下事情:

1.进进命令行形态,将目次切换到Tomcat的webapps/jspsmartupload/WEB-INF目次下。

2.运转JAR打包命令:jarcvfjspSmartUpload.jarcom

(也能够翻开资本办理器,切换到以后目次,用WinZip将com目次下的一切文件紧缩成jspSmartUpload.zip,然后将jspSmartUpload.zip换名为jspSmartUpload.jar文件便可。)

3.将jspSmartUpload.jar拷贝到Tomcat的shared/lib目次下。


2、相干类申明篇

㈠File类

  这个类包装了一个上传文件的一切信息。经由过程它,能够失掉上传文件的文件名、文件巨细、扩大名、文件数据等信息。

  File类次要供应以下办法:

1、saveAs感化:将文件换名另存。

原型:

publicvoidsaveAs(java.lang.StringdestFilePathName)



publicvoidsaveAs(java.lang.StringdestFilePathName,intoptionSaveAs)

个中,destFilePathName是另存的文件名,optionSaveAs是另存的选项,该选项有三个值,分离是SAVE_PHYSICAL,SAVE_VIRTUAL,SAVE_AUTO。SAVE_PHYSICAL标明以操纵体系的根目次为文件根目次另存文件,SAVE_VIRTUAL标明以Web使用程序的根目次为文件根目次另存文件,SAVEAS_AUTO则暗示让组件决意,当Web使用程序的根目次存在另存文件的目次时,它会选择SAVE_VIRTUAL,不然会选择SAVE_PHYSICAL。

比方,saveAs("/upload/sample.zip",SAVE_PHYSICAL)实行后若Web服务器安装在C盘,则另存的文件名实践是c:uploadsample.zip。而saveAs("/upload/sample.zip",SAVE_VIRTUAL)实行后若Web使用程序的根目次是webapps/jspsmartupload,则另存的文件名实践是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVE_AUTO)实行时若Web使用程序根目次下存在upload目次,则其效果同saveAs("/upload/sample.zip",SAVE_VIRTUAL),不然同saveAs("/upload/sample.zip",SAVE_PHYSICAL)。

倡议:关于Web程序的开辟来讲,最好利用SAVE_VIRTUAL,以便移植。

2、isMissing

感化:这个办法用于判别用户是不是选择了文件,也即对应的表单项是不是有值。选择了文件时,它前往false。未选文件时,它前往true。

原型:publicbooleanisMissing()

3、getFieldName

感化:取HTML表单中对应于此上传文件的表单项的名字。

原型:publicStringgetFieldName()

4、getFileName

感化:取文件名(不含目次信息)

原型:publicStringgetFileName()

5、getFilePathName

感化:取文件全名(带目次)

原型:publicStringgetFilePathName

6、getFileExt

感化:取文件扩大名(后缀)

原型:publicStringgetFileExt()

7、getSize

感化:取文件长度(以字节计)

原型:publicintgetSize()

8、getBinaryData

感化:取文件数据中指定位移处的一个字节,用于检测文件等处置。

原型:publicbytegetBinaryData(intindex)。个中,index暗示位移,其值在0到getSize()-1之间。

㈡Files类

  这个类暗示一切上传文件的汇合,经由过程它能够失掉上传文件的数量、巨细等信息。有以下办法:

1、getCount

感化:获得上传文件的数量。

原型:publicintgetCount()

2、getFile

感化:获得指定位移处的文件对象File(这是com.jspsmart.upload.File,不是java.io.File,注重辨别)。

原型:publicFilegetFile(intindex)。个中,index为指定位移,其值在0到getCount()-1之间。

3、getSize

感化:获得上传文件的总长度,可用于限定一次性上传的数据量巨细。

原型:publiclonggetSize()

4、getCollection

感化:将一切上传文件对象以Collection的情势前往,以便别的使用程序援用,扫瞄上传文件信息。

原型:publicCollectiongetCollection()

5、getEnumeration

感化:将一切上传文件对象以Enumeration(列举)的情势前往,以便别的使用程序扫瞄上传文件信息。

原型:publicEnumerationgetEnumeration()

㈢Request类

  这个类的功效同等于JSP内置的对象request。只以是供应这个类,是由于关于文件上传表单,经由过程request对象没法取得表单项的值,必需经由过程jspSmartUpload组件供应的Request对象来猎取。该类供应以下办法:

1、getParameter

感化:猎取指定参数之值。当参数不存在时,前往值为null。

原型:publicStringgetParameter(Stringname)。个中,name为参数的名字。

2、getParameterValues

感化:当一个参数能够有多个值时,用此办法来取其值。它前往的是一个字符串数组。当参数不存在时,前往值为null。

原型:publicString[]getParameterValues(Stringname)。个中,name为参数的名字。

3、getParameterNames

感化:获得Request对象中一切参数的名字,用于遍历一切参数。它前往的是一个列举型的对象。

原型:publicEnumerationgetParameterNames()

㈣SmartUpload类这个类完成上传下载事情。

A.上传与下载共用的办法:

只要一个:initialize。

感化:实行上传下载的初始化事情,必需第一个实行。

原型:有多个,次要利用上面这个:

publicfinalvoidinitialize(javax.servlet.jsp.PageContextpageContext)

个中,pageContext为JSP页面内置对象(页面高低文)。

B.上传文件利用的办法:

1、upload

感化:上传文件数据。关于上传操纵,第一步实行initialize办法,第二步就要实行这个办法。

原型:publicvoidupload()

2、save

感化:将全体上传文件保留到指定目次下,并前往保留的文件个数。

原型:publicintsave(StringdestPathName)

和publicintsave(StringdestPathName,intoption)

个中,destPathName为文件保留目次,option为保留选项,它有三个值,分离是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。(同File类的saveAs办法的选项之值相似)SAVE_PHYSICAL唆使组件将文件保留到以操纵体系根目次为文件根目次的目次下,SAVE_VIRTUAL唆使组件将文件保留到以Web使用程序根目次为文件根目次的目次下,而SAVE_AUTO则暗示由组件主动选择。

注:save(destPathName)感化同等于save(destPathName,SAVE_AUTO)。

3、getSize

感化:取上传文件数据的总长度

原型:publicintgetSize()

4、getFiles

感化:取全体上传文件,以Files对象情势前往,能够使用Files类的操纵办法来取得上传文件的数量等信息。

原型:publicFilesgetFiles()

5、getRequest

感化:获得Request对象,以便由此对象取得上传表单参数之值。

原型:publicRequestgetRequest()

6、setAllowedFilesList

感化:设定同意上传带有指定扩大名的文件,当上传过程当中有文件名不同意时,组件将抛出非常。

原型:publicvoidsetAllowedFilesList(StringallowedFilesList)

个中,allowedFilesList为同意上传的文件扩大名列表,各个扩大名之间以逗号分开。假如想同意上传那些没有扩大名的文件,能够用两个逗号暗示。比方:setAllowedFilesList("doc,txt,,")将同意上传带doc和txt扩大名的文件和没有扩大名的文件。

7、setDeniedFilesList

感化:用于限定上传那些带有指定扩大名的文件。如有文件扩大名被限定,则上传时组件将抛出非常。

原型:publicvoidsetDeniedFilesList(StringdeniedFilesList)

个中,deniedFilesList为克制上传的文件扩大名列表,各个扩大名之间以逗号分开。假如想克制上传那些没有扩大名的文件,能够用两个逗号来暗示。比方:setDeniedFilesList("exe,bat,,")将克制上传带exe和bat扩大名的文件和没有扩大名的文件。

8、setMaxFileSize

感化:设定每一个文件同意上传的最年夜长度。

原型:publicvoidsetMaxFileSize(longmaxFileSize)

个中,maxFileSize为为每一个文件同意上传的最年夜长度,当文件超越此长度时,将不被上传。

9、setTotalMaxFileSize

感化:设定同意上传的文件的总长度,用于限定一次性上传的数据量巨细。

原型:publicvoidsetTotalMaxFileSize(longtotalMaxFileSize)

个中,totalMaxFileSize为同意上传的文件的总长度。

C.下载文件经常使用的办法

1、setContentDisposition

感化:将数据追加到MIME文件头的CONTENT-DISPOSITION域。jspSmartUpload组件会在前往下载的信息时主动填写MIME文件头的CONTENT-DISPOSITION域,假如用户必要增加分外信息,请用此办法。

原型:publicvoidsetContentDisposition(StringcontentDisposition)

个中,contentDisposition为要增加的数据。假如contentDisposition为null,则组件将主动增加"attachment;",以标明将下载的文件作为附件,了局是IE扫瞄器将会提醒另存文件,而不是主动翻开这个文件(IE扫瞄器一样平常依据下载的文件扩大名决意实行甚么操纵,扩大名为doc的将用word程序翻开,扩大名为pdf的将用acrobat程序翻开,等等)。

2、downloadFile

感化:下载文件。

原型:共有以下三个原型可用,第一个最经常使用,后两个用于特别情形下的文件下载(如变动内容范例,变动另存的文件名)。

①publicvoiddownloadFile(StringsourceFilePathName)

个中,sourceFilePathName为要下载的文件名(带目次的文件全名)

②publicvoiddownloadFile(StringsourceFilePathName,StringcontentType)

个中,sourceFilePathName为要下载的文件名(带目次的文件全名),contentType为内容范例(MIME格局的文件范例信息,可被扫瞄器辨认)。

③publicvoiddownloadFile(StringsourceFilePathName,StringcontentType,StringdestFileName)

个中,sourceFilePathName为要下载的文件名(带目次的文件全名),contentType为内容范例(MIME格局的文件范例信息,可被扫瞄器辨认),destFileName为下载后默许的另存文件名。

3、文件上传篇

㈠表单请求

关于上传文件的FORM表单,有两个请求:

1、METHOD使用POST,即METHOD="POST"。

2、增添属性:ENCTYPE="multipart/form-data"

上面是一个用于上传文件的FORM表单的例子:



<FORMMETHOD="POST"ENCTYPE="multipart/form-data"
ACTION="/jspSmartUpload/upload.jsp">
<INPUTTYPE="FILE"NAME="MYFILE">
<INPUTTYPE="SUBMIT">
</FORM>



㈡上传的例子

1、上传页面upload.html

本页面供应表单,让用户选择要上传的文件,点击"上传"按钮实行上传操纵。

页面源码以下:

<!--
文件名:upload.html
纵横软件制造中央雨亦奇(zhsoft88@sohu.com)
-->
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>文件上传</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
</head>

<body>
<p></p>
<palign="center">上传文件选择</p>
<FORMMETHOD="POST"ACTION="jsp/do_upload.jsp"
ENCTYPE="multipart/form-data">
<inputtype="hidden"name="TEST"value="good">
<tablewidth="75%"border="1"align="center">
<tr>
<td><divalign="center">1、
<inputtype="FILE"name="FILE1"size="30">
</div></td>
</tr>
<tr>
<td><divalign="center">2、
<inputtype="FILE"name="FILE2"size="30">
</div></td>
</tr>
<tr>
<td><divalign="center">3、
<inputtype="FILE"name="FILE3"size="30">
</div></td>
</tr>
<tr>
<td><divalign="center">4、
<inputtype="FILE"name="FILE4"size="30">
</div></td>
</tr>
<tr>
<td><divalign="center">
<inputtype="submit"name="Submit"value="上传它!">
</div></td>
</tr>
</table>
</FORM>
</body>
</html>



2、上传处置页面do_upload.jsp

本页面实行文件上传操纵。页面源码中具体先容了上传办法的用法,在此不赘述了。

页面源码以下:

<%--
文件名:do_upload.jsp
纵横软件制造中央雨亦奇(zhsoft88@sohu.com)
--%>
<%@pagecontentType="text/html;charset=gb2312"language="java"
import="java.util.*,com.jspsmart.upload.*"errorPage=""%>
<html>
<head>
<title>文件上传处置页面</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
</head>

<body>
<%
//新建一个SmartUpload对象
SmartUploadsu=newSmartUpload();
//上传初始化
su.initialize(pageContext);
//设定上传限定
//1.限定每一个上传文件的最年夜长度。
//su.setMaxFileSize(10000);
//2.限定总上传数据的长度。
//su.setTotalMaxFileSize(20000);
//3.设定同意上传的文件(经由过程扩大名限定),仅同意doc,txt文件。
//su.setAllowedFilesList("doc,txt");
//4.设定克制上传的文件(经由过程扩大名限定),克制上传带有exe,bat,
jsp,htm,html扩大名的文件和没有扩大名的文件。
//su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
//上传文件
su.upload();
//将上传文件全体保留到指定目次
intcount=su.save("/upload");
out.println(count+"个文件上传乐成!<br>");

//使用Request对象猎取参数之值
out.println("TEST="+su.getRequest().getParameter("TEST")
+"<BR><BR>");

//一一提取上传文件信息,同时可保留文件。
for(inti=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.Filefile=su.getFiles().getFile(i);

//若文件不存在则持续
if(file.isMissing())continue;

//显现以后文件信息
out.println("<TABLEBORDER=1>");
out.println("<TR><TD>表单项名(FieldName)</TD><TD>"
+file.getFieldName()+"</TD></TR>");
out.println("<TR><TD>文件长度(Size)</TD><TD>"+
file.getSize()+"</TD></TR>");
out.println("<TR><TD>文件名(FileName)</TD><TD>"
+file.getFileName()+"</TD></TR>");
out.println("<TR><TD>文件扩大名(FileExt)</TD><TD>"
+file.getFileExt()+"</TD></TR>");
out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
+file.getFilePathName()+"</TD></TR>");
out.println("</TABLE><BR>");

//将文件另存
//file.saveAs("/upload/"+myFile.getFileName());
//另存到以WEB使用程序的根目次为文件根目次的目次下
//file.saveAs("/upload/"+myFile.getFileName(),
su.SAVE_VIRTUAL);
//另存到操纵体系的根目次为文件根目次的目次下
//file.saveAs("c:        emp"+myFile.getFileName(),
su.SAVE_PHYSICAL);

}
%>
</body>
</html>



4、文件下载篇

1、下载链接页面download.html

页面源码以下:

<!--
文件名:download.html
纵横软件制造中央雨亦奇(zhsoft88@sohu.com)
-->
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>下载</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
</head>
<body>
<ahref="/jsp/do_download.jsp">点击下载</a>
</body>
</html>



2、下载处置页面do_download.jspdo_download.jsp展现了怎样使用jspSmartUpload组件来下载文件,从上面的源码中就能够看到,下载何其复杂。

源码以下:

<%@pagecontentType="text/html;charset=gb2312"
import="com.jspsmart.upload.*"%><%
//新建一个SmartUpload对象
SmartUploadsu=newSmartUpload();
//初始化
su.initialize(pageContext);
//设定contentDisposition为null以克制扫瞄器主动翻开文件,
//包管点击链接后是下载文件。若不设定,则下载的文件扩大名为
//doc时,扫瞄器将主动用word翻开它。扩大名为pdf时,
//扫瞄器将用acrobat翻开。
su.setContentDisposition(null);
//下载文件
su.downloadFile("/upload/怎样赚取我的第一桶金.doc");
%>



注重,实行下载的页面,在Java剧本局限外(即<%...%>以外),不要包括HTML代码、空格、回车或换行等字符,有的话将不克不及准确下载。不信的话,能够在上述源码中%><%之间到场一个换行符,再下载一下,包管堕落。由于它影响了前往给扫瞄器的数据流,招致剖析堕落。

3、怎样下载中文文件

jspSmartUpload固然能下载文件,但对中文撑持不敷。若下载的文件名中有汉字,则扫瞄器在提醒另存的文件名时,显现的是一堆乱码,很扫人兴。下面的例子就是如许。(这个成绩也是浩瀚下载组件所存在的成绩,很少有人办理,搜刮不到相干材料,可叹!)

为了给jspSmartUpload组件增添下载中文文件的撑持,我对该组件举行了研讨,发明对前往给扫瞄器的另存文件名举行UTF-8编码后,扫瞄器便能准确显现中文名字了。这是一个使人乐意的发明。因而我对jspSmartUpload组件的SmartUpload类做了晋级处置,增添了toUtf8String这个办法,修改部分源码以下:

publicvoiddownloadFile(Strings,Strings1,Strings2,inti)
throwsServletException,IOException,SmartUploadException
{
if(s==null)
thrownewIllegalArgumentException("File"+s+
"notfound(1040).");
if(s.equals(""))
thrownewIllegalArgumentException("File"+s+
"notfound(1040).");
if(!isVirtual(s)&&m_denyPhysicalPath)
thrownewSecurityException("Physicalpathis
denied(1035).");
if(isVirtual(s))
s=m_application.getRealPath(s);
java.io.Filefile=newjava.io.File(s);
FileInputStreamfileinputstream=newFileInputStream(file);
longl=file.length();
booleanflag=false;
intk=0;
byteabyte0[]=newbyte;
if(s1==null)
m_response.setContentType("application/x-msdownload");
else
if(s1.length()==0)
m_response.setContentType("application/x-msdownload");
else
m_response.setContentType(s1);
m_response.setContentLength((int)l);
m_contentDisposition=m_contentDisposition!=null?
m_contentDisposition:"attachment;";
if(s2==null)
m_response.setHeader("Content-Disposition",
m_contentDisposition+"filename="+
toUtf8String(getFileName(s)));
else
if(s2.length()==0)
m_response.setHeader("Content-Disposition",
m_contentDisposition);
else
m_response.setHeader("Content-Disposition",
m_contentDisposition+"filename="+toUtf8String(s2));
while((long)k<l)
{
intj=fileinputstream.read(abyte0,0,i);
k+=j;
m_response.getOutputStream().write(abyte0,0,j);
}
fileinputstream.close();
}

/**
*将文件名中的汉字转为UTF8编码的串,以便下载时能准确显现另存的文件名.
*纵横软件制造中央雨亦奇2003.08.01
*@params原文件名
*@return从头编码后的文件名
*/
publicstaticStringtoUtf8String(Strings){
StringBuffersb=newStringBuffer();
for(inti=0;i<s.length();i++){
charc=s.charAt(i);
if(c>=0&&c<=255){
sb.append(c);
}else{
byte[]b;
try{
b=Character.toString(c).getBytes("utf-8");
}catch(Exceptionex){
System.out.println(ex);
b=newbyte[0];
}
for(intj=0;j<b.length;j++){
intk=b[j];
if(k<0)k+=256;
sb.append("%"+Integer.toHexString(k).
toUpperCase());
}
}
}
returnsb.toString();
}



注重源码中粗体部分,原jspSmartUpload组件对前往的文件未作任那边理,如今做了编码的转换事情,将文件名转换为UTF-8情势的编码情势。UTF-8编码对英文未作任那边理,对中文则必要转换为%XX的情势。toUtf8String办法中,间接使用Java言语供应的编码转换办法取得汉字字符的UTF-8编码,以后将其转换为%XX的情势。

将源码编译后打包成jspSmartUpload.jar,拷贝到Tomcat的shared/lib目次下(可为一切WEB使用程序所共享),然后重启Tomcat服务器就能够一般下载含有中文名字的文件了。另,toUtf8String办法也可用于转换含有中文的超等链接,以包管链接的无效,由于有的WEB服务器不撑持中文链接。

小结:jspSmartUpload组件是使用JSP举行B/S程序开辟过程当中常常利用的上传下载组件,它利用复杂,便利。如今我又为其加上了下载中文名字的文件的撑持,端的是为虎傅翼,势必博得更多开辟者的喜爱。

首先第一点:jsp,servlet,javabean这些最基本的,嘿嘿,就算你是高手的话,在大行的企业级应用的话还是需要框架的,一个好的框架确实能构解决许多问题。
不帅 该用户已被删除
9#
发表于 2015-4-4 21:01:32 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
山那边是海 该用户已被删除
8#
发表于 2015-3-19 22:01:15 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
莫相离 该用户已被删除
7#
发表于 2015-3-5 19:36:19 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
乐观 该用户已被删除
6#
发表于 2015-3-4 12:02:21 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
变相怪杰 该用户已被删除
5#
发表于 2015-2-15 18:28:38 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
深爱那片海 该用户已被删除
地板
发表于 2015-2-6 07:56:39 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-2-2 18:02:36 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
若相依 该用户已被删除
沙发
发表于 2015-1-28 23:17:06 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
兰色精灵 该用户已被删除
楼主
发表于 2015-1-20 07:13:17 | 只看该作者
是一种为 Internet发展的计算机语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-15 18:31

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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