搜索
首页数据库mysql教程使用Ant和Tomcat创建Web应用_MySQL
使用Ant和Tomcat创建Web应用_MySQLJun 01, 2016 pm 02:11 PM
addresstomcat使用创建地址应用目录

Tomcat



使用何种技术

  我使用Tomcat 4的Servlet/JPS容器技术实现一个Web应用程序。这个过程中仍然有许多不确定的事,在多种可行的技术中选一种可不是一件容易的事。这篇文章中,我选择尽量简单的解决方案,混合使用Java Server Pages(JSPs)以及Java。

  应当尽量避免使用JSPs实现复杂逻辑;那种程序也许容易写,但难以调试而且几乎不可能被理解和维护。好的解决方案是用JSPs负责Web页面的显示(这正是JSPs擅长的),把复杂逻辑的实现交给Java,如对数据库的访问。这样,程序不但比较容易实现和调试,而且易于理解和维护。

  这个Web应用程序可以运行在专用Web服务器或者是个人电脑上,操作系统可以是Windows,Linux,或者Mac OS。所需的软件包有Java运行时环境(JDK1.2或以上版本),Tomcat最新版本(Tomacat 4或以上版本),以及Ant开发工具(Ant 1.4或以上版本)。Ant用于创建Web应用程序包(WAR),以及在Tomcat上安装部署WAR文件,配置关系数据库接口javax.sql.DataSource。所有以上提到的软件包都可以通过Internet免费获得。


  这个Web应用程序还需要一个数据库。几乎所有支持SQL而且有JDBC驱动的关系数据库都可以。MySQL是一个符合条件的不错选择。从MySQL.com可以得到MySQL的最新版本以及它的JDBC驱动Connector/J。

  为了让Ant与Tomact管理软件协同工作,需要将catalina-ant.jar从Tomcat的server/lib目录拷贝到Ant的lib目录下。将你的数据库JDBC驱动程序复制到Tomcat的common/lib目录下使Tomcat和其上的Web应用程序可以访问数据库。最后,必须建立Tomcat的admin和manager角色(roles),及其用户名和密码,编辑Tomcat的conf目录下的tomcat-user.xml文件如下:



我的开发环境是Apple Cube,运行Mac OS X 10.2.1操作系统,软件包JDK 1.3.1,Tomcat 4.1.12,Ant1.5.1,MySQL 3.23.52,及Connector/J 3.0.1-beta。操作系统升级到Mac OS X 10.2.2未出现任何问题。同样Tomcat升级到4.1.17也没出现问题。

Web应用程序

  本文通过一个叫做AddressBook的简单地址簿程序来说明如何应用将要介绍的技术。这个应用程序的目的不是建立一个地址簿的正式版本,它仅仅是一个例子。

AddressBook中的Java程序: AddressBook中包含三个Java程序。图1显示了他们在Tomcat中的是如何使用的。


使用Ant和Tomcat创建Web应用




Home.jsp: Home.jsp是AddressBook的主页,也就是用户使用AddressBook时见到的第一个页面。它用一个表显示Address库中的所有地址。表中的每一行显示一个地址,以及删除或修改地址的连接。页面底部有一个添加新地址的连接。配置信息见web.xml notes。

添加地址连接将控制权交给RequestAdd.jsp

删除地址连接将控制权交给RequestDelete.jsp,同时将要删除的地址id传递给该页

修改地址连接将控制权交给RequestModify.jsp,同时将要修改的地址id传递给该页

细节请看Home.jsp的完整的带有注释的源代码。

RequestAdd.jsp: RequestAdd.jsp提供一个地址表单用于输入新地址。页面底部的取消连接可以取消这次操作。

提交表单将新的地址域值以及控制权交给DoAdd.jsp

取消操作将控制权交给Home.jsp。细节请看RequestAdd.jsp的完整的,带有注释的源代码。

DoAdd.jsp: DoAdd.jsp显示接收到的地址域值。然后将新地址添加到数据库并显示是否成功的信息。页面底部有一个继续连接。

点击继续连接回到Home.jsp。细节请看DoAdd.jsp的完整的,带有注释的源代码。

