版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章JavaEE平台及开发基础——JavaEE的开发方式JavaEE的开发方式1.JavaWeb开发这是传统的开发方式,其核心技术是JSP、Servlet与JavaBean。早期的JSP程序员都用这种方式开发Web应用,几乎所有功能都用JSP实现。缺点是:没有一套有效的开发规范来约束JSP程序员,不同程序员写出不同风格的JSP程序,整个应用系统的结构不清晰,项目规模越大,越难维护。JavaEE的开发方式2.Java框架开发(1)轻量级JavaEE目前,轻量级JavaEE开发又分为两种方式。①SSH2:即用Struts/Struts2、Spring、Hibernate框架为核心的组合方式,多见于传统企业项目的开发。②SSM:使用SpringMVC、Spring、MyBatis框架为核心的组合方式,广泛应用于对并发性能要求很高的互联网项目。轻量级JavaEE开发出的应用通常运行在普通Web服务器(如Tomcat)上。JavaEE的开发方式(2)经典企业级JavaEE以EJB3+JPA为核心,适合开发大型企业项目,系统需要运行于专业JavaEE服务器(如WebLogic、WebSphere)之上,具有高度伸缩性、高度稳定性和安全性,通常只有开发商用的大型企业项目才会用到。一般来说,初学Java开发最好选择轻量级JavaEE框架,它在保留经典企业级JavaEE基本应用架构、可扩展性和易维护性的基础上,安装配置过程相对简单、较容易入门。本书介绍的就是这种轻量级的平台,它是以JDK8为底层运行时环境(JRE)、Tomcat9为应用容器(Web服务器)、SQLServer2016为后台数据库的JavaEE开发平台,使用最新的MyEclipse2018作为可视化集成开发环境(IDE)。同时,开发时需要配置相应版本的.jar包,形成.jsp、.java、.xml等文件。开发完成后,发布到Web服务器上,它们的关系如图1.1所示。第1章JavaEE平台及开发基础——JavaEE开发环境搭建目录软件的安装011.安装和升级JDK82.安装Tomcat93.安装MyEclipse20174.安装SQLServer20161.安装和升级JDK8Oracle公司定期在其官网发布最新版的JDK,并提供免费下载。JDK下载、安装及配置的整个过程,步骤如下。(1)访问Oracle官网Java主题页Oracle官方的Java页网址为/technetwork/java/javase/downloads/index.html,如图1.2所示。单击“JavaSEDownloads”下的图标,即可进入JDK的下载页面。1.安装和升级JDK8(2)选择合适的JDK版本下载下载页面的中央有选择链接区,列出了适用于各种不同操作系统平台的JDK下载链接,单击选中“AcceptLicenseAgreement”,即可根据需要下载合适的JDK版本。笔者所用计算机的操作系统是64位Windows7旗舰版,故选适用于Windowsx64体系的JDK,单击“jdk-8u152-windows-x64.exe”链接开始下载,如图1.3所示。1.安装和升级JDK8(3)安装JDK和JRE双击下载得到的可执行文件,启动安装向导,如图1.4所示。单击【下一步】按钮,跟着向导的指引操作,安装过程非常简单(这里不展开),本书将JDK安装在默认目录“C:\ProgramFiles\Java\jdk1.8.0_152”下。安装完JDK后,向导会自动弹出【Java安装】对话框,接着安装其配套的JRE,如图1.5所示。系统显示JRE会被安装到“C:\ProgramFiles\Java\jre1.8.0_152”,保持这个默认的路径,单击【下一步】按钮开始安装,直到完成。
1.安装和升级JDK8(4)设置环境变量完成后还要通过设置系统环境变量,告诉Windows操作系统JDK所在的位置。下面介绍具体设置方法。①打开【环境变量】对话框。右击桌面上的“计算机”图标,选择【属性】,在弹出的控制面板主页中单击“高级系统设置”链接项,在弹出的【系统属性】对话框中单击【环境变量】按钮,打开【环境变量】对话框,操作过程如图1.6所示。1.安装和升级JDK8②新建系统变量JAVA_HOME。在“系统变量”列表下单击【新建】按钮,弹出【新建系统变量】对话框。在“变量名”栏中输入“JAVA_HOME”,在“变量值”栏中输入JDK安装路径“C:\ProgramFiles\Java\jdk1.8.0_152”,如图1.7所示,单击【确定】按钮。③设置系统变量Path。在“系统变量”列表中找到名为“Path”的变量,单击【编辑】按钮打开【编辑系统变量】对话框,在“变量值”字符串中加入路径“%JAVA_HOME%\bin;”,如图1.8所示,单击【确定】按钮。
1.安装和升级JDK8(5)测试安装读者可以自己测试JDK安装是否成功。选择任务栏【开始】→【运行】,输入“cmd”并回车,进入命令行界面,输入“java-version”,如果配置成功就会出现Java的版本信息,如图1.9所示。1.安装和升级JDK8(6)升级JDK目前的JDK依然处于不断的完善中,官方时常会发布新的补丁或推出更新版本,用户为保证自己的Java应用始终基于最新的JDK运行,就要能对自己计算机所装的JRE环境进行在线实时升级,方法是:在Windows系统开始菜单启动项中展开选择“Java”→“检查更新”项,出现【Java控制面板】,在面板的“更新”页勾选“自动检查更新”复选框,单击【立即更新】按钮开始检查,如图1.10所示。1.安装和升级JDK8一旦发现有新的补丁版本,就会出现如图1.11所示的【JavaUpdate-更新可用】提示框,单击【更新】按钮,然后弹出如图1.12所示的【许可证条款中的变更】提示框,再单击【确定】。1.安装和升级JDK8接下来进入更新过程,出现【正在下载Java安装程序】信息框,如图1.13所示,显示下载进度,下载完成会自动安装,无须任何人工干预,最后出现图1.14所示的【Java安装-完成】消息框,单击【关闭】按钮。2.安装Tomcat9(1)访问Tomcat官网Tomcat官方的下载网址为/,如图1.15所示。2.安装Tomcat9(2)选择下载所需的软件发布包Tomcat的每个版本都会以多种不同的形式打包发布,以满足不同层次用户的需求,如图1.16所示为Tomcat9的发布页。2.安装Tomcat9(3)安装Tomcat双击安装包文件,启动安装向导,单击【Next】按钮,在向导“LicenseAgreement”页单击【IAgree】同意许可协议条款,如图1.17所示。2.安装Tomcat9在“JavaVirtualMachine”页,请读者留意一下路径栏里填写的要是自己计算机JRE的安装目录“C:\ProgramFiles\Java\jre1.8.0_191”,如图1.18所示。确认无误后再单击【Next】按钮继续,直到完成。2.安装Tomcat9(4)测试安装在安装完毕后,于向导的“CompletingApacheTomcatSetup”页勾选“RunApacheTomcat”项,以保证Tomcat能自行启动,单击【Finish】按钮,在计算机桌面右下方任务栏上出现Tomcat的图标
,图标中央三角形为绿色表示启动成功,如图1.19所示。2.安装Tomcat9打开浏览器,输入“http://localhost:8080”并回车,若呈现如图1.20所示的页面,则表明安装成功。3.安装MyEclipse2017(1)下载安装包目前,由北京慧都科技有限公司与Genuitec公司合作运营MyEclipse中国官网,其网址为/,专为国内用户提供MyEclipse软件的下载和技术支持服务,本书下载使用的是离线版安装包,文件名为myeclipse-2017-ci-8-offline-installer-windows.exe,文件大小为1.56GB。(2)安装MyEclipse双击执行离线安装程序,启动安装向导,单击【Next】按钮,如图1.21所示。3.安装MyEclipse2017在向导“License”页勾选“Iacceptthetermsofthelicenseagreement”同意许可协议条款,单击【Next】按钮继续;在“Options”页选择MyEclipse所运行的Java环境,为64位平台。其他步骤都采用默认设置(不再展开),如图1.22所示。3.安装MyEclipse2017(3)初始启动最后,在“Installation”页确保已勾选了“LaunchMyEclipse2017CI”,单击【Finish】按钮结束安装过程。安装一完成,MyEclipse2017就会启动,初启时会弹出【EclipseLauncher】对话框要求用户选择一个工作区(Workspace),也就是用于存放用户项目(所开发程序)的地方,为避免每次启动都要选择工作区的麻烦,在设好工作区路径后,可勾选下方的“Usethisasthedefaultanddonotaskagain”,单击【OK】按钮开始启动,出现启动画面,如图1.23所示。3.安装MyEclipse2017启动后出现MyEclipse2017的开发环境初始界面,如图1.24所示。其默认显示的是MyEclipseDashboard的“Welcome”(欢迎)页,读者也可切换查看其他分页的内容。4.安装SQLServer2016从网上下载SQLServer2016中文企业版安装包cn_sql_server_2016_enterprise_x64_dvd_8699450.iso(2.28GB),解压,双击文件夹中setup.exe启动安装程序,安装的具体步骤如下:(1)运行安装文件,系统显示“SQLServer安装中心”,左边是大类,右边是对应该类的内容。系统首先显示“计划”类。(2)选择“安装”类,系统检查安装基本条件,进入“安装程序支持规则”窗口。如图1.25所示。4.安装SQLServer2016(3)系统显示“产品密钥”窗口,选择“输入产品密钥”,输入SQLServer对应版本的产品密钥。(4)系统显示“许可条款”窗口,阅读并接受许可条款,单击【下一步】按钮。进入“全局规则”和“Microsoft更新”窗口,通过网络对安装内容更新文件。(5)系统显示“安装安装程序文件”窗口,安装“安装SQLServer2016”程序。(6)系统显示“功能选择”窗口,在“功能”区域中选择要安装的功能组件。用户如果仅仅需要基本功能,则选择“数据库引擎服务”,如图1.26所示。然后安装“功能规则”。4.安装SQLServer2016(7)系统显示“实例配置”窗口。如果是第一次安装,则既可以使用默认实例,也可以自行指定实例名称。如果当前服务器上已经安装了一个默认的实例,则再次安装时必须指定一个实例名称。系统允许在一台计算机上安装SQLServer的不同版本,或者同一版本的多个实例,把SQLServer看成一个DBMS类,采用这个实例名称区分不同的SQLServer。如果选择“默认实例”,则实例名称默认为MSSQLSERVER。如果选择“命名实例”,在后面的文本框中输入用户自定义的实例名称,如图1.27所示。4.安装SQLServer2016(8)系统显示“服务器配置”窗口。在“服务账户”选项卡中为每个SQLServer服务单独配置用户名和密码及启动类型。“账户名”可以在下拉框中进行选择。也可以单击“对所有SQLServer服务器使用相同的账户”按钮,为所有的服务分配一个相同的登录账户。配置完成后的界面如图1.28所示。4.安装SQLServer2016在“排序规则”选项卡中,指定数据库引擎代码页和数据排序规则,默认如图1.29所示。4.安装SQLServer2016(9)系统显示“数据库引擎配置”窗口,包含4个选项卡。a.在“服务器配置”选项卡中选择身份验证模式。身份验证模式是一种安全模式,用于验证客户端与服务器的连接,它有两个选项:Windows身份验证模式和混合模式。在Windows身份验证模式中,用户通过Windows账户连接时,使用Windows操作系统用户账户名和密码;混合模式(SQLServer身份验证和Windows身份验证)。而建立连接后,系统的安全机制对于两种连接是一样的。这里选择“混合模式”为身份验证模式,并为内置的系统管理员账户“sa”设置密码,为了便于介绍,这里将密码设为“123456”,如图1.30所示。4.安装SQLServer2016b.在“数据目录”选项卡中指定数据库的文件存放的位置,显示系统的默认位置,系统把不同类型的数据文件安装在该目录对应的子目录下,用户可以根据自己的情况重新选择,如图1.31所示。4.安装SQLServer2016c.“TempDB”选项卡中指定系统使用的临时数据库TempDB的参数,如图1.32所示。4.安装SQLServer2016d.在“FILESTREAM”选项卡中指定数据库中的T-SQL、文件I/O和允许远程用户访问FILESTREAM。如图1.33所示。4.安装SQLServer2016(10)如果用户选择其他服务,则系统分别进入这些窗口进行配置。如果功能选择中包含“AnalysisServices”,则在此需要就此进行服务器配置和数据目录选择,如图1.34和图1.35所示。4.安装SQLServer2016如果功能选择中包含“ReportingServices”,则在此需要指定报表服务的配置模式,如图1.36所示。4.安装SQLServer2016如果功能选择中包含“DistributedReplay控制器”,则在此需要指定DistributedReplay控制器服务的访问权限,如图1.37所示。4.安装SQLServer2016如果功能选择中包含“DistributedReplay控制器”,则在此需要为控制器指定计算机的名称和目录位置。如图1.38所示。4.安装SQLServer2016(11)系统进入“功能配置规则”窗口,用户了解安装支持文件时是否发现问题。如有问题,解决问题后方可继续。(12)系统进入“准备安装”窗口,以树型结构显示上面“准备安装”的内容,单击“安装”按钮,系统分别进行安装,直到安装完成,系统进入“完成”窗口,如图1.39所示。目录整合开发环境021.配置MyEclipse2017所用的JRE2.集成MyEclipse2017与Tomcat91.配置MyEclipse2017所用的JRE在MyEclipse2017中内嵌了Java编译器,但为了使用我们安装的最新JDK,需要手动配置,具体操作步骤见图1.40中的①~⑩标注。1.配置MyEclipse2017所用的JRE说明如下:①启动MyEclipse2017,选择主菜单【Window】→【Preferences】,弹出【Preferences】窗口。②展开窗口左侧的树状视图,选中“Java”→“InstalledJREs”项,右区出现“InstalledJREs”配置页。③单击右侧的【Add…】按钮,弹出【AddJRE】对话框。④在【AddJRE】对话框的“JREType”页,选择要配置的JRE类型为“StandardVM”,单击【Next】按钮。⑤在【AddJRE】对话框的“JREDefinition”页,单击“JREhome”栏右侧的【Directory...】按钮,弹出【浏览文件夹】对话框。⑥在【浏览文件夹】对话框中,选择在1.2.1节1.中安装JDK的根目录,单击【确定】按钮,可以看到JRE的系统库被加载进来。⑦在“JREname”栏中,将JRE的名称改为“jdk8”。⑧单击【Finish】按钮,回到【Preferences】窗口,可以看到在“InstalledJREs”列表中多出了名为“jdk8”的一项,即为本书所安装的最新JDK。⑨勾选项目“jdk8”之前的复选框,项目名后出现“(default)”,同时整个项的条目加黑,表示已将在1.2.1节1.中安装JDK的JRE设为MyEclipse2017的默认JRE了。⑩单击【Preferences】窗口底部的【OK】按钮,确认设置。2.集成MyEclipse2017与Tomcat9(1)新建服务运行时环境MyEclipse2017自带“MyEclipseTomcatv8.5”服务运行时环境(运行JavaEE程序的Web服务器),但本书不用这个,而是使用我们安装的最新Tomcat9,需要将其整合到MyEclipse环境中,具体操作步骤见图1.41中的①~⑩标注。2.集成MyEclipse2017与Tomcat9说明如下:①在MyEclipse2017开发环境中,选择主菜单【Window】→【Preferences】,弹出【Preferences】窗口。②展开窗口左侧的树状视图,选中“Servers”→“RuntimeEnvironments”项,右区出现“ServerRuntimeEnvironments”配置页。③单击右侧的【Add…】按钮,弹出【NewServerRuntimeEnvironment】对话框,在列表中选择“Tomcat”→“ApacheTomcatv9.0”项。④勾选下方的“Createanewlocalserver”复选框。⑤单击【Next】按钮,进入“TomcatServer”页,配置服务器路径及JRE。⑥单击“Tomcatinstallationdirectory”栏右侧的【Browse...】按钮,弹出【浏览文件夹】对话框。⑦选择本书安装Tomcat9的目录(笔者装在C:\ProgramFiles\ApacheSoftwareFoundation\Tomcat9.0),单击【确定】按钮。⑧设置Tomcat9所使用的JRE,直接从JRE下拉列表中选择在1.2.1节1.中配置的“jdk8”即可。⑨单击【Finish】按钮,回到【Preferences】窗口,可以看到在“Serverruntimeenvironments”列表中多出了名为“ApacheTomcatv9.0”的一项,即在1.2.1节2.中安装的Tomcat9。单击【Preferences】窗口底部的【OK】按钮确认。⑩回到MyEclipse2017开发环境,此时若单击工具栏的复合按钮
右边的下箭头,会发现在最下面多出了“Tomcatv9.0Serveratlocalhost”选项,这表示Tomcat9已成功地整合到MyEclipse环境中了。2.集成MyEclipse2017与Tomcat9(2)MyEclipse启动Tomcat整合以后就可以通过MyEclipse2017环境来直接启动外部服务器Tomcat9了,方法是:单击MyEclipse工具栏的复合按钮
右边的下箭头,单击【Tomcatv9.0Serveratlocalhost】→【Start】,稍候片刻,在主界面下方的子窗口“Servers”页看到服务已开启,切换到“Console”页可查看Tomcat的启动信息,如图1.42所示。2.集成MyEclipse2017与Tomcat9(3)关停服务器启动服务器后,原先工具栏上的
复合按钮的外观将会改变,呈现一个带有Tom猫的图标(今后会一直维持这种状态)。单击按钮右边的下箭头,单击【Tomcatv9.0Serveratlocalhost】→【Stop】,待下方子窗口“Console”页出现如图1.43所示的信息,就表示服务器已关停。第1章JavaEE平台及开发基础——JavaEE开发入门目录MyEclipse集成开发环境011.启动MyEclipse20172.标准界面元素3.组件化的功能1.启动MyEclipse2017在Windows下选择【开始】菜单→【所有程序】→【MyEclipse】→【MyEclipse2017】→【MyEclipse2017CI】,启动MyEclipse2017环境,其集成开发工作界面如图1.44所示。2.标准界面元素(1)菜单栏窗体顶部是菜单栏,它包含主菜单(如【File】)和其所属的菜单项(如【File】→【New】),菜单项下面还可以显示子菜单,如图1.45所示。2.标准界面元素(2)工具栏位于菜单栏下面的是工具栏,如图1.46所示,它包含了最常用的功能。(3)状态栏状态栏位于整个MyEclipse开发环境的底部,其上被分隔条
划分成两个以上的区块,用于显示系统运行时来自不同方面的状态信息。如图1.47所示,这是MyEclipse加载一个JavaEE项目时状态栏所呈现出来的典型外观。2.标准界面元素(4)透视图切换器位于工具栏右侧的是MyEclipse特有的透视图切换器(见前图1.46标注),它可以显示多个透视图以供切换。透视图切换器的一个最典型的应用场合,就是在JavaEE开发模式与DBBrowser之间切换。如图1.48所示,在DBBrowser模式下单击
(OpenPerspective)按钮,弹出【OpenPerspective】对话框,其中列出了系统预定义的各种标准功能模式的透视图,默认JavaEE开发模式的透视图名称为“JavaEnterprise(default)”,选中,单击【OK】按钮,切换回标准JavaEE开发环境。2.标准界面元素(5)视图视图是显示在主界面中的子窗口,可以单独最大、最小化显示,调整显示大小、位置或关闭。除菜单栏、工具栏和状态栏外,MyEclipse的界面就是由这样的一个个小窗口组合起来的,像拼图一样构成了MyEclipse界面的主体,如图1.49所示。2.标准界面元素(6)编辑器在界面的中央会显示文件编辑器(见图1.49标注)及其中的程序代码。这个编辑器与视图非常相似,也能最大化和最小化。若打开的是JSP源文件,还会在编辑器底部出现选项标签【Source】|【Design】|【Preview】,单击切换编辑模式,分别用于编辑源代码、设计JSP页面及预览效果。3.组件化的功能在结构上,MyEclipse2017的功能可分为7类:①JavaEE模型;②Web开发工具;③EJB开发工具;④应用程序服务器的连接器;⑤JavaEE项目部署服务;⑥数据库服务;⑦MyEclipse整合帮助。对于以上每种功能类别,在MyEclipse2017中都有相应的部件,并通过一系列插件来实现它们。MyEclipse2017体系结构设计上的这种模块化,可以让用户在不影响其他模块的情况下,对任意一个模块进行单独的扩展和升级。目录一个简单的JavaEE程序021.简单JavaEE程序的结构2.简单JavaEE程序举例1.简单JavaEE程序的结构在网站规模不大时,可以全部采用JSP来编写JavaEE程序,JSP文件负责处理应用的业务逻辑、控制网页流程和创建HTML页面,JSP通过JDBC操作后台数据库,系统结构十分简单,如图1.50所示。2.简单JavaEE程序举例【实例一】采用JSP+JDBC方式开发一个Web登录程序。要求:数据库中建一个“用户名-密码”表,用户由页面上输入用户名和密码,单击【登录】按钮提交,程序通过JDBC访问数据库中的表来验证用户,验证通过就转到主页并回显欢迎信息,否则跳转至出错页。(1)连接SQLServer2016本书操作SQLServer2016数据库皆是通过NavicatPremium可视化工具进行的,限于篇幅,这里略去该工具软件的安装过程,直接介绍用它连接和操作数据库的方法:2.简单JavaEE程序举例启动NavicatPremium,通过界面左上角工具栏上的下拉按钮选择所要连接的数据库类型为SQLServer,在弹出的“编辑连接”对话框中设置连接参数并单击【连接测试】按钮来测试是否能成功连上,如图1.51所示。2.简单JavaEE程序举例(2)建立数据库在NavicatPremium右击刚刚建好的SQLServer2016连接(这里是名为“sqlsrv2016”的连接),选择“新建数据库”项,如图1.52所示,在弹出的【新建数据库(sqlsrv2016)-数据库】窗口中填写数据库名称为“TEST”,其余栏保持默认,单击【确定】按钮即可。2.简单JavaEE程序举例(3)设计表在新创建的数据库TEST中建立一个用户表userTable,表结构如表1.1所示。字段名称数据类型主
键自
增允许为空描
述idint是增1
ID号usernamevarchar(20)
用户名passwordvarchar(20)
密码2.简单JavaEE程序举例字段包括:id、username和password。其中id设为自动增长的int型,并设为主键。username和password都设为varchar型。表建好后,向其中录入两条数据记录。最后设计好的表及其中数据在NavicatPremium中的显示效果,如图1.53所示。2.简单JavaEE程序举例(4)MyEclipse2017中创建数据库连接JavaEE应用的底层代码都是通过JDBC接口访问数据库的,每种数据库针对这个标准接口都有着与其自身相适配的JDBC驱动程序。目前为止微软SQLServer系列最为通用的JDBC驱动程序包是sqljdbc4.jar,读者可上网下载获得,将它保存在某个特定的目录下待用。笔者将它存盘在MyEclipse的工作区“C:\Users\Administrator\Workspaces\MyEclipseCI”中,如图1.54所示。2.简单JavaEE程序举例在使用这个驱动之前,要先建立与数据源的连接。在MyEclipse2017开发环境中,选择主菜单【Window】→【Perspective】→【OpenPerspective】→【DatabaseExplorer】,即可切换至MyEclipse2017的DBBrowser(数据库浏览器)模式,在左侧的子窗口中右击鼠标,选择菜单【New…】,打开对话框配置数据库驱动,如图1.55所示。2.简单JavaEE程序举例在打开【DatabaseDriver】对话框的“NewDatabaseConnectionDriver”页中,配置SQLServer驱动,编辑连接驱动的各项参数,具体操作步骤见图1.56中的①~⑨标注。2.简单JavaEE程序举例配置了SQLServer驱动后,在DBBrowser中可看到多出一个名为sqlsrv的节点,此即为我们创建的数据库连接,右击该节点,在弹出菜单中选择【Openconnection...】,打开这个连接,操作如图1.57所示。2.简单JavaEE程序举例(5)创建JavaEE项目启动MyEclipse2017,选择主菜单【File】→【New】→【WebProject】,出现【NewWebProject】对话框,如图1.58所示。2.简单JavaEE程序举例按照对话框向导的指引操作,在“WebModule”页中勾选“Generateweb.xmldeploymentdescriptor”(自动生成项目的web.xml配置文件);在“ConfigureProjectLibraries”页中勾选“JavaEE7.0GenericLibrary”,同时取消选择“JSTL1.2.4Library”,如图1.59所示。2.简单JavaEE程序举例(6)编写JSP本例要写4个JSP文件:login.jsp(登录页)、validate.jsp(验证页)、main.jsp(欢迎主页)和error.jsp(出错处理页)。在项目工程目录树中,右击WebRoot项,从弹出的菜单中选择【New】→【File】,在如图1.60所示的窗口中输入文件名login.jsp,单击【Finish】按钮。MyEclipse会自动在项目WebRoot目录下创建一个名为login.jsp的JSP文件,此时项目的工程目录视图如图1.61所示,其中WEB-INF是一个很重要的目录,JavaEE项目的配置文件web.xml以及导入库lib都在这个目录下。
2.简单JavaEE程序举例在代码编辑器中编写login.jsp(登录页)文件,代码。此页面用于显示登录首页,其中表单“action="validate.jsp"”表示用户在单击【登录】按钮后,页面提交给一个名为validate.jsp的页(验证页)作进一步处理。用同样的方法,在WebRoot下创建validate.jsp文件,编写代码。<jsp:useBean>的功能是初始化一个class属性所指定的Java类的实体,并将该实体命名为id属性所指定的值。简而言之,也就是给已创建好的JDBC类(位于项目org.easybooks.test.jdbc包下的SqlSrvDBConn类)指定一个别名SqlSrvDB,之后就可以在JSP页的源码中直接引用这个别名来调用该JDBC类的方法了,如executeQuery()、closeStmt()和closeConn()等方法。<jsp:forward>动作把用户的请求转到另外的页面进行处理,在本例中用于实现页面间跳转,根据验证处理的结果不同:若验证成功,转到欢迎主页(main.jsp);若失败,转到出错处理页(error.jsp)。2.简单JavaEE程序举例接下来,在项目WebRoot目录下再创建两个JSP文件:欢迎主页(main.jsp)和出错处理页(error.jsp)。main.jsp的代码如下:<%@pagelanguage="java"pageEncoding="gb2312"%><html><head> <title>留言板信息</title></head><body> <%out.print(request.getParameter("username"));%>,您好!欢迎登录留言板。</body></html>2.简单JavaEE程序举例欢迎主页上使用JSP内嵌的Java代码“out.print(request.getParameter("username"));”从请求中获取用户名以回显。error.jsp的代码如下:<%@pagelanguage="java"pageEncoding="gb2312"%><html><head> <title>出错</title></head><body>
登录失败!单击<ahref="login.jsp">这里</a>返回</body></html>2.简单JavaEE程序举例(7)创建JDBC类由于登录时要对数据库进行查询,从图1.50可知,直接访问数据库的是JDBC,故要创建JDBC类。创建之前先建一个包用于存放JDBC类,右击项目src文件夹,选择菜单【New】→【Package】,在【NewJavaPackage】窗口输入包名“org.easybooks.test.jdbc”,如图1.62所示,单击【Finish】按钮。2.简单JavaEE程序举例右击src,选择菜单【New】→【Class】,出现如图1.63所示的【NewJavaClass】对话框。2.简单JavaEE程序举例单击“Package”栏后的【Browse…】按钮,指定类存放的包为“org.easybooks.test.jdbc”,输入类名“SqlSrvDBConn”,单击【Finish】按钮。编写SqlSrvDBConn.java代码。在程序中利用Class.forName()方法加载指定的驱动程序,这样将显式地加载驱动程序。"jdbc:sqlserver://HUAWEI:1433;databaseName=TEST","sa","123456"是SQLServer2016的连接字符串,对于不同的DBMS,连接字符串是不一样的。2.简单JavaEE程序举例(8)添加JDBC驱动包编码完成后,还需要将JDBC驱动包sqljdbc4.jar复制到项目的“\WebRoot\WEB-INF\lib”目录下。在项目工程目录视图中刷新(右键菜单→【Refresh】)即可,最后的目录树如图1.64所示。2.简单JavaEE程序举例(9)部署JavaEE项目项目开发完成,要部署到服务器上方能运行。项目中一共4个JSP文件,我们希望这个系统的启动页是login.jsp,需要修改web.xml文件:<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID"version="3.1"><display-name>jsp_jdbc</display-name><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list></web-app>2.简单JavaEE程序举例单击工具栏上的
(ManageDeployments…)按钮,弹出【ManageDeployments】对话框,如图1.65所示,在“Module”栏下拉列表中选择本项目名“jsp_jdbc”,此时右侧【Add...】按钮变为可用,单击该按钮。2.简单JavaEE程序举例单击【Add...】按钮后,弹出【Deploymodules.】对话框,如图1.66所示。在“Deploymodules.”页选择项目要部署到的目标服务器,选中上方的“Chooseanexistingserver”选项,在列表里选择服务器“Tomcatv9.0Serveratlocalhost”(即1.2.1节2.中安装的Tomcat9);单击【Next】按钮进入“AddandRemove”页,于该页上添加/移除要配置到服务器的其他资源,由于本例仅一个单独的项目,并无额外的资源需要配置,故直接单击底部的【Finish】按钮即可。2.简单JavaEE程序举例完成后回到【ManageDeployments】对话框,可以看到列表中多了“jsp_jdbc Exploded”一项,表明项目已成功地部署到Tomcat9服务器上,如图1.67所示,单击【OK】按钮确认。2.简单JavaEE程序举例(10)运行浏览启动Tomcat,在浏览器中输入“http://localhost:8080/jsp_jdbc/”并回车,将显示如图1.68所示的登录页面。输入用户名、密码(必须是数据库userTable表中已有的)。单击【登录】按钮提交表单,转到如图1.69所示的欢迎主页面并回显欢迎信息。2.简单JavaEE程序举例当然,若是输入错误的密码,或者输入一个数据库userTable表中不存在的用户名和密码,则提交后会跳转到如图1.70所示的出错处理页。
目录JavaEE程序的调试031.设置断点2.进入调试透视图3.变量查看4.变量跟踪1.设置断点在源代码语句左侧的隔条上双击鼠标左键,可以在当前行设置断点。这里将断点设置在validate.jsp源文件中,如图1.71所示。2.进入调试透视图部署运行程序,在登录页输入用户名、密码后单击【登录】按钮提交表单,此时系统会自动切换到如图1.72所示的调试透视图界面。3.变量查看右上部的Variables视图显示了此刻程序中各个变量的取值,如图1.73所示。可见,usr、pwd、validated和sql已经有了值,那是因为刚刚执行了如下语句:Stringusr=request.getParameter("username"); //获取提交的用户名Stringpwd=request.getParameter("password"); //获取提交的密码booleanvalidated=false; //验证成功标识//查询user表中的记录Stringsql="select*fromuserTable";4.变量跟踪接下来,从断点处往下一步一步(单步)执行程序,同时跟踪各变量的动态变化,如图1.74所示,单击Debug视图右上方工具栏的【StepOver】按钮,每单击一下,程序就往下执行一步。……在进入到while循环执行两步以后,系统验证出了正确的用户名密码,高亮条指示如图1.75所示的语句。4.变量跟踪再次单击【StepOver】按钮,执行这句代码,将validated值置为true,如图1.76所示,在Variables视图中能够清楚地看到变量值的改变。目录管理JavaEE项目041.导出项目2.移除项目3.打开项目4.导入项目1.导出项目下面以1.3.2节开发的Web登录程序项目为例,介绍项目的导出操作。在开发环境工作区视图中右击项目名jsp_jdbc,选择菜单【Export】→【Export…】,在弹出的【Export】窗口中展开目录树,选择【General】→【FileSystem】(表示导出的项目存盘在本地文件系统),如图1.77所示,单击【Next】按钮继续。在“Filesystem”页中单击【Browse…】按钮选择存盘路径,如图1.78所示。
2.移除项目右击项目名jsp_jdbc,选择菜单【Delete】,弹出【DeleteResources】窗口,如图1.79所示,单击【OK】按钮,操作之后会发现工作区视图中对应项目jsp_jdbc的整个目录树都不见了,说明已被移除。3.打开项目在MyEclipse2017环境下,选择主菜单【File】→【OpenProjectsfromFileSystem...】,出现【ImportProjectsfromFileSystemorArchive】对话框,如图1.80所示。4.导入项目在MyEclipse主菜单中选择【File】→【Import…】,在弹出的【Import】窗口中展开目录树,选择【General】→【ExistingProjectsintoWorkspace】,如图1.81所示,单击【Next】按钮。4.导入项目在接下来的“ImportProjects”页,单击【Browse...】按钮选择先前存盘的项目jsp_jdbc,单击【确定】按钮将其加入“Projects”列表中,在导入前还可以勾选下方“Options”组框中的“Copyprojectsintoworkspace”(在导入时将项目一并复制到MyEclipse的工作区)。最后单击【Finish】按钮完成导入,如图1.82所示。第2章
JavaWeb开发基础——HTML语言目录HTML文件的基本结构01HTML文件的基本结构HTML文件的基本结构如图2.1所示。HTML文件的基本结构【例2.1】第一个网页。<html><head> <title>第一个html网页</title></head><body> <imgsrc="image\njnu.jpg"> <br> <ahref="b.html">超链接</a> <hralign=center>
这是我的第一个网页</body></html>目录HTML文件的语言标记021.HTML标记2.首部标记3.标题栏标记4.描述标记5.正文标记6.分段标记
7.换行标记8.标题标记9.对中标记10.块标记11.水平线标记12.字体标记13.图像标记14.超链接标记HTML文件的语言标记1.HTML标记<html>…</html>HTML标记表示文档内容的开始和结束。<html>是开始标记,</html>是结束标记,其他所有的HTML代码都位于这两个标记之间。浏览器将该标记中的内容视为一个Web文档,按照HTML语言规则对文档内的标记进行解释。<html>…</html>标记是可选的,但是最好不要省略这两个标记,以保持Web文档结构的完整性。2.首部标记<head>…</head>首部标记中提供与网页有关的各种信息。在首部标记中,一般使用下列标记。<title>...</title>:制定网页的标题。<style>...</style>:定义文档内容样式表。<script>...</script>:插入脚本语言程序。<meta>:描述网页信息。这些信息首先向浏览器提供,但不作为文档内容提交。HTML文件的语言标记3.标题栏标记<title>…</title>标题栏标记的内容是在浏览器标题栏中显示的文本。通常,Web搜索工具用它作为索引。4.描述标记<meta属性="值"…>描述文档属性参数。HTML文件的语言标记5.正文标记正文标记的格式如下:<body属性="值"…事件="执行的程序"…>…</body>正文标记中包含文档的内容。其常用属性如下。
background:文档背景图像的URL地址。
bgcolor:文档的背景颜色。
text:文档中文本的颜色。
link:文档中链接的颜色。
vlink:文档中已被访问过的链接的颜色。
alink:文档中正被选中的链接的颜色。HTML文件的语言标记6.分段标记<p属性="值"…></p>段落是文档的基本信息单位。利用分段标记,可以忽略文档中原有的回车和换行。定义一个新段落,就是换行并插入一个空行。单独使用<p>标记时会空一行,使后续内容隔一行显示。同时使用<p></p>,则将段落包围起来,表示一个分段的块。其最常用的属性为align,其值如下。left:左对齐(默认值)center:居中对齐right:右对齐justify:两边对齐HTML文件的语言标记7.换行标记<br>该标记强行中断当前行,使后续内容在下一行显示,这个标记很简单,也很常用。8.标题标记标题标记的格式如下:<h1属性="值"…>…</h1><h2属性="值"…>…</h2><h3属性="值"…>…</h3><h4属性="值"…>…</h4><h5属性="值"…>…</h5><h6属性="值"…>…</h6>HTML文件的语言标记9.对中标记<center>…</center>该标记中间的内容全部居中。10.块标记<div属性="值"…>…</div>块标记的作用是定义文档块。其常用属性也是align。HTML文件的语言标记11.水平线标记<hr属性="值"…>在<hr>标记位置画一条线。常用属性如下。
align:段落的水平对齐方式,其值如下。left:左对齐(默认值)center:居中对齐right:右对齐
color:线的颜色。
size:线的宽度(以像素为单位)。
width:线的长度(像素或占页面宽度的百分数)。
noshade:显示一条无阴影的实线。·HTML文件的语言标记12.字体标记<font属性="值"…>…</font>字体标记用来设置文本的字符格式,主要包括字体、字号和颜色等。常用属性如下。
face:字体名表。
size:字号值。
color:颜色值。设置字体的颜色。HTML文件的语言标记13.图像标记<img属性="值"…>图像标记的常用属性如下。
src:图像文件的URL地址。
alt:图像的简单文本说明,在浏览器下不能显示图像或图像加载时间过长时显示该文本。
height:显示图像的高度(像素或百分比)。
width:显示图像的宽度(像素或百分比)。
align:图像大小小于显示区域大小时的对齐方式。使用align属性设置图像与文本在垂直方向的对齐方式,此时align属性的取值如下。top:图像与文本顶部对齐middle:图像与文本中央对齐bottom:图像与文本底部对齐当图像在左右绕排文本时,align属性的取值如下。left:图像居左,文本居右right:图像居右,文本居左HTML文件的语言标记14.超链接标记<a属性:"值"…>超链接内容</a>超链接的常用属性如下。
href:目标端点的URL地址(可以包含一个或多个参数)。如前面的例子中:<ahref="b.html">超链接</a>单击此超链接,就会跳转到名为b.html的页面。该属性是必选项。
target:窗口或框架的名称。target属性的取值既可以是窗口或框架的名称,也可以是如下保留字。_blank:未命名的新浏览器窗口_parent:父框架页或窗口,如果包含链接的框架不是嵌套的,则链接的目标文件加载到整个浏览器窗口中_self:所在的同一框架或窗口_top:整个浏览器的窗口,并删除所有框架目录HTML基本说明031.颜色2.字符实体3.常用属性4.常用事件HTML基本说明1.颜色许多标记也用到了颜色属性,颜色值一般用颜色名称或十六进制数值来表示。①使用颜色名称来表示。例如,红色、绿色和蓝色分别用red、green和blue表示。②使用十六进制格式数值#RRGGBB来表示,RR、GG和BB分别表示颜色中的红、绿、蓝三原色的两位十六进制数据。例如,红色、绿色和蓝色分别用#FF0000、#00FF00和#0000FF表示。表2.1列出了16种标准颜色及其十六进制数值。颜
色名
称十六进制数值颜
色名
称十六进制数值淡蓝aqua(cyan)#00FFFF海蓝navy#000080黑black#000000橄榄色olive#808000蓝blue#0000FF紫purple#800080紫红fuchsia(magenta)#FF00FF红red#FF0000灰gray#808080银色silver#C0C0C0绿green#008000淡青teal#008080橙lime#00FF00白white#FFFFFF褐红maroon#800000黄yellow#FFFF00HTML基本说明2.字符实体有些字符在HTML里有特别的含义,比如小于号<就表示HTMLTag的开始,这个小于号不显示在网页中。如果我们希望在网页中显示一个小于号,就要讲到HTML字符实体。一个字符实体以&符号打头后跟实体名字或者是#加上实体编号,最后是一个分号。最常用的字符实体如表2.2所示。显示结果说
明实
体
名实
体
号
显示一个空格
<
小于<<>
大于>>&&符号&&"双引号""©版权©©®注册商标®®×乘号××÷除号÷÷HTML基本说明3.常用属性有些属性在HTML许多标记中出现。①类名:class。②唯一标识:id。③内样式:style。④提示信息:title。4.常用事件事件处理描述是一个或一系列以分号隔开的JavaScript表达式、方法和函数调用,并用引号引起来。当事件发生时,浏览器会执行这些代码。事件包括窗口事件、表单及其元素事件、键盘事件、鼠标事件。目录表单与表格041.表单2.表单:输入控件3.表单:滚动文本框4.表单:选项选单5.表格1.表单表单用来从用户(站点访问者)处收集信息,然后将这些信息提交给服务器进行处理。表单中可以包含允许用户进行交互的各种控件,例如,文本框、列表框、复选框和单选按钮等。用户在表单中输入或选择数据后提交,该数据就会提交到相应的表单处理程序,以各种不同的方式进行处理。表单结构如下:<form定义> [<input定义>] [<textarea定义>] [<select定义>] [<button定义>]</form>1.表单form标记的属性如下。
name:表单的名称。
method:表单数据传输到服务器的方法。其属性值如下:post:在HTTP请求中嵌入表单数据get:将表单数据附加到请求该页的URL中
action:接收表单数据的服务器端程序或动态网页的URL地址。
target:目标窗口,其属性值如下。_blank:在未命名的新窗口中打开目标文档_parent:在显示当前文档的窗口的父窗口中打开目标文档_self:在提交表单所使用的窗口中打开目标文档_top:在当前窗口内打开目标文档,确保目标文档占用整个窗口form标记有以下事件。
onsubmit:提交表单时调用的时间处理程序。
onreset:重置表单时调用的处理程序。2.表单:输入控件<input属性="值"…事件="代码"…>(1)单行文本框。创建单行文本框方法如下:<inputtype="text"属性="值"…事件="代码"…>单行文本框的属性如下。
name:单行文本框的名称,通过它可以在脚本中引用该文本框控件。
value:文本框的值。
defaultvalue:文本框的初始值。
size:文本框的宽度(字符数)。
maxlength:允许在文本框内输入的最大字符数。
form:所属的表单(只读)。单行文本框的方法如下。
click():单击该文本框。
focus():得到焦点。
blur():失去焦点。
select():选择文本框的内容。单行文本框的事件如下。
onclick:单击该文本框时执行的代码。
onblur:失去焦点时执行的代码。
onchange:内容变化时执行的代码。
onfocus:得到焦点时执行的代码。
onselect:选择内容时执行的代码。2.表单:输入控件2.表单:输入控件(2)密码文本框。创建密码文本框方法如下:<inputtype="password"属性="值"…事件="代码"…>密码文本框的属性、方法和事件与单行文本框的设置基本相同,只是密码文本框没有onclick事件。(3)隐藏域。创建隐藏域方法如下:<inputtype="hidden"属性="值"…>隐藏域的属性、方法和事件与单行文本框的设置基本相同,只是没有defaultvalue属性。2.表单:输入控件(4)复选框。创建复选框方法如下:<inputtype="checkbox"属性="值"…事件="代码"…>选项文本复选框的属性如下。name:复选框的名称。value:选中时提交的值。checked:当第一次打开表时该复选框处于选中状态。defaultchecked:判断复选框是否定义了checked属性。复选框的方法如下。focus():得到焦点。blur():失去焦点。click():单击该复选框。2.表单:输入控件复选框的事件如下。onfocus:得到焦点时执行的代码。onblur:失去焦点时执行的代码。onclick:单击该文本框时执行的代码。例如,要创建以下复选框:应在body体内设置代码如下:<inputname="fruit"type="checkbox"checked>苹果<inputname="fruit"type="checkbox">香蕉<inputname="fruit"type="checkbox">橘子2.表单:输入控件(5)单选按钮。创建单选按钮方法如下:<inputtype="radio"属性="值"…事件="代码"…>选项文本单选按钮的属性如下。name:单选按钮的名称,若干个名称相同的单选按钮构成一个控件组,在该组中只能选中一个选项。value:提交时的值。checked:当第一次打开表单时该单选按钮处于选中状态。该属性是可选的。例如,创建以下单选按钮:应在body中设置代码如下:性别:<inputname="sex"type="radio"checked>男
<inputname="sex"type="radio">女2.表单:输入控件(6)按钮。使用input标记可以在表单中添加3种类型的按钮:提交按钮、重置按钮和自定义按钮。创建按钮的方法如下:<input属性="值"…onclick="代码">按钮的属性如下。type:按钮种类,具体如下。submit:创建一个提交按钮。reset:创建一个重置按钮。button:创建一个自定义按钮。name:按钮的名称。value:显示在按钮上的标题文本。按钮的事件如下。onclick:单击按钮执行的脚本代码。2.表单:输入控件(7)文件域。创建文件域的方法如下:<inputtype="file"属性="值"…>其中,“属性="值"”部分可以进行如下设置。name:文件域的名称。value:初始文件名。size:文件名输入框的宽度。3.表单:滚动文本框<textarea
属性="值"…事件="代码"…>初始值</textarea>其属性如下。name:滚动文本框控件的名称。rows:控件的高度。cols:控件的宽度。readonly:表示文本框中的内容是只读的,不能被修改。该标记的其他属性、方法和相关事件与单行文本框基本相同。4.表单:选项选单创建选项选单方法如下:<selectname="值"size="值"[multiple]> <option[selected]value="值">选项1</option> <option[selected]value="值">选项2</option> …</select>其属性如下。name:选项选单控件的名称。size:在列表中一次可以看到的选项数目,默认值为1。multiple:允许做多项选择。selected:该选项的初始状态为选中。4.表单:选项选单【例2.2】表单控件的使用。将下面的文件命名为all.html,保存到磁盘上。双击all.html文件,在页面上就会出现如图2.2所示的界面。读者也可以做一些相关的实验,把其他属性都演示一遍。可以看出,上面所做的页面,功能是达到了,但是整体的外观效果不是很好,没有统一地规划。如果把它们都放在表格中,问题就解决了,下面来具体介绍表格的使用。5.表格表格由表头、行和单元格组成,常用于组织和显示信息,还可以用于安排页面布局。表格的表头、行和单元格分别用不同的标记来定义。可以用table标记定义表格;表格中的每一行用tr标记来表示;行中的单元格用td或th标记定义。其中th标记定义表格的列标题单元格,表格的标题说明则用caption标记来定义。定义表格的格式图解,如图2.3所示。5.表格【例2.3】表格的使用。把这段代码保存,命名为table.html,双击该文件会看到如图2.4所示的界面。5.表格(1)设置表格的属性用table标记创建表格时,可以设置以下属性。l
align:表格的对齐方式,其属性值如下。left:左对齐(默认值)center:居中对齐right:右对齐l
background:表格背景图片的URL地址。l
bgcolor:表格的背景颜色。l
border:表格边框的宽度(像素),默认值为0。l
bordercolor:表格边框的颜色,border≠0时起作用。l
bordercolordark:三维边框的阴影颜色,border≠0时起作用。l
bordercolorlight:三维边框的高亮显示颜色,border≠0时起作用。l
cellpandding:单元格内数据与单元格边框之间的间距(像素)。l
width:表格的宽度(像素或百分比)。5.表格(2)设置行的属性表格中的每一行是用tr标记来定义的,可以设置下列属性。l
align:行中单元格的水平对齐方式,其属性值如下。left:左对齐(默认值)center:居中对齐right:右对齐l
background:行的背景图片的URL地址。l
bgcolor:行的背景颜色。l
bordercolor:行的边框颜色,只有当table标记的border≠0时起作用。l
bordercolordark:行的三维边框的阴影颜色,只有当table标记的border≠0时起作用。l
bordercolorlight:行的三维边框的高亮显示颜色,只有当table标记的border≠0时起作用。l
valign:行中单元格内容的垂直对齐方式,其属性值如下。top:顶端对齐middle:居中对齐bo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高压釜温控工岗位知识能力考核试卷含答案
- 漆艺师岗中认证考核试卷含答案
- 2026年固废资源化高级工程师招聘笔试试卷 招录14人大全
- 2026年精益数字化高级咨询师招聘笔试试卷 招录14人完整版
- 2026年智能照明高级研发工程师招聘笔试试卷 招录13人题库
- 风景园林计算机辅助设计 课件 6.1 数字模型渲染与展示
- 2026年湖南省浏阳市高三数学下册期末考试模拟考试卷含答案【培优】
- 2026年湖北省仙桃市高三数学下册期末考试模拟测试卷附完整答案【必刷】
- 2026年湖北省丹江口市高三数学下册期末考试模拟检测卷附答案(培优)
- 2026年河北省三河市高三数学下册期末考试模拟测试卷含答案(培优)
- 2026年癌症早诊早治项目实施方案
- 2026年湖南省高考真题历史试题试卷答案解析
- 2026年精神卫生日宣传课件
- 室外消防给水管道敷设施工方案
- 2026年法律硕士(法学)考研真题及完整答案解析(统考回忆版)
- 测绘涉密成果管理责任人及岗位安排
- 组织培养与植物离体种质资源保存
- 2026年银行团队主管竞聘面试题库
- 自来水水厂检验工作制度
- 边坡注浆施工方案
- 揭秘助剂在氨纶混纺织物防沾色中的关键作用及与染料的协同机制
评论
0/150
提交评论