版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
file:///E|/file:///E|/网站教程/网站编程/JSP入门教程.htm(第PAGE3/16页)2007-9-1013:41:21HYPERLINK/bbs/index.php1HYPERLINK/bbs/thread.php?fid=12&page=3nHYPERLINK/bbs/index.php1HYPERLINK/bbs/thread.php?fid=12&page=3ndHYPERLINK/bbs/post.php?fid=12a.etw.1nda.nHYPERLINK/bbs/index.php HYPERLINK/index.htm首页|HYPERLINK/siuke.htm秀客|HYPERLINK/bbs/index.php秀客论坛|HYPERLINK/zt.htm转帖工具|秀客收藏夹»windecember:HYPERLINK/bbs/login.php?action=quit退出|HYPERLINK/bbs/profile.php控制面板|HYPERLINK/bbs/message.php短消息|HYPERLINK/bbs/search.php搜索|HYPERLINK/bbs/member.php会员|HYPERLINK/bbs/sort.php统计与排行|HYPERLINK/bbs/hack.php?H_name=bank银行|HYPERLINK/bbs/faq.php帮助|HYPERLINK/bbs/index.php社区HYPERLINK/bbs/index.php秀客论坛->HYPERLINK/bbs/thread.php?fid=12&page=3网络编程->JSP入门教程标题:JSP入门教程 HYPERLINK/bbs/job.php?rd_previous=1&fid=12&tid=3678&fpage=3&goto=previous上一主题|HYPERLINK/bbs/job.php?rd_previous=1&fid=12&tid=3678&fpage=3&goto=next下一主题siuke管理员精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆20JSP入门教程JavaServerPages(JSP)是基于Java的技术,用于创建可支持跨平台及跨Web服务器的动态网页。JSP可与微软的ActiveServerPages(ASP)相媲美,但JSP使用的是类似于HTML的标记和Java代码片段而不是用VBScript。当你使用不提供ASP本地支持的Web服务器(例如Apache或Netscape服务器)时,你就可以考虑使用JSP了。你虽然也可以为这些服务器弄一个ASP附加软件模块,但是太昂贵了。现在Sun公司并不会因你使用JSP向你收费(虽然将来可能要收),况且用于Solaris、Linux以及Windows系统的组件都很容易获得。不要把JSP与服务器端的JavaScript语言搞混了。Web服务器自动将通过JSP生成的Java代码片段转换成Java片段(servlets)。JSP也可自动控制许多功能,如过去用Perl脚本编写功能程序或像ASP这样的服务器专用API(应用编程接口)。我们马上就要开始帮助你建立一个使用JSP技术的网站范例了。准备好计算机以使用JSP你需要Java2软件开发工具箱(J2SDK),过去称之为Java开发工具箱(JDK)、JavaServer网络开发工具箱(JSWDK)、Tomcat,或者其它能支持JSP的Web服务器。升阳公司为Windows、Solaris以及Linux平台提供免费的J2SDK和JSWDK。如果你想在现有的Web服务器上使用JSP,而此服务器本身不支持JSP和Java代码片段,可以试用Allaire公司的Jrun。它可以为Netscape的EnterpriseServer和FasttrackServer、微软的InternetInformationServer(IIS)和PersonalWebServer(PWS)、Apache以及其他服务器充当Web服务器附件。你也可以使用Apache服务器的Java版,其中包含最新的JSWDK。下载并安装所需的软件HYPERLINKhttp://www.51chwww.51ch目前,版本号为1.2.2-001的J2SDK可下载版以可安装的归档文件形式出现。这个大约20MB的下载量软件可提供一个彻底的Java开发环境,让你创造任何基于Java并且利用了而标准核心API的解决方案。其实,你的Web服务器使用JSP的唯一条件是要有Java编辑器。要让Web服务器知道编辑器的位置,需要JAVA_HOME环境变量设置为J2SDK安装目录。如果你已经在Windows系统中进行了安装并且接受了默认目录,请将“setJAVA_HOME=C:1.2.2”添加到你的“autoexec.bat”文件中,然后重新启动。安装J2SDK后,下载并安装JSWDK或者是Tomcatβ版,即基于Java的ApacheWeb服务器的β版。你把JSWDK放在什么地方是无关紧要的,只要你以后能找到它就行。通常,将其放在顶层目nae替wJJdn.hin工作已经就11nda.etw.1nda.n绪,你可以开始JSP开发工作了。HYPERLINK 正确地安装JSWDK后,请运行“startserver”脚本程序,以启动Web服务器,使其按照默认情况监听8080端口。你要在启动服务器之后查看您是否已正确地安装了此工具,请加载一个JSP样本文件(../locahost:8080/examples/jsp/)。如果你能成功地运行这些样本文件,说明你已经正确地安装了这个软件。如果你在用来启动服务器的控制台窗口中看到报错信息,你就需要做些修改。最经常发生的问题是没有设置或不正确地设置了JAVA_HOME环境变量。要看到当前环境变量设置情况,要请在DOS提示符下键入“set”设置。开始在解释JSP语法前,创建一个快捷网页,显示目当前的日期和时间,并然后将之其保存为sample.jsp:<html><head><title>FirstPage</title></head><body><H3>Todayis:<%=newjava.util.Date()%></H3></body></html>.把这个文件以及你所有的HTML和JSP页面放在JSWDK安装目录下的网页目录里。你可以从../localhost:8080/sample.jsp加载此网页。该网页首次被访问时,Web服务器会把JSP编译成Java代码片段,这样你就能够看到当前的日期和时间了。你已经下载、安装并配置好了开发环境,你可以开始学习JSP语法并创建自己的基于JSP的解决方案了。JSP基本语法讲完安装问题后,现在进入来讨论JSP语法。一个投机取巧的办法是下载语法卡片。如果你不熟悉Java编程,也许你想看一下Sun的指南。然而网页创建者并不需要进行太多的Java开发。除了一些方法调用,在你的JSP网页里应尽可能少用Java代码。记住以上提示,我们首先来看一看JSP指令和脚本元素,之后我们会解释JavaBeans和隐含对象。共有五种JSP指令和脚本元素。在JSP1.0版中,大部分JSP被一个以“<%”开头和以“%>”结尾的的标记括在其中。在更新的JSP1.1规范出台后,就有了与XML兼容的版本。JSP指令和脚本元素Directives<%@directive%>Declarations<%!declaration%>Expressions<%=expression%>CodeFragment/Scriptlet<%codefragment%>Comments<%--comment--%>指令JSP指令是为JSP引擎而设计的。他们并不直接产生任何可见输出,而只是告诉引擎如何处理其余JSP页面。这些指令始终被括在“<%@?%>”标记中。两个最重要的指令是“pagePage”和“Include”。“Taglib”指令不在讨论之列,但是在用JSP1.1创建自定义标记可以使用它。几乎在所有JSP页面顶部都会看到“Page”指令。尽管不是必须的,但它可以让你指定:到何处查找起支持作用的Java类别:gg.HYPERLINKhttp://www.51chowww.51chior=jati.t",HYPERLINKhttp://www.51cho出ng现dJiavaan运.行n问et题时www.51chnae题时,将网上冲浪者引向何处:<%@pageerrorPage="errorPage.jsp"%>,
11nda.etw.1nda.n还有你是否需要管理用户的会话级信息,这些信息可能来自多个网页(在下面的JavaBeans一节将对此做进一步讲)述:<%@pagesession="true"%>.“Include”指令可以把你的内容分成更多可管理的元素,比如包括一个普通页面页眉或页脚的元素。包含的网页可以是一个固定的HTML页面或更多的JSP内容:<%@includefile="filename.jsp"%>声明JSP声明用来让你定义页面级变量,以保存信息或定义JSP页面的其余部分可能需要的支持方法。如果你发现代码太多,通常最好把它们写成一个独立的Java类别。声明一般都在“<%!?%>”标记中。一定要以分号(;)结束变量声明,因为任何内容都必须是有效的Java语句:<%!inti=0;%>。表达式有了JSP表达式,表达式评估结果会被转换成一个字符串,并且被直接包括在输出页面之内。JSP表达式包含在“<%=?%>”标记中,没有分号,除非在加引号的字符串部分使用分号。<%=i%><%="Hello"%>.代码片段/脚本片段代码片段/脚本片段(Scriptlets)JSP代码片段或脚本片段是嵌在“<%?%>”标记中的。这种Java代码在Web服务器响应请求时就会运行。在脚本片段周围可能是原始的HTML或XML语句,在这些地方,代码片段可以使你创建条件执行代码,或要用到另外一段代码的代码。例如,以下的代码组合使用表达式和代码片段,显示H1、H2、H3和H4标记中的字符串“Hello”。代码片段并不局限于一行源代码:<%for(inti=1;i<=4;i++){%><H<%=i%>>Hello</H<%=i%>><%}%>.注释最后一个主要的JSP元素是嵌入式注释。尽管你始终可以在文件中加入HTML注释,但用户在查看页面源代码时会看到这些注释。如果你不想让用户看到它,你就应该将其嵌入“<%--?--%>”标记中:<%--commentforserversideonly--%>.带JavaBean的JSP虽然你可以把大段的代码放在脚本片段(scriptlet)内,但是绝大多数的Java代码属于可重复使用的名为JavaBea的组件。JavaBean类似于ActiveX控件:他们都能提供常用功能并且可以重复使用。JavaBean的值是通过一些属性获得的,你可通过这些属性访问JavaBean设置。以一个人来打比方,这个人就是一个JavaBean,这个人的名字、身份证号码以及住址就是其属性。在JSP网站,你基本上就是通过玩“Connectthebeans)”来使你的网站动态化。假设JavaBean先于网站被创建出来,你需要做的第一件事就是告诉JSP页面它将要用到一HYPERLINKhttp://www.51cho个ngwww.51chn“ae以w“j:11nda.etw.1nda.n<jsp:useBeanid="localName"class="com.jguru.Person"scope="application"/>。HYPERLINK “<jsp:useBean>”标记要求你用“id”属性来识鉴别Bean。这里你提供一个名字来JSP页面其余部分的Bean。除了“id”属性,你还须告诉网页面从何处查找Bean,或者它的Java类别名是什么。这种类别属性提供确认Bean的功能,其他一些方法也可以做到这一点。最后一个必需的元素是“scope”属性。有了“scope”属性的帮助,你就能告诉Bean为单一页面(默认情况)[scope="page"]、为[scope="request"]请求为会话[scope="session"],或者为整个应用程序[scope="application"]保持留信息。有了会话范围,你就能非常容易地在JSP网页面上维护购物车等项目。一旦你声名了一个JavaBean,你就可以访问它的属性来定制它。要获得属性值,请用“<jsp:getProperty>”标记。有了这个标记,你就能指定将要用到的Bean名称(从useBean的"id"字段得到)以及你想得到其值的属性。实际的值被放在输出中:<jsp:getPropertyid="localName"property="name"/>。要改变JavaBean属性,你必须使用“<jsp:setProperty>”标记。对这个标记,你需要再次识别Bean和属性,以修改并额外提供新值。如果命名正确,这些值可以从一个已提交的表中直接获得:参数获得:<jsp:setPropertyid="localName"property="*"/>;可以从一个参数获得,但你必须直接命名属性和参数:<jsp:setPropertyid="localName"property="serialNumber"value="string"/>或者直接用一个名字称和值来设置:<jsp:setPropertyid="localName"property="serialNumber"value=<%=expression%>/>.关于JavaBean的最后一件事:为了Web服务器能找到JavaBean,你需要将其类别文件放在一个特殊位置。用JSWDK,最方便的位置是安装目录下的类别目录,如jswdk-1.0.1classes。JSP隐含对象与JSP语法相关的最后的元素是一些叫做“隐含对象”的东西。在JSP代码片段中,你可以利用这些隐含对象与JSP页面的代码片段执行环境产生互动。应尽量少访问这些内置隐含对象。但是,在一某些情况下,访问隐含对象是可被接受的。若要充分利用隐含对象,就需了解最新的JavaServletAPI。下表列出可用的隐含对象集合。隐含对象说明request客户端请求,包括从GET/POST请求传递过来的参数response网页传回客户端的反应pageContext在此管理网页属性session与请求关联的会话application代码片段的运行环境out传送响应的输出流config代码片段配置对象pageJSP网页本身exception有错的网页中未被捕获的例外这些都是用来做什么的,你又如何来使用它们呢?基本上说,在你的脚本片段里,你可以用它们进入执行JSP代码的代码片段。用不着深入了解太多的ServletAPI细节,我们来看看能用它们来做到的某些事情:你可以不用表达式,直接进入“Out”隐含对象,将某些内容输出到响应中:<%out.println("Hello");%>。用不着把一个参数直接送到JavaBean,你可以从请求对象获取参数值:HYPERLINKhttp://www.51chowww.51chgtiga=es.eaanee(a)otpitnna)g.1nd1nda.etw.1nda.nHYPERLINKhttp://www.51chwww.51chnP.发的过程中,进行更多的开发的程,JaaBan或现JSP文件中加入了太多的Java源代码,你就需要创建起支持作用的Java分类(class)了,它可以协助你重复利用源代码并减少JSP网页编译时间。当你需要创建Java分类文件时,你必须:将JDSWKinstallationin目录添加到PATH中。在autoexec.bat文件PATH行的末尾,加入“C:1.2.2/bin”。用这个命令将JAR文件复制到“jrelibext:”目录中:copyc:jswdk-1.0.1libservlet.jarc:jdk1.2.2jrelibext.创建一个JSP网站现在该是把所有这些JSP语法派上用场的时候了。我们将创建一个网页,它有一个输入表单,可以使用户输入一个股票代号以获得出当前股价(有20分钟)。如果输入有误,则显示报错网页。quote.jsp首先,用这个代码创建一个quote.jsp网页并将其保存在JSWDK安装目录下的网页目录中。大多数的网页是标准的HTML,其间散布着JSP代码。第六行是一个网页指示,表示将把所有错误发送到“errorPage.jsp”文中。第13到15行是一个脚本片段,主要说明只有提供“符号”参数才会显示表格。“If”代码段在32到34行结束。第17行定义了要用的JavaBean,第18行从参数加载JavaBean的符号属性。第27行到29行显示Bean的属性。除了"if"代码段,实际上并不涉及其它Java代码。errorPage.jsp下一步,将下列JSP源代码保存到网页目录中的“errorPage.jsp”文件中。“这是一个错误网页”的提示为第一行,它将isErrorPage网页提示属性设置为真。上一页说了明错误网页的位置,本页则说明这就是错误网页。其它JSP文件中的JSP专用代码只有访问隐含例外对象才用到。网页只显示其值:<%@pageisErrorPage="true"%><html><head><title>ErrorPage</title></head><body><h1>OurErrorPage</h1></font><!--PrintException-->Wegotourselvesanexception:<%=exception%><ahref="quote.jsp">Restart</a></body></html>。Quotes.javaQuotesJavaBean利用Yahoo资源来获得股票价格。需要将此资源保存到JSWDK安装目录下“classescomjguru”目录中的“quotes.java”文件中。请在此用JSDK中的Javac编辑器来编辑它。你的第一个JSP网页。创建了这两个JSP文件,建立了JavaBean资源文件并编辑了它后,你就可以从../localhost:8080/quote.jsp加载“quote.jsp”文件以查看结果,假设你没有更改JSWDK安装设置,转而使用别的端口。这个网页当然能做得更漂亮,但是它已实现了需要实现的功能,并且很好地展示了JSP的功能。秀客设计:专业网页设计、平面设计论坛。网页设计&平面设计初学者最受欢迎的论坛!HYPERLINK11nda.etw.1nda.n2005-11-12005-11-1:主 【誉天IT下载站】整理siuke管理员精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆2005-11-19HYPERLINKhttp://www.51chwww.51chJSP入门教程(二)欢迎使用JavaServerPages(以下简称JSP)技术—制作动态内容网页的方法。如果你希望学习这篇教程的话,我想你一定是这项技术的新手。你可能想成为一名利用JSP技术开发网络应用程序的程序员或者网页设计师。本教程中包含了一系列JSP的技巧和一些简单的代码的写法,每一步都举了一组例子来讲述原理。我建议你在学习本教程之前先去看一看FAQ,了解如果配置你的服务器好让他能支持并运行JSP。那样你就可以跳过前边的内容直接看你感兴趣的内容了。OK,费话少说,Let’sgo!第一课:真正的开始页面明:在很多JSP文件中你都要写上这样的说明。在helloword.jsp中:傻瓜也看得出来,这句话没什么大用,只是简要的说明一下这段代码的作用。你可以在JSP文件中的任何地方写这种代码,但是好的习惯是把他写在最前面,还有,因为他是JSP标签,记住一定要放在前面,呵include说明:include用来在主JSP文件中调用本地的一个其他文件,通常是一些版权信息啦,脚本语言啦等其他任何你想在其他文件中重复使用的代码。在这个例子中就是调用了一个图片其实。大家明白这个意思就得了。随便说两句:在JSP中对写法非常敏感,不可以有一点错误。举个例子,把写成那样服务器会出现错误信息。一些如类名,包名,路径11nda.etw.1nda.n2005-11-12005-11-1:5c1HYPERLINK/bbs/profile.php?action=show&uid=1 【誉天IT下载站】整理siuke管理员精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆2005-11-19HYPERLINKhttp://www.51chwww.51chJSP入门教程(三)第二课:用HTML表单大多数情况下,商业的网站都要有一些表单,比如说输入一下消费者的姓名啦,地址啦,或者敲一个词来用搜索引擎来查一下啦,或者市场人员从来访者处收集一些数据供参考什么的。那些表单传回的数据怎么处理的?来访者通过表单向JSP引擎输入了数据,并保存在了request对象中,那么接下来怎么办?图2-1向你展示了数据流是如何在服务器和客户之间传递的(至少在SUN的JSPreferenceimplementation是这么做的,别的JSP引擎工作起来可能会有一点点的不同,其实大同小异,都差不多)字儿太小了,可能看不大清吧?俺来解释一下了只好。首先,JSP引擎把存放在request对象中的数据发到JSP页面指定的服务器端的组件(JavaBeans组件,servlet,或者enterprisebean),组件收到这些个数据以后,有可能再存这些数据到数据库或者其他的地方存放起来,同时,返回一个response对象给JSP引擎。JSP引擎再把response对象传给JSP页面,这时的页面包含了定义好的格式和从服务器端得到的数据。这时JSP引擎和Web服务器再发送一个整理好的完整的页面给客户,也就是这们在浏览器上看到的结果。客户和服务器间的通信协议可以用HTTP,当然也可以用其他的。Request和Response对象在你制作的JSP原代码中起作用。到于request对象到底怎么用,我要在接下来详细的讲给你听。如何创建表单用HTML定义一些有代表性的表单做成一个JSP文件,然后用JSP标签在表单和服务器端对象(通常都用Bean)传递数据。一般情况下是这么干的:1、写JSP原文件,创建一些HTML的表单并命名。2、在Java文件里写Bean,定义属性,GET或者SET方法来配合已经被你指定好名字的表单。3、回到JSP原文件中,增加<jsp:useBean>标签来创建一个或者调用一个现成的Bean。4、增加<jsp:setProperty>标签设置HTML表单中需要SET方法的Bean的属性。5、增加<jsp:getProperty>标签设置HTML表单中需要GET方法的Bean的属性。6、如果需要处理更多的用户数据,用request对象。说了半天你可能看不懂,其实看一个例子你就懂了。先看一个简单的hello的例子吧:这段程序其实还是计算机程序里那个最经典的“hello,world”的程序,只不过呢,我使他挠了一点弯儿,使他看起来比较智能和复杂。首先你输入你的名字,然后Duke跟你说:“hello!”11nda.etw.1nda.nHYPERLINK 看看代码吧:dukebanner.html<tableborder="0"width="400"cellspacing="0"cellpadding="0"><tr><tdheight="150"width="150"></td><tdwidth="250"></td></tr><tr><tdwidth="150"></td><tdalign="right"width="250"><imgsrc="duke.waving.gif"></td></tr></table><br>主JSP文件:hellouser.jsp<%@pageimport="hello.NameHandler"%><jsp:useBeanid="mybean"scope="page"class="hello.NameHandler"/><jsp:setPropertyname="mybean"property="*"/><html><head><title>Hello,User</title></head><bodybgcolor="#ffffff"background="background.gif"><%@includefile="dukebanner.html"%><tableborder="0"width="700"><tr><tdwidth="150"></td><tdwidth="550"><h1>MynameisDuke.What’syours?</h1></td></tr><tr><tdwidth="150"</td><tdwidth="550"><formmethod="get"><inputtype="text"name="username"size="25"><br><inputtype="submit"value="Submit"><inputtype="reset"value="Reset">www.51cht/11nda.etw.1nda.nHYPERLINKhttp://www.51cho </table><%If(request.getParameter("username")!=null){%><%@includefile="response.jsp"%><%}%></body></html>回应文件:response.jsp<tableborder="0"width="700"><tr><tdwidth="150"></td><tdwidth="550"><h1>Hello,<jsp:getPropertyname="mybean"property="username"/>!</h1></td></tr></table>处理数据的Bean:(namehandler.java)packagehello;publicclassNameHandler{privateStringusername;publicNameHandler(){username=null;}publicvoidsetUsername(Stringname){username=name;}HYPERLINK11nda.etw.1nda.npublicStringgetUsername(){HYPERLINK returnusername;}}建立HTML表单一个HTML的窗分为三个部分:<form>标签,输入方法,提交按钮发数据到服务器。一般的HTML页面里,是这么写的<formmethod=getaction=someurl>,在其他的页面里的action属性可能是其他特殊的CGI程序或者其他能处理数据的程序,那么在JSP里边是怎么用的呢,呵,如果你想把数据发到Bean里的话那么你可以省略action里边的东里了,直接写<jsp:useBean>标签或者其他特定的JSP文件了。接下来的那些表单和普通的HTML差不多了,<input>的方法,然后加一个提交按钮,可能还有一个Reset按钮,对了,别忘了,还得给每一个input表单加一个名字。这么写:<inputtype="text"name="username">使用GET和POST方法用GET和POST方法可以发数据到服务器,在JSP程序中GET和POST方法可以发数据到Bean、servlet、或者其他服务器端的组件。理论上说,GET是从服务器上请求数据,POST是发送数据到服务器。事实上,GET方法是把数据参数队列(querystring)加到一个URL上,值和表单是一一对应的。比如说,name=John。在队列里,值和表单用一个&符号分开,空格用+号替换,特殊的符号转换成十六进制的代码。因为这一队列在URL里边,这样队列的参数就能看得到,可以被记录下来,或更改。通常GET方法还限制字符的大小。事实上POST方法可以没有时间限制的传递数据到服务器,用户在浏览器端是看不到这一过程的,所以POST方法比较适合用于发送一个保密的(比如信用卡号)或者比较大量的数据到服务器。写Bean如果JSP程序用到了Bean,你就得按照JavaBeansAPI的说明设计你的Bean。记住下面两个关键部分。如果JSP程序里用<jsp:getProperty>标签,那你就得在Bean里边配合的GET方法。如果JSP程序进而用<jsp:setProperty>标签,那你就得在Bean里边配合的Set方法。设置参数到Bean或者从里边取参数将在以后的部分详细介绍。传数据到Bean把HTML表单的数据传到Bean里需要两个工作:·用<jsp:useBean>标签创建或者定位到Bean·在Bean里面用<jsp:serProperty>设置属性值第一步用<jsp:useBean>标签创建或者定位到Bean一定要用在<jsp:setProperty>之前,<jsp:useBean>首先按照你指定的名字查找Bean,如果没找到,会给你指定一个。允许在一个JSP文件中创建一个Bean,然后再另一个文件中调用,这就给了Bean一个很广泛的运行空间。第二步在Bean里面用<jsp:setProperty>设置属性值。最简单的方法是把值定义成与表单名相配合。举个例子,如果你把表单名定义成“username”那么,你就在Bean里定义属性“username”然后用方法getUsername和setUsername。HYPERLINK11nda.etw.1nda.nHYPERLINK Request对象用户输入的数据用来存放在Request对象里,用javax.servlet.HttpServletRequest来执行(你也可以用其他不同的工具来执行,但他们其实都是javax.servlet.HttpServletRequest的子集)你也可以直接用scriptlet来直接访问Request对象。Scriptlet将在下一讲里边详细的讨论,现在你只需要知道他是用脚本语言写的一段放在<%和%>之间的代码就足够了。在JSP1.0中,你必须用JavaTM程序语言作为你的脚本语言。你经常会用到如下方法处理Request对象:方法说明执行结果getRequestJavax.servlet.jsp.PageContext返回当前Request对象getParameterNamesjavax.servlet.ServletRequest返回当前Request对象参数名getParameterValuesjavax.servlet.ServletRequest返回当前Request对象参数值你将会发现其他方法包括ServletRequest,HttpServletRequest或者其他任何ServletRequest的子集。JSP引擎经常在scenes之后使用Request对象,即使你没有明确地在JSP文件中调用。从Bean中调数据到JSP页面一旦用户的数据被传到Bean,你就想重新得到数据,然后在JSP面页中显示出来。想达到这一步,你就得用到<jsp:getProperty>标签。传Bean名和属性名:<h1>Hello,<jsp:getPropertyname="mybean"property="username"/>!<jsp:useBean>,<jsp:setProperty>,和<jsp:getProperty>标签必须相配,举个例子:hellouser.jsp:<jsp:useBeanid="mybean"scope="session"class="hello.NameHandler"/><jsp:setPropertyname="mybean"property="*"/>response.jsp:<h1>Hello,<jsp:getPropertyname="mybean"property="username"/>!在这个例子里,标签被放在两个文件中,但是指定的名字都是相同的,如果不同的话,那么系统会返回一个错误信息。如何运行例子我用的是UNIX主机,如果你用windows,那么改相应的路径即可。创建路径../jswdk-1.0/examples/jsp/tutorial/hellouser.把文件background.gif,duke.waving.gif,dukebanner.html,hellousr.jsp和response.jsp文件放进去。创建一个目录,../jswdk-1.0/examples/WEB-INF/jsp/beans/helloHYPERLINKfile:///E|/file:///E|/网站教程/网站编程/JSP入门教程.htm(第PAGE15/16页)2007-9-1013:41:23jasonh@,../HYPERLINKhttp://www.51choCnogpdyriigahntwww.51chyit9K&ASoftwareDistributedbySunMicrosystemswithpermission-->
1n1nda.etw.1nda.n<jsp:useBeanid="numguess"class="num.NumberGuessBean"scope="session"/><jsp:setPropertyname="numguess"property="*"/><html><head><title>NumberGuess</title></head><bodybgcolor="white"><fontsize=4><%if(numguess.getSuccess()){%>Congratulations!Yougotit.Andafterjust<%=numguess.getNumGuesses()%>tries.<p><%numguess.reset();%>Careto<ahref="numguess.jsp">tryagain</a>?<%}elseif(numguess.getNumGuesses()==0){%>WelcometotheNumberGuessgame.<p>I’mthinkingofanumberbetween1and100.<p><formmethod=get>What’syourguess?<inputtype=textname=guess><inputtype=submitvalue="Submit"></form><%}else{%>Goodguess,butnope.Try<b><%=numguess.getHint()%></b>.Youhavemade<%=numguess.getNumGuesses()%>guesses.<p>I’mthinkingofanumberbetween1and100.<p><formmethod=get>What’syourguess?<inputtype=textname=guess><inputtype=submitvalue="Submit"></form><%}%></font></body></html>操作程序(NumberGuessBean.java)//NumberGuessGame//WrittenbyJasonHunter,CTO,K&ASoftware//jasonh@,..///Copyright1999,K&ASoftware//DistributedbySunMicrosystemswithpermissionpackagenum;importjava.util.*;publicclassNumberGuessBean{intanswer;booleansuccess;HYPERLINKhttp://www.51choSntgrindgihainntintnumGuesses;HYPERLINKhttp://www.51chopnugbdliciNaunm.bnereGtuessBeanwww.51chlieuessBean(){reset();}publicvoidsetGuess(Stringguess){numGuesses++;intg;try{g=Integer.parseInt(guess);}catch(NumberFormatExceptione){g=-1;}if(g==answer){success=true;}elseif(g==-1){hint="anumbernexttime";}elseif(g<answer){hint="higher";}elseif(g>answer){hint="lower";}}publicbooleangetSuccess(){returnsuccess;}publicStringgetHint(){return""+hint;}publicintgetNumGuesses(){returnnumGuesses;}publicvoidreset(){
1n1nda.etw.1nda.n+1;success=false;numGuesses=0;}}在JSP文件中使用脚本numguess.jsp是一个非常有趣儿的用脚本写的例子,你看他的结构其实是一个很大的IF……ELSE结构,但是很一个从句又都是用HTML写的,看起来象一个大的程序段。不过你也不一定非得象numguess.jsp那样用HTML和JSP标签一起来写脚本。在<%和%>标签之间,你可以写任意多行的脚本代码,在通常情况下,尽量少用脚本来处理程序,而尽可能的使用servlets或者Beans,这样你的程序看起来会非常的清析,明了。话又说回来,怎么写JSP还得根据你的习惯和爱好,我不强迫非得使用任何一种方法,SUN的JSP详细说明书不规定脚本的长度。用标签组合脚本使用HTML和JSP标签来写脚本的时候,注意前后的标签不要忘记,一定要“封”好。说的不明白,举个例子吧:<%}else{%><!--用JSP标签的时候先关上-->HYPERLINKhttp://www.51cho.nwww.51ch.iPtw..51HYPERLINKhttp://www.51chowww.51chgn!-这样你应该看懂了吧?!-->
开始的时候这种做法看起来可能有一点奇怪,但它以确保你JSP文件编译的时候脚本的成功转换。那么,脚本什么时候执行呢?一个JSP原文件的处理分为两个阶段:一个是HTTP的编译时候,一个是请求的处理时间。HTTP编译的时候,当用户第一次读JSP页面的时候,JSP的原代码被编译成CLASS,通常是servlet。HTML标签和JSP标签在这个时候同时被处理了,这之前用户还没有任何的请求被提交。请求处理时间是当用户在JSP页面中提交了一个请求,这时请求由客户端被request对象传到了服务器端,JSP引擎根据用户提交的值执行编译过的JSP文件或者servlet。当你在JSP页中使用脚本的时候,你必须知道他们什么时候被执行。声明在HTTP编译阶段就已经被处理了,其他脚本,表达式在编译JSP文件的时候也可用。表达式在HTTP编译的时候也被执行了。表达式的值被转换成了字符串被插入到JSP文件中一块儿被编译。其实在请求阶段,脚本也是可以利用的。如何运行例子我现在给出的都是在UNIX风格下的路径,如果你用Windows,那么改成Windows风格路径1、猜数字游戏在装TOMCAT或者JSWDK的时候就已经装好了。2、.jsp和.html文件在../jswdk-1.0.1/examples/num中3、.java和.class文件在../jswdk-1.0.1/examples/WEB-INF/jsp/bean/num中4、开浏览器,../机器名/examples/jsp/num/numguess.jsp秀客设计:专业网页设计、平面设计论坛。网页设计&平面设计初学者最受欢迎的论坛!快速发帖 HYPERLINKjavascript:scroll(0,0)顶端HYPERLINKHYPERLINK/bbs/index.php HYPERLINK/index.htm首页|HYPERLINK/siuke.htm秀客|HYPERLINK/bbs/index.php秀客论坛|HYPERLINK/zt.htm转帖工具|秀客收藏夹»windecember:HYPERLINK/bbs/login.php?action=quit退出|HYPERLINK/bbs/profile.php控制面板|HYPERLINK/bbs/message.php短消息|HYPERLINK/bbs/search.php搜索|HYPERLINK/bbs/member.php会员|HYPERLINK/bbs/sort.php统计与排行|HYPERLINK/bbs/hack.php?H_name=bank银行|HYPERLINK/bbs/faq.php帮助|HYPERLINK/bbs/index.php社区HYPERLINK/bbs/index.php秀客论坛->HYPERLINK/bbs/job.php?rd_previous=1&fid=12&tid=3725&fpage=3&goto=previous上一主题|HYPERLINK/bbs/job.php?rd_previous=1&fid=12&tid=3725&fpage=3&goto=next下一主题siuke管理员精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆2005-11-19
JSP语法入门教程JSP语法(1)——HTML注释HTML注释在客户端显示一个注释.JSP语法<!--comment[<%=expression%>]-->例子1<!--Thisfiledisplaystheuserloginscreen-->在客户端的HTML源代码中产生和上面一样的数据:<!--Thisfiledisplaystheuserloginscreen-->例子2<!--Thispagewasloadedon<%=(newjava.util.Date()).toLocaleString()%>-->在客户端的HTML源代码中显示为:<!--ThispagewasloadedonJanuary1,2000-->描述这种注释和HTML中很像,也就是它可以在"查看源代码"中看到。唯一有些不同的就是,你可以在这个注释中用表达式(例子2所示)。这个表达示是不定的,由页面不同而不同,你能够使用各种表达式,只要是合法的就行。11ndaHYPERLINK/bbs/post.php?action=modify&fid=12&tid=3725&pid=9609&article=2.HYPERLINK/bbs/post.php?action=quote&fid=12&tid=3725&pid=9609&article=2etw.1nda.nHYPERLINKhttp://www.51chwww.51ch当你声明方法或变量时,请注意以下的一些规则: HYPERLINKhttp://www.51chwww.51ch当你声明方法或变量时,请注意以下的一些规则: 【誉天IT下载站】整理声明必须以";"结尾(Scriptlet有同样的规则,但是表达式就不同了).你可以直接使用在<%@page%>中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明.一个声明仅在一个页面中有效。如果你想每个页面都用到一些声明,最好把它们写成一个单独的文件,然后用<%@include%>或<jsp:include>元素包含进来。秀客设计:专业网页设计、平面设计论坛。网页设计&平面设计初学者最受欢迎的论坛!2005-11-1208:45 #2siuke管理员精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆2005-11-19JSP语法(4)——表达式包含一个符合JSP语法的表达式JSP语法<%=expression%>例子<fontcolor="blue"><%=map.size()%></font><b><%=numguess.getHint()%></b>.描述表达式元素表示的是一个在脚本语言中被定义的表达式,在运行后被自动转化为字符串,然后插入到这个表达示在JSP文件的位置显示。因为这个表达式的值已经被转化为字符串,所以你能在一行文本中插入这个表达式(形式和ASP完全一样).当你在JSP中使用表达式时请记住以下几点:你不能用一个分号(";")来作为表达式的结束符.但是同样的表达式用在scriptlet中就需要以分号来结尾了!查看Scriptlet这个表达式元素能够包括任何在JavaLanguageSpecification中有效的表达式.有时候表达式也能做为其它JSP元素的属性值.一个表达式能够变得很复杂,它可能由一个或多个表达式组成,这些表达式的顺序是从左到右。秀客设计:专业网页设计、平面设计论坛。网页设计&平面设计初学者最受欢迎的论坛!2005-11-1208:45 #3HYPERLINK11nda.etw.1nda.nsiuke管理员 HYPERLINKhttp://www.51chsiuke管理员 HYPERLINKhttp://www.51chwww.51ch精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆2005-11-19JSP语法(5)——S 【誉天IT下载站】整理表达式Scriptlet包含一个有效的程序段.JSP语法<%codefragment%>例子<%Stringname=null;if(request.getParameter("name")==null){%><%@includefile="error.html"%><%}else{foo.setName(request.getParameter("name"));if(foo.getName().equalsIgnoreCase("integra"))name="acura";if(name.equalsIgnoreCase("acura")){%>描述一个scriptlet能够包含多个jsp语句,方法,变量,表达式因为scriptlet,我们便能做以下的事:声明将要用到的变量或方法(参考声明).编写JSP表达式(参考表达式).使用任何隐含的对象和任何用<jsp:useBean>声明过的对象编写JSP语句(如果你在使用Java语言,这些语句必须遵从JavaLanguageSpecification,).任何文本,HTML标记,JSP元素必须在scriptlet之外当JSP收到客户的请求时,scriptlet就会被执行,如果scriptlet有显示的内容,这些显示的内容就被存在out对象中。秀客设计:专业网页设计、平面设计论坛。网页设计&平面设计初学者最受欢迎的论坛!2005-11-1208:46 #4HYPERLINK11nda.etw.1nda.nsiuke管理员 siuke管理员 HYPERLINKhttp://www.51chwww.51ch精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆2005-11-19JSP语法(6)——Page指令 【誉天IT下载站】整理Page指令定义JSP文件中的全局属性.JSP语法<%@page[language="java"][extends="package.class"][import="{package.class|package.*},..."][session="true|false"][buffer="none|8kb|sizekb"][autoFlush="true|false"][isThreadSafe="true|false"][info="text"][errorPage="relativeURL"][contentType="mimeType[;charset=characterSet]"|"text/html;charset=ISO-8859-1"][isErrorPage="true|false"]%>例子<%@pageimport="java.util.*,java.lang.*"%><%@pagebuffer="5kb"autoFlush="false"%><%@pageerrorPage="error.jsp"%>描述<%@page%>指令作用于整个JSP页面,同样包括静态的包含文件。但是<%@page%>指令不能作用于动态的包含文件,比如<jsp:include>你可以在一个页面中用上多个<%@page%>指令,但是其中的属性只能用一次,不过也有个例外,那就是import属性。因为import属性和Java中的import语句差不多(参照JavaLanguage),所以你就能多用此属性几次了.无论你把<%@page%>指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部.秀客设计:专业网页设计、平面设计论坛。网页设计&平面设计初学者最受欢迎的论坛!2005-11-1208:46 #5siuke管理员精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆0--chJSP语法(7)——Taglib指令Taglib指令定义一个标签库以及其自定义标签的前缀.JSP语法<%@tagliburi="URIToTagLibrary"prefix="tagPrefix"%>例子<%@tagliburi="/tags"prefix="public"%><public:loop>1nd1nda.etw.1nda.nHYPERLINKhttp://www.51chwww.51ch.ulcloet 描述<%@taglib%>指令声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。这里自定义的标签含有标签和元素之分。因为JSP文件能够转化为XML,所以了解标签和元素之间的联系很重要。标签只不过是一个在意义上被抬高了点的标记,是JSP元素的一部分。JSP元素是JSP语法的一部分,和XML一样有开始标记和结束标记。元素也可以包含其它的文本,标记,元素。比如,一个jsp:plugin元素有<jsp:plugin>开始标记和</jsp:plugin>结束标记,同样也可以有<jsp:params>和<jsp:fallback>元素.你必须在使用自定义标签之前使用<%@taglib%>指令,而且你可以在一个页面中多次使用,但是前缀只能使用一次属性uri="URIToTagLibrary"UniformResourceIdentifier(URI)根据标签的前缀对自定义的标签进行唯一的命名,URI可以是以下的内容:UniformResourceLocator(URL),由RFC2396定义,查看http://www.hut.fi/u/jkorpela/HYPERLINKhttp://www.hut.fi/u/jkorpela/rfc/2396/full.htmlrfc/2396/full.htmlUniformResourceName(URN),由RFC2396定义一个相对或绝对的路径prefix="tagPrefix"在自定义标签之前的前缀,比如,在<public:loop>中的public,如果这里不写public,那么这就是不合法的。请不要用jsp,jspx,java,javax,servlet,sun,和sunw做为你的前缀。秀客设计:专业网页设计、平面设计论坛。网页设计&平面设计初学者最受欢迎的论坛!2005-11-1208:46 #6siuke管理员精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆HYPERLINKhttp://www.51chwww.51chJSP语法(8)——<jsp:forward>or<jsp:forwardpage={"relativeURL"|"<%=expression%>"}><jsp:paramname="parameterName"value="{parameterValue|<%=expression%>}"/>+j:fa>t11nda.etw.1nda.nHYPERLINKhttp://www.51chwww.51chnHYPERLINKhttp://www.51ch 【誉天IT下载站】整理<jsp:forwardpage="/servlet/login"/><jsp:forwardpage="/servlet/login"><jsp:paramname="username"value="jsmith"/></jsp:forward>描述<jsp:forward>标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象.<jsp:forward>标签以下的代码,将不能执行.你能够向目标文件传送参数和值,在这个例子中我们传递的参数名为username,值为scott,如果你使用了<jsp:param>标签的话,目标文件必须是一个动态的文件,能够处理参数.如果你使用了非缓冲输出的话,那么使用<jsp:forward>时就要小心。如果在你使用<jsp:forward>之前,jsp文件已经有了数据,那么文件执行就会出错.属性page="{relativeURL|<%=expression%>}"这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL.这个文件可以是JSP,程序段,或者其它能够处理request对象的文件(如asp,cgi,php).<jsp:paramname="parameterName"value="{parameterValue|<%=expression%>}"/>+向一个动态文件发送一个或多个参数,这个文件一定是动态文件.如果你想传递多个参数,你可以在一个JSP文件中使用多个<jsp:param>。name指定参数名,value指定参数值.秀客设计:专业网页设计、平面设计论坛。网页设计&平面设计初学者最受欢迎的论坛!2005-11-1208:46 #7siuke管理员精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆2005-11-19HYPERLINKhttp://www.51chwww.51chJSP语法(9)——<jsp:getProperty><jsp:getProperty>获取Bean的属性值,用于显示在页面中JSP语法<jsp:getPropertyname="beanInstanceName"property="propertyName"/>例子<jsp:useBeanid="calendar"scope="page"class="employee.Calendar"/><h2>Calendarof<jsp:getPropertyname="calendar"property="username"/>11nda.etw.1nda.nHYPERLINKhttp://www.51chwww.51ch</h2> 【誉天ITHYPERLINKhttp://www.51chwww.51ch</h2> 【誉天IT下载站】整理描述这个<jsp:getProperty>元素将获得Bean的属性值,并可以将其使用或显示在JSP页面中.在你使用<jsp:getProperty>之前,你必须用<jsp:useBean>创建它.<jsp:getProperty>元素有一些限制:你不能使用<jsp:getProperty>来检索一个已经被索引了的属性你能够和JavaBeans组件一起使用<jsp:getProperty>,但是不能与EnterpriseBean一起使用。属性name="beanInstanceName"bean的名字,由<jsp:useBean>指定property="propertyName"所指定的Bean的属性名。技巧:在sun的JSP参考中提到,如果你使用<jsp:getProperty>来检索的值是空值,那么NullPointerException将会出现,同时如果使用程序段或表达式来检索其值,那么在浏览器上出现的是null(空).秀客设计:专业网页设计、平面设计论坛。网页设计&平面设计初学者最受欢迎的论坛!2005-11-1208:46 #8siuke管理员精华60发帖3459秀值2511秀币1587状态离线贡献值4点在线时间(小时)519注册时间2005-07-17最后登陆2005-11-19HYPERLINKhttp://www.51chwww.51chJSP语法(10)——<jsp:include><jsp:include>包含一个静态或动态文件.JSP语法<jsp:includepage="{relativeURL|<%=expression%>}"flush="true"/>or<jsp:includepage="{relativeURL|<%=expression%>}"flush="true"><jsp:paramname="parameterName"value="{parameterValue|<%=expression%>}"/>+</jsp:include>Examples<jsp:includepage="scripts/login.jsp"/>11nda.etw.1nda.n<jsp:includepage="copyright.html"/>HYPERLINK <jsp:includepage="/index.html"/><jsp:includepage="scripts/login.jsp"><jsp:paramname="username"value="jsmith"/></jsp:include>描述<jsp:include>元素允许你包含动态文件和静态,这两种包含文件的结果是不同的。如果文件仅是静态文件,那么这种包含仅仅是把包含文件的内容加到jsp文件中去,而如果这个文件动态的,那么这个被包含文件也会被Jsp编译器执行(这一切与asp相似)你不能从文件名上判断一个文件是动态的还是静态的,比如aspcn.asp就有可能只是包含一些信息而已,而不需要执行。<jsp:include>能够同时处理这两种文件,因此你就不需要包含时还要判断此文件是动态的还是静态的.如果这个包含文件是动态的,那么你还可以用<jsp:param>还传递参数名和参数值。属性page="{relativeURL|<%=expression%>}"参数为一相对路径,或者是代表相对路径的表达式.flush="true"这里你必须使用flush="true",你不能使用false值.缺省值为false<jsp:paramname="parameterName"value="{parameterValue|<%=expression%>}"/>+<jsp:param>子句能让你传递一个或多个参数给动态文件你能在一个页面中使用多个<jsp:param>来传递多个参数。秀客设计:专业网页设计、平面设计论坛。网页设计&平面设计初学者最受欢迎的论坛!2005-11-1208:47 #9HYPERLINK/bbs/read.php?tid=3725&fpage=3&toread=&page=1<<1HYPERLINK/bbs/read.php?tid=3725&fpage=3&toread=&page=22 >>Pages:(2total)快速发帖 HYPERLINKjavascript:scroll(0,0)顶端标题: [HYPERLINKjavascript:checklength(document.FORM);查看帖子长度]HYPERLINK选项:URL自动识别Code自动转换使用个人签名隐藏此帖出售此帖加密此帖
HYPERLINK [完成后可按Ctrl+Enter发布]HYPERLINK/bbs/read.php?tid=3725&fpage=3#加为IE收藏|HYPERLINK/bbs/job.php?action=favor&job=add&tid=3725收藏主题|HYPERLINK/bbs/sendemail.php?action=tofriend&tid=3725推荐给朋友11nda.etw.1nda.n论坛跳转:PoweredbyHYPERLINK/PHPWindv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026及未来5年中国后传动轴总成数据监测研究报告
- 2026及未来5年中国变压式卫生间通风道数据监测研究报告
- 2026及未来5年中国双流弱酸氢离子交换器数据监测研究报告
- 2026事业单位工勤技能-江苏-江苏电工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-江苏-江苏广播电视天线工三级(高级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-江苏-江苏保健按摩师四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-新疆-新疆水土保持工二级(技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-新疆-新疆园林绿化工一级(高级技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-广西-广西热处理工二级(技师)历年参考题库含答案详解3套试卷
- 个人职业发展机会
- 2026-2027学年第一学期学校安全教育主题班会记录
- 2026年幼儿园教师招聘保教知识与能力试题库
- 2026年山东将军开元纸业有限公司招聘(13人)笔试参考题库及答案详解
- 2026-2031年中国城市规划行业市场深度调研及发展战略研究分析报告
- 2026年乾安县公开招聘公益性岗位人员(100人)考试备考试题及答案详解
- 2026交管12123学法减分题库200题(含答案完整版)
- 2026年北京市高考化学试卷(含答案)
- T-SXCAS 038-2024 民用建筑低碳供暖系统设计标准
- 2026年上海高考物理考试真题含答案
- 外墙内保温施工方案
- 2026广西辅警笔试真题题库(含答案解析·全区完整版)
评论
0/150
提交评论