RequestDelete.jsp: RequestDelete.jsp读取得到的id相应的地址。该页面在表中显示地址域以便让你确认删除的是正确的地址。页面底部的两个连接分别是继续请求的继续连接和取消请求的取消连接。

选择继续连接将转到DoDelete.jsp并传递要删除的地址id

选择取消连接回到Home.jsp。细节请看RequestDelete.jsp的完整的带有注释的源代码。

DoDelete.jsp: DoDelete.jsp读取传递给它的id。在表中显示该id对应的地址,从数据库中删除它,并显示是否成功。页面底部是继续连接。

选择继续连接回到Home.jsp。细节请看DoDelete.jsp的完整的,带有注释的源代码。

RequestModify.jsp: RequestModify.jsp显示一个表单并填入当前的地址,同时提供提交按钮和取消连接。

提交表单将新的地址域值以及控制权交给DoModify.jsp

选择取消连接回到Home.jsp。细节请看RequestModify.jsp的完整的,带有注释的源代码。

DoModify.jsp: DoModify.jsp显示接收到的修改的地址域值。然后修改数据库中的地址记录,并返回成功与否。页面底部是继续连接。

选择继续连接回到Home.jsp。细节请看DoModify.jsp的完整的,带有注释的源代码。

AddressBook的Addresses数据库表: 如何建立数据库取决于所用的数据库软件。若你用的不是MySQL以下的步骤就需要根据情况修改。AddressBook只有一个表Addresses,保存在数据库Public中。表Addresses有七个域:

id,主键,自动增长的数据域

surname,长度为24的字符域,保存联系人的姓

firstname,长度为24的字符域,保存联系人的名

street,长度为80的字符域,保存地址的第一行

district,长度为80的字符域,保存地址的第二行

city,长度为40的字符域,保存城市名

postcode,长度为10的字符域,保存邮政编码

首先建立MySQL数据库(Mac OS X 10.2.1)。用管理员权限启动mysql命令行工具,需要的话输入密码。创建Public数据库,以及账号mysqlusername密码mysqlpassord。命令如下:

# mysql -u root -pmysql> create database Public;mysql> grant all privileges on Public.* to mysqlusername@localhostidentified by 'mysqlpassword' with grant option;mysql> flush privileges;



然后,在Public数据库中创建Addresses表。

mysql> create table Addresses ( id int(8) primary key auto_increment, surname varchar(24) not null, firstname varchar(24) not null, street varchar(80) not null, district varchar(80) not null, city varchar(40) not null, postcode varchar(10) not null );



用命令Commit;提交。要检查对表的操作是否正确,键入命令describe Addresser;,将得到如下结果:

+-----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+----------------+| id | int(8) | | PRI | NULL |auto_increment|| surname | varchar(24) | | | | || firstname | varchar(24) | | | | || street | varchar(80) | | | | || district | varchar(80) | | | | || city | varchar(40) | | | | || postcode | varchar(10) | | | | |+-----------+-------------+------+-----+---------+----------------+



现在可以插入一行来测试数据库

mysql> insert into Addresses (surname, firstname, street, district,city, postcode) values ("Smith", "John", "1, The High Street,","Downtown,", "Metropolis.", "X99 9XX");mysql> commit;mysql> select * from Addresses;



结果如下:


使用Ant和Tomcat创建Web应用

注意地址的id被自动赋予值1。至此AddressesBook的数据库创建完成。

配置AddresBook的开发目录

  现在我们配置存放AddressBook源文件的目录,以及Web应用程序的war目录,它也是存放Web应用程序包的目录。下载AddressBook源程序压缩包。解压后将得到Ant能够处理的源程序目录结构,如图3所示。不需要对AddressBook的开发目录进行特殊改变?建议将其解压至你的home目录(Mac OS)。
使用Ant和Tomcat创建Web应用

让我们看看这些文件:

AddressBook/build.properties: AddressBook/build.properties含有若干被AddressBook/build.xml读取得设置信息。定制build过程时,尽量编辑较小的build.properties文件,而不要修改复杂的多的build.xml文件。

app.name=AddressBooktomcat.home=/usr/local/jakarta-tomcat-4.1.12manager.url=http://localhost:8080/managerusername=tomcatusernamepassword=tomcatpassword



app.name参数不需要修改。如果将来要重用这些文件创建新的Web应用程序时把该参数改为新的程序名。如果在本地机器上运行Tomcat 4,则manager.url参数也不必修改。

tomcat.home参数为Tomcat的安装目录,以上的设置表示Tomcat 4.1.12安装在/url/local目录下(Mac OS)。Ant将根据这个参数设置编译AddressBook时的CLASSPATH变量,使它包含Tomcat的common/lib.jar文件。(这样Tomcat 和Web应用程序都可以直接访问这个文件,而不必将其复制到应用程序的WEB-INF/lib目录下。)

Tomcat也有一个类似的目录:shared/lib,给目录下的.jar文件在运行时对于应用程序是可访问的,但对Tomcat是不可访问的。

参数tomcatusrename和tomcatpassword必须与Tomcat的配置文件conf/tomcat-users.xml中的设置一致。Ant使用它们以及manager.url取得在Tomcat环境中安装AddressBook应用的权限。

细节请看build.properties的完整带有注释的源代码。

AddressBook/build.xml: AddressBook/build.xml文件是Ant的配置文件,它使用许多Ant的标签。以下是比较常用的:

? ant build 创建Web应用程序

? ant install 安装Web应用程序用于测试

? ant remove 卸载Web应用程序

? ant deploy安装部署Web应用程序

? ant undeploy卸载Web应用程序

细节请看build.xml的完整的带有注释的源代码。

AddressBook/context.xml: AddressBook/context.xml是在Ant处理安装、重新载入、删除、部署、卸载请求时装入Tomcat中的。给文件记录的是AddressBook的上下文信息,或者是Tomcat运行AddressBook需要的参数。

Logger项定义了Tomcat用文本格式记录AddressBook的事件日志,并存放于Tomcat的logs目录下。以下Logger项定义了名为localhost_AddressBook_log.YYYY-MM-DD.txt的日志文件,其中YYYY-MM-DD为日志日期:





Resource和ResourceParams项定义Tomcat必须为AddressBook创建一个叫jdbc/Publicd的javax.sql.DataSource。以下设置创建了一个javax.sql.DataSource,其值为org.apache.commons.dbcp.BasicDataSourceFactory类,URL为jdbc:mysql://localhost:3306/Public?autoReconnect=true,JDBC驱动:org.gjt.mm.mysql.Driver,用户名和密码分别为:mysqlusername和mysqlpassword:

以上代码将javax.sql.DataSource作为该Web应用程序的上下文变量。如果该变量不止被一个Web应用用到,可以将它定义为全局资源。细节请看context.xml的完整的带有注释的源代码。

AddressBook/src/*.java: src目录中存放Web应用的三个Java程序。见Address.java,AddressesDB.java和ContextListener.java的描述。

AddressBook/web/*.jsp: web目录存放Web应用的七个JSP页面。见Home.jsp, RequestAdd.jsp, DoAdd.jsp, RequestDelete.jsp, DoDelete.jsp, RequestModify.jsp, 和 DoModify.jsp的描述。

AddressBook/web/WEB-INF/web.xml: AddressBook/web/WEB-INF/web.xml是AddressBook的web应用部署描述文件。其中包含两个主要参数:listener参数定义了Java类监听器AddressBook.ContextListener,在程序启动和关闭是被调用。

AddressBook.ContextListener



welcom-file-list参数定义了AddressBook的首页。如下设置定义AddressBook的首页为Home.jsp。

Home.jsp



细节请看web.xml的完整的,带有注释的源代码。

创建,安装,部署和运行AddressBook: 安装AddressBook是先将当前目录改为AddressBook目录,然后运行Ant的install命令:

$ cd AddressBook$ ant install



  如果安装失败,检查Tomcat的conf目录下的tomcat-user.xml是否配置正确,以及catalina-ant.jar是否从Tomcat的server/lib目录下拷贝到Ant的lib目录。

  注意ant install自动触发运行Ant的若干个标签,依次为ant int,ant prepare,ant build和ant package:

? ant init初始化时间戳

? ant prepare在AddressBook目录下创建war目录结构,包括:一个war目录,一个war/WAR-INF目录,一个war/WEB-INF/classes目录,及一个war/WEB-INF/lib目录。

? ant build创建Web应用程序,包括将jsp文件拷贝到war目录下,将context.xml文件拷贝到war/META-INF目录下,将web.xml文件拷贝到war/WEB-INF目录下,并编译Java文件结果存入war/WEB-INF/classes目录下。

? ant package从war目录创建Web程序包。Web程序包是由jar工具创建的.jar文件。

? 最后,ant install根据war/META-INF/context.xml的配置信息将Web程序包安装到Tomcat中。你可能注意到不需要登陆root权限或Tomcat就可以安装AddressBook,只要你的普通用户账号即可。Ant用定义在AddressBook/build.properties中的tomcatusername和tomcatpassword即可安全的执行以上过程。

  安装过程因配置选项不同而不同,配置信息具体见AddressBook/build.xml。图4显示了构成AddressBook Web应用程序的war目录结构以及各种文件。
使用Ant和Tomcat创建Web应用

 

在浏览器地址栏中输入地址http://localhost:8080/AddressBook测试AddressBook程序。应该得到如图5的显示结果。如果应用程序没有正确运行,先检查Tomcat的common/lib目录下有没有数据库的JDBC驱动程序。如果数据库驱动正确应用程序仍然不正确运行,则检查Tomcat的log目录下的日志文件,这些文本格式的日志文件将帮助你发现错误。
使用Ant和Tomcat创建Web应用

添加地址,然后修改它,再删除它,再添加一个地址。你将看到id持续自动增加。

开发过程

  AddressBook安装成功之后,Tomcat调用AddressBook.ConextListener.contextInitialized创建AddressBook.AddressesDB的一个实例。AddressBook.AddressesDB通过jdbc/Public DataSource建立数据库连接。AddressBook.ConextListener.contextInitialized将AddressBook.AddressesDB的实例作为一个servlet属性(addressesDB)保存。

  当AddressBook的Home.jsp第一次被调用,Tomcat编译并执行它。Home.jsp通过servlet属性addressesDB取得AddressBook.AddressesDB的实例,然后从数据库中读取地址并显示。其他JSP页面在第一次被使用时也要先编译再执行,读取数据库的方法同Home.jsp。

  ant stop用于停止AddressBook程序。Tomcat自动调用AddressBook.ContextListener.contextDestroyed取得上面提到的servlet属性addressesDB和AddressBook.AddressesDB的实例,关闭数据库连接并删除servlet属性addressesDB。

  ant start用于启动AddressBook程序。Tomcat自动调用AddressBook.ConextListener.contextInitialized重复启动过程。

  整个Web应用程序的开发过程是这样的:修改程序;用ant install创建并安装;在浏览器中键入地址http://localhost:8080/applicationName(或点击刷新按钮)以测试Web程序;用ant remove删除Web应用程序的上下文信息;重复整个过程,直到调试完毕。当程序调试完毕后,使用ant deploy正式将你的程序配置到服务器上。在重起Tomcat或者重起服务器后,你的应用程序就开始运行了。要将Web应用程序从你的服务器彻底删除用ant undeploy命令。

Tomcat Manager

  使用Tomcat Manager可以替代Ant。在浏览器中键入地址http://localhost:8080/manager/html/list,将出现如图6所示的Tomcat Manager Web页面。
使用Ant和Tomcat创建Web应用

或者,直接使用以下地址:

http://localhost:8080/manager/list

http://localhost:8080/manager/resources

http://localhost:8080/manager/roles

http://localhost:8080/manager/start?path=/AddressBook

http://localhost:8080/manager/stop?path=/AddressBook

http://localhost:8080/manager/remove?path=/AddressBook

http://localhost:8080/manager/sessions?path=/AddressBook

Tomcat Administrator

  要登陆Tomcat的基于Web的administrator,使用地址http://localhost:8080/admin。在登陆画面中输入Tomcat”admin”角色的用户名和密码,与”manager” 角色的相同为tomcatusername和tomcatpassword。Tomcat-users.xml文件为admin,manager以及provider角色建立了相同的账号。为每个Tomcat角色建立不同的账号是不必要的。

  控制页面分为三个面板:头面板,树面板和数据面板。如图7所示:
使用Ant和Tomcat创建Web应用

 

树的分支可被展开和选定。依次展开Service{Tomcat-Standalone} ->Host{localhost}->Context{/AddressBook},最后AddressBook的Resource分支。注意不要将树底部的全局Resource分支与AddressBook的Resource分支混淆。全局Resource分支可以用来定义任何Web应用程序都可用的全局资源。

AddressBook的上下文面板

  选择Context{/AddressBook}分支,将看到AddressBook的上下文面板(如图8)。
使用Ant和Tomcat创建Web应用

 

你可以随意改变该面板的参数,主要是三种不同的Debug Level参数。要保存设置点击Save按钮然后点击头面板中的Commit Changes按钮。

AddressBook的Data Source面板

  选择Context{/AddressBook}的Resource分支中的Data Source分支,你将看到AddressBook的Data Source面板。选择数据源jdbc/Public显示javax.sql.DataSource(如图9)。


使用Ant和Tomcat创建Web应用


你可以随意改变该面板的参数,包括Data Source URL, JDBC Driver Class, User Name, Password, Max. Active Connections, Max. Idle Connections和 Max. Wait for Connection参数。要保存设置点击Save按钮然后点击头面板中的Commit Changes按钮。

如果你在你的个人电脑上运行Web应用程序,这也许不重要,但是如果在作为公司产品的Web服务器,这就很重要。这些参数可以被安全的改变,而且不是只有程序员能够更改,Tomcat administrator同样可以。作为一个程序员我要记住许多账号和密码,我不想知道公司的产品数据库的账号和密码。本来这个账号和密码是必要的,但是有了javax.sql.DataSource和Tomcat 4的administrator服务,我就不必知道它们了。

Ant用于在开发软件时建立Web应用程序上下文,而Tomcat administrator服务用在产品环境中。

AddressBook的日志面板

选择树中的Context{/AddressBook}分支的Logger for Context{/AddressBook}分支,将看到如图10所示的AddressBook的日志面板
使用Ant和Tomcat创建Web应用

 

你可以随意改变该面板的参数,主要是Debug Level和Verbosity Level参数。要保存设置点击Save按钮然后点击头面板中的Commit Changes按钮。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何自动切换特定应用程序的iPhone方向锁定如何自动切换特定应用程序的iPhone方向锁定Jun 06, 2023 am 08:22 AM

在iOS中,当您将iPhone从纵向旋转到横向时,许多App会显示不同的视图。根据应用程序及其使用方式,这种行为并不总是可取的,这就是Apple在“控制中心”中包含方向锁定选项的原因。但是,某些应用程序在禁用方向锁定的情况下工作得更有用-想想YouTube或照片应用程序,将设备旋转到横向可以提供更好的全屏观看体验。如果您倾向于保持锁定状态,则必须在每次打开这些类型的应用程序时在“控制中心”中禁用它以获得全屏体验。然后,当您关闭应用程序时,您必须记住重新打开方向锁定,这并不理想。幸运的是,您可以创

在虚拟 Windows 11 桌面上应用自定义壁纸的简单技巧在虚拟 Windows 11 桌面上应用自定义壁纸的简单技巧May 02, 2023 pm 02:01 PM

如果您每天都使用虚拟桌面,那么我们有好消息要告诉您!在Windows10InsiderBuilds上进行多次测试后,在虚拟桌面上应用自定义壁纸的功能现在已成为Windows11的一部分。虽然现在,在Windows10上,您可以打开多个桌面,但不可能在每个桌面上使用不同的壁纸。随着下周第一个Windows11InsiderBuild版本的发布,您将能够轻松地做到这一点。通常,虚拟桌面用于特定的应用程序和操作,并且大部分时间用于保持事物井井有条。但是,如果您还想使用自定义壁纸个性化

Go语言中的RPC框架原理与应用Go语言中的RPC框架原理与应用Jun 01, 2023 pm 03:01 PM

一、RPC框架的概念在分布式系统中,常常需要在不同的服务端和客户端之间传递数据,RPC(RemoteProcedureCall)框架是一种常用的技术手段。RPC框架允许应用程序通过远程消息传递调用另一个执行环境的函数或方法,从而使程序能够在不同的计算机上运行。目前市面上有很多RPC框架,如Google的gRPC、Thrift、Hessian等,本文主要介

基于对抗梯度的探索模型及其在点击预估中的应用基于对抗梯度的探索模型及其在点击预估中的应用Apr 13, 2023 pm 11:34 PM

1. 摘要排序模型在广告、推荐和搜索系统中起到了至关重要的作用。在排序模块中,点击率预估技术又是重中之重。目前工业界的点击率预估技术大多采用深度学习算法,基于数据驱动来训练深度神经网络,然而数据驱动带来的相应问题是推荐系统中的新进项目会存在冷启动问题。探索与利用(Exploration-Exploitation,E&E)方法通常用于处理大规模在线推荐系统中的数据循环问题。过去的研究通常认为模型预估不确定度高意味着潜在收益也较高,因此大部分研究文献聚焦到对不确定度的估计上。对于采用

AI人必看!外媒总结最佳AI应用,你用过几个?AI人必看!外媒总结最佳AI应用,你用过几个?May 27, 2023 pm 07:42 PM

人工智能是一种有前途的技术,在许多领域都变得不可或缺。它集成到一系列应用程序和软件中,以显著提高生产力。对于许多专家来说,最能掌握人工智能工作方式的公司和人员无疑将成为明天世界的领导者。然后,重要的是要识别这些工具并控制它们的工作方式。目前,人工智能市场已经拥有许多技术,这些技术具有非常有趣且特殊的特征。对此,国外媒体评选出了2023年25个最好的人工智能产品或应用。1.ChatGPTChatGPT聊天由美国人工智能公司OPENAI开发,现在被视为人工智能革命的引擎。它确实是一个强大的工具,能够

她用10年日记训练GPT-3,对话童年的自己,网友:AI最治愈的应用她用10年日记训练GPT-3,对话童年的自己,网友:AI最治愈的应用Apr 12, 2023 pm 04:25 PM

“这是我目前听过关于AI最好、最治愈的一个应用。”到底是什么应用,能让网友给出如此高度的评价?原来,一个脑洞大开的网友Michelle,用GPT-3造了一个栩栩如生的“童年Michelle”。然后她和童年的自己聊起了天,对方甚至还写来一封信。“童年Michelle”的“学习资料”也很有意思——是Michelle本人的日记,而且是连续十几年,几乎每天都写的那种。日记内容中有她的快乐和梦想,也有恐惧和抱怨;还有很多小秘密,包括和Crush聊天时紧张到眩晕…(不爱写日记的我真的给跪了……)厚厚一叠日记

浅析:ChatGPT应用的底层原理浅析:ChatGPT应用的底层原理Apr 13, 2023 am 08:37 AM

ChatGPT 无疑是最近网络中最靓的仔,小汪哥通过这段时间的使用,加上对一些资料的查阅,了解了一些背后的原理,试图讲解一下ChatGPT应用的底层原理。如果有不正确的地方,欢迎指正。阅读本文可能为会你解答以下问题:为什么有的ChatGPT 收费,有的不收费?为什么ChatGPT是一个字一个字地回答的?为什么中文问题的答案有时候让人啼笑皆非?为什么你问它今天是几号,它的回答是过去的某个时间?为什么有的问题会拒绝回答?“ChatGPT 国内版” 运行原理随着ChatGPT的爆火,出现了很多国内版,

Java语言中的数据分析应用介绍Java语言中的数据分析应用介绍Jun 10, 2023 pm 08:51 PM

Java语言是当前应用最广泛的程序设计语言之一,它的优越性能和多样化的开发环境,让它成为许多大企业以及中小企业的首选编程语言。在数据分析领域中,Java语言也有着广泛的应用,本文将介绍Java语言中的数据分析应用。一、Java语言的数据分析优势Java语言具有很强的数据处理能力,它支持多线程,能够处理大规模数据集,而且拥有分布式计算能力。这使Java语言具备

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境