社区
Web 开发
帖子详情
jsp 中提取oracle记录的问题
gqlao
2003-09-15 01:35:49
我在sql*plus里输入select * from "SHENY"."MagaTbl";(SHENY是建MagaTbl时所用的用户)可以显示MagaTbl表的记录,但是在jsp里打:
rs = stmt.executeQuery("select * from \"SHENY\".\"MagaTbl\"");
却告诉我表名错误,这是为什么啊?
...全文
20
9
打赏
收藏
jsp 中提取oracle记录的问题
我在sql*plus里输入select * from "SHENY"."MagaTbl";(SHENY是建MagaTbl时所用的用户)可以显示MagaTbl表的记录,但是在jsp里打: rs = stmt.executeQuery("select * from \"SHENY\".\"MagaTbl\""); 却告诉我表名错误,这是为什么啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gqlao
2003-09-15
打赏
举报
回复
另外,我用sheny这个用户登入sql*plus,然后用select * from "SHENY"."MagaTbl";是可以列出记录的。
gqlao
2003-09-15
打赏
举报
回复
我到oracle enterprise manager console 里看了一下magatbl这个表,它的表空间是users,方案是sheny,我又试了试select * from users.magatbl还是不行。
gqlao
2003-09-15
打赏
举报
回复
我用select * from SHENY.MagaTbl试过,也是告诉我表或视图不存在。打"SHENY"."MagaTbl"是因为这在sql*plus里能显示记录。
本来我在sql*plus里也是打select * from MagaTbl,但什么也出不来,后来是用orcale里的图形界面编辑工具表编辑器打开magatbl表,看到它所用的sql语句是写select * from "SHENY"."MagaTbl"的,所能就照抄它的用法了。
SHENY是建MagaTbl的用户。
kaibinsj
2003-09-15
打赏
举报
回复
前面那个应该是表空间名,不过好像不要加引号的,另外保证你当前访问用户有改权限可以访问那个表空间!
killerdanny
2003-09-15
打赏
举报
回复
同意楼上!为什么要加“SHENY”
select * from MagaTbl
blue999star
2003-09-15
打赏
举报
回复
Class.forName(sDBDriver);
conn = DriverManager.getConnection(sConnStr,"SHENY","sy");
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from SHENY.MagaTbl");//*******
为什么要 stmt.executeQuery("select * from \"SHENY\".\"MagaTbl\"");
gqlao
2003-09-15
打赏
举报
回复
还是不行,我连接数据库的代码是这样的:
Class.forName(sDBDriver);
conn = DriverManager.getConnection(sConnStr,"SHENY","sy");
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from \"SHENY\".\"MagaTbl\"");
这样算login to SHENY database directly吗?
dmhorse
2003-09-15
打赏
举报
回复
U should better to login to SHENY database directly.
rs = stmt.executeQuery("select * from MagaTbl");
dmhorse
2003-09-15
打赏
举报
回复
rs = stmt.executeQuery("select * from SHENY.MagaTbl");
haivDb4J2ee1.3
开发工具HaivDb4J2ee,全称Haiv Database Tool for J2EE,现在已经开发到1.3版本,被多家软件公司使用。它是基于java编写的j2ee代码自动生成工具暨数据库管理工具,运行于jdk1.5环境
中
,目前版本支持
Oracle
、mysql、mssql三种常用的数据库,以后会视情况扩充至其它种类的关系型数据库。它的功能类似于MyEclipse的自动生成hibernate代码,但比MyEclipse自带的代码生成插件强大N倍。 本工具主要提供了以下功能: 1、能通过表名、列名、列类型、表和列的注释等信息,自动生成PO类、Hibernate、VO类、struts+spring+hibernate的配置文件、
Jsp
文件、使用说明等文档,以实现对单表的增、删、改、查的操作。生成的代码非常规范,注释来源于表和列的注释,非常详尽。 2、能分析任一SELECT查询语句,
提取
查询结果的
记录
集字段名称、类型,生成查询的j2ee代码,以包括上述文件。 3、工具提供了一套完整的J2EE模板,您也可以对此模板做修改和配置,灵活运用。 4、这个工具同时又是一个简洁易用的数据库客户端工具,它提倡开发人员将每个表和列都加上注释,实现表及注释的平面化管理,是数据库管理员和项目开发、管理人员的最佳选择。 对于一个新的J2EE工程,本工具的使用步骤: 一、由架构师设计本工程的底层架构。 二、配置HaivDb4J2ee所需的工程模板,主要有增删改模板和查询模板。本步骤可以自行配置,也可联系作者进行配置。 三、数据库设计人员设计数据库结构,建议对所有表和列增加注释(对注释的利用是本工具的亮点之一,使用本工具可以方便的增加注释)。 四、使用本工具生成代码,程序员复制的是文件,或是整个java包,而不是一行行的代码,然后做调试和完善,即可发布。 使用本工具之后,您将不再关心以下
问题
: 1、列和PO类变量的对应关系:工具根据您的列名、列类型,自动生成Java变量名、变量类型,生成的变量名包您满意,并且绝对符合JavaBean的命名规范。 2、文件名的命名规范:文件名采用统一的标识加后缀(如PubPersonAction.java、PubPersonView.java、PubPersonFrom.java、PubPersonLogic.java、PubPerson.java、AbstractPubPerson.java、PubPersonAdd.
jsp
、PubPersonSearch.
jsp
等)。 3、不同层的类间代码的复制、粘贴
问题
:不同层的类使用相同的变量名,不需手动复制。 4、代码分层
问题
:本工具将根据您的模板配置,自动实现MVC分层。 5、日期型、数值型变量与
Jsp
页面交互时需手动转换类型的
问题
:自动在Form里生成了对应的String变量,用来和
Jsp
交互。 6、代码可读性
问题
:代码生成非常规范,注释一应俱全,甚至包括生成时间、开发人员签名等(注:注释主要来源于数据库表、列的注释,也可手动修改)。 QQ 155040311 Emain englishking@qq.com 电话:13598080810
风越ASP代码生成器FireAspCreatorv2.9.rar
《风越代码生成器 [FireCode Creator]》是一款采用.Net FrameWork2.0框架,基于多种数据库的程序代码生成软件,可快速建立数据信息的:添加、编辑、查看、列表、搜索页面。通过界面模板与代码模板管理功能,可自定义生成程序的界面风格与输出代码,将最大限度提高ASPX/ASP/PHP/
JSP
等各种程序的编写效率。 01、支持生成的ASPX/ASP/PHP/
JSP
等页面在本机自动发布、调试(需安装IIS或对应WEB服务器) 02、支持Microsoft SQL Server、Microsoft Access、
Oracle
、MySql、Excel、FoxPro、FoxBase、Text等数据库连接 03、支持从数据表、视图(Access为查询)
中
读取数据字段 04、支持通过数据表
中
的组合主键传递参数 05、支持CSS统一设置页面风格 06、支持多种控件输入方式: 文本框 文本域 UBB文本框(支持UBB文本输入) 密码框 隐藏域 日期选择 单选框 复选框 下拉框 多选列表 单选列表 批量上载 上载文件 上载到库 07、支持多种信息显示方式: 显示文字 链接文件 文本框 文本域 显示图片 背景声音 视频播放 显示flash 08、支持检测提交字符的最小、最大输入长度、是否空值/唯一值、文本类型:★ 不检测 非特殊字符 仅单词字符 仅单词字符空格 仅26个字母 仅
中
文字符 仅允许整数 仅允许小数 仅日期/时间 仅日期+时间 仅日期 仅时间 仅允许邮箱 仅允许网址 仅允许IP 仅身份证号 仅国内电话 仅国内手机 09、支持对用户输入内容进行服务器端与客户端JS双重验证,有效防止SQL注入 ★ 10、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县/公司、部门、小组等形式下拉框 ★ 11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除
记录
时同步删除文件 13、支持控件名加密,使输入控件的名称与字段名不同,防止他人从客户端HTML
中
猜解 ★ 14、支持列表、搜索页面对数据
记录
进行实时排序、修改、批量删除等功能 15、支持表头/单独表格搜索两种布局方式 16、提供多种灵活翻页方案,用户可设置每页
记录
条数、上/下页、前/后N页、输入数字跳转到指定页面等,提高海量数据翻页速度 17、提供丰富的建站常用VB、JS函数库 ★ 18、更多扩展功能: 添加、修改页面在保存信息前进行预览功能 添加、修改页面提交后自动跳转并刷新列表页 字段描述批量格式化,可从字段名、描述生成,加强英文字符处理 列表、搜索页面隔行颜色、点击变色设置 根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表
中
直接批量编辑字段值,便于管理员维护 列表、搜索文件自动读取链接数据表值的实际信息 发送邮件功能,设置字段为邮件对应信息,可发送附件 ★ (繁、简、英)单语言版本 ★ 多语言页面实时翻译功能(默认:繁、简、英,可增加其它语言) ★ 多语言编码支持(GB2312/UTF8) ★ 生成提交校验码图片 ★ 搜索、列表文件以详细列表页(留言板风格)显示 生成权限,限制用户对指定页面的添加、删除、编辑权 将查询结果导出为CSV、HTML、EXCEL文件 ★ 生成不同选择字段的SQL语句 生成数据库字典 ★ 模板代码生成器,可自定义模板、变量生成代码 ★ 19、提供建站常用辅助工具: 屏幕尺 剪切板,保存最近指定次数的历史
记录
常用加解密、编解码(DES、MD5、SHA、BASE64) 批量
提取
文本,支持正则表达式,可将HTML等文件
中
指定内容存入数据库 批量查找替换,支持正则表达式 批量文件、文件夹改名,支持正则表达式 正则表达式测试器(可设置、保存常用正则表达式) 获取键盘的按键值 网页隐藏资源下载,可下载无法直接得到URL的SWF、图片、音乐等资源 获取汉字的拼音、五笔编码、笔画数、笔顺名、部首等信息,并可进行汉字繁/简体,GB/BIG转换 代码编排器,CSS排版、JS、ASP、HTML注释清理
ssh(structs,spring,hibernate)框架
中
的上传下载
Struts+Spring+Hibernate实现上传下载 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本: •Struts 1.2 •Spring 1.2.5 •Hibernate 3.0 本文选用的数据库为
Oracle
9i,当然你可以在不改动代码的情况下,通过配置文件的调整将其移植到任何具有Blob字段类型的数据库上,如MySQL,SQLServer等。 总体实现 上传文件保存到T_FILE表
中
,T_FILE表结构如下: 图 1 T_FILE表结构 其
中
: •FILE_ID:文件ID,32个字符,用Hibernate的uuid.hex算法生成。 •FILE_NAME:文件名。 •FILE_CONTENT:文件内容,对应
Oracle
的Blob类型。 •REMARK:文件备注。 文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring
中
采用
Oracle
LobHandler来处理Lob字段(包括Clob和Blob),由于在程序
中
不需要引用到
oracle
数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的差别,从而撤除程序在多数据库移植上的樊篱。 1.首先数据表
中
的Blob字段在Java领域对象
中
声明为byte[]类型,而非java.sql.Blob类型。 2.数据表Blob字段在Hibernate持久化映射文件
中
的type为org.springframework.orm.hibernate3.support.BlobByteArrayType,即Spring所提供的用户自定义的类型,而非java.sql.Blob。 3在Spring
中
使用org.springframework.jdbc.support.lob.
Oracle
LobHandler处理
Oracle
数据库的Blob类型字段。 通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。 以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单
中
file类型的组件映射为ActionForm
中
类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。 工程的类按SSH的层次结构划分为数据持久层、业务层和Web层;WEB-INF下的applicationContext.xml为Spring的配置文件,struts-config.xml为Struts的配置文件,file-upload.
jsp
为文件上传页面,file-list.
jsp
为文件列表页面。 本文后面的章节将从数据持久层->业务层->Web层的开发顺序,逐层讲解文件上传下载的开发过程。 数据持久层 1、领域对象及映射文件 您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate Syhchronizer等工具或手工的方式,编写Hibernate的领域对象和映射文件。其
中
对应T_FILE表的领域对象Tfile.java为: 代码 1 领域对象Tfile 1. package sshfile.model; 2. public class Tfile 3.{ 4. private String fileId; 5. private String fileName; 6. private byte[] fileContent; 7. private String remark; 8. …//getter and setter 9. } 特别需要注意的是:数据库表为Blob类型的字段在Tfile
中
的fileContent类型为byte[]。Tfile的Hibernate映射文件Tfile.hbm.xml放在Tfile .java类文件的相同目录下: 代码 2 领域对象映射文件 1. <?xml version="1.0"?> 2. <!DOCTYPE hibernate-mapping PUBLIC 3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 5. <hibernate-mapping> 6. <class name="sshfile.model.Tfile" table="T_FILE"> 7. <id name="fileId" type="java.lang.String" column="FILE_ID"> 8. <generator class="uuid.hex"/> 9. </id> 10. <property name="fileContent" 11. type="org.springframework.orm.hibernate3.support.BlobByteArrayType" 12. column="FILE_CONTENT" lazy="true"/> 13. …//其它一般字段的映射 14. </class> 15. </hibernate-mapping> fileContent字段映射为Spring所提供的BlobByteArrayType类型,BlobByteArrayType是用户自定义的数据类型,它实现了Hibernate 的org.hibernate.usertype.UserType接口。BlobByteArrayType使用从sessionFactory获取的Lob操作句柄lobHandler将byte[]的数据保存到Blob数据库字段
中
。这样,我们就再没有必要通过硬编码的方式,先insert然后再update来完成Blob类型数据的持久化,这个原来难伺候的老爷终于被平民化了。关于lobHandler的配置请见本文后面的内容。 此外lazy="true"说明地返回整个Tfile对象时,并不返回fileContent这个字段的数据,只有在显式调用tfile.getFileContent()方法时才真正从数据库
中
获取fileContent的数据。这是Hibernate3引入的新特性,对于包含重量级大数据的表字段,这种抽取方式提高了对大字段操作的灵活性,否则加载Tfile对象的结果集时如果总是返回fileContent,这种批量的数据抽取将可以引起数据库的"洪泛效应"。 2、DAO编写和配置 Spring强调面向接口编程,所以我们将所有对Tfile的数据操作的方法定义在TfileDAO接口
中
,这些接口方法分别是: •findByFildId(String fileId) •save(Tfile tfile) •List findAll() TfileDAOHibernate提供了对TfileDAO接口基于Hibernate的实现,如代码 3所示: 代码 3 基于Hibernate 的fileDAO实现类 1. package sshfile.dao; 2. 3. import sshfile.model.*; 4. import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 5. import java.util.List; 6. 7. public class TfileDAOHibernate 8. extends HibernateDaoSupport implements TfileDAO 9. { 10. public Tfile findByFildId(String fileId) 11. { 12. return (Tfile) getHibernateTemplate().get(Tfile.class, fileId); 13. } 14. public void save(Tfile tfile) 15. { 16. getHibernateTemplate().save(tfile); 17. getHibernateTemplate().flush(); 18. } 19. public List findAll() 20. { 21. return getHibernateTemplate().loadAll(Tfile.class); 22. } 23. } TfileDAOHibernate通过扩展Spring提供的Hibernate支持类HibernateDaoSupport而建立,HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute(HibernateCallback action),load(Class entityClass, Serializable id),save(final Object entity)等等。 所以我们的DAO只需要简单地调用父类的HibernateTemplate就可以完成几乎所有的数据库操作了。 由于Spring通过代理Hibernate完成数据层的操作,所以原Hibernate的配置文件hibernate.cfg.xml的信息也转移到Spring的配置文件
中
: 代码 4 Spring
中
有关Hibernate的配置信息 1. <beans> 2. <!-- 数据源的配置 //--> 3. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 4. destroy-method="close"> 5. <property name="driverClassName" value="
oracle
.jdbc.driver.
Oracle
Driver"/> 6. <property name="url" value="jdbc:
oracle
:thin:@localhost:1521:ora9i"/> 7. <property name="username" value="test"/> 8. <property name="password" value="test"/> 9. </bean> 10. <!-- Hibernate会话工厂配置 //--> 11. <bean id="sessionFactory" 12. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 13. <property name="dataSource" ref="dataSource"/> 14. <property name="mappingDirectoryLocations"> 15. <list> 16. <value>classpath:/sshfile/model</value> 17. </list> 18. </property> 19. <property name="hibernateProperties"> 20. <props> 21. <prop key="hibernate.dialect">org.hibernate.dialect.
Oracle
Dialect</prop> 22. <prop key="hibernate.cglib.use_reflection_optimizer">true</prop> 23. </props> 24. </property> 25. </bean> 26. <!-- Hibernate 模板//--> 27. <bean id="hibernateTemplate" 28. class="org.springframework.orm.hibernate3.HibernateTemplate"> 29. <property name="sessionFactory" ref="sessionFactory"/> 30. </bean> 31. <!--DAO配置 //--> 32. <bean id="tfileDAO" class="sshfile.dao.TfileDAOHibernate"> 33. <property name="hibernateTemplate" ref="hibernateTemplate" /> 34. </bean> 35. … 36. </beans> 第3~9行定义了一个数据源,其实现类是apache的BasicDataSource,第11~25行定义了Hibernate的会话工厂,会话工厂类用Spring提供的LocalSessionFactoryBean维护,它注入了数据源和资源映射文件,此外还通过一些键值对设置了Hibernate所需的属性。 其
中
第16行通过类路径的映射方式,将sshfile.model类包目录下的所有领域对象的映射文件装载进来,在本文的例子里,它将装载进Tfile.hbm.xml映射文件。如果有多个映射文件需要声明,使用类路径映射方式显然比直接单独指定映射文件名的方式要简便。 第27~30行定义了Spring代理Hibernate数据操作的HibernateTemplate模板,而第32~34行将该模板注入到tfileDAO
中
。 需要指定的是Spring 1.2.5提供了两套Hibernate的支持包,其
中
Hibernate 2相关的封装类位于org.springframework.orm.hibernate2.*包
中
,而Hibernate 3.0的封装类位于org.springframework.orm.hibernate3.*包
中
,需要根据您所选用Hibernate版本进行正确选择。 3、Lob字段处理的配置 我们前面已经指出
Oracle
的Lob字段和一般类型的字段在操作上有一个明显的区别--那就是你必须首先通过
Oracle
的empty_blob()/empty_clob()初始化Lob字段,然后获取该字段的引用,通过这个引用更改其值。所以要完成对Lob字段的操作,Hibernate必须执行两步数据库访问操作,先Insert再Update。 使用BlobByteArrayType字段类型后,为什么我们就可以象一般的字段类型一样操作Blob字段呢?可以确定的一点是:BlobByteArrayType不可能逾越Blob天生的操作方式,原来是BlobByteArrayType数据类型本身具体数据访问的功能,它通过LobHandler将两次数据访问的动作隐藏起来,使Blob字段的操作在表现上和其他一般字段业类型无异,所以LobHandler即是那个"苦了我一个,幸福十亿人"的那位幕后英雄。 LobHandler必须注入到Hibernate会话工厂sessionFactory
中
,因为sessionFactory负责产生与数据库交互的Session。LobHandler的配置如代码 5所示: 代码 5 Lob字段的处理句柄配置 1. <beans> 2. … 3. <bean id="nativeJdbcExtractor" 4. class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" 5. lazy-init="true"/> 6. <bean id="lobHandler" 7. class="org.springframework.jdbc.support.lob.
Oracle
LobHandler" lazy-init="true"> 8. <property name="nativeJdbcExtractor"> 9. <ref local="nativeJdbcExtractor"/> 10. </property> 11. </bean> 12. … 13. </beans> 首先,必须定义一个能够从连接池
中
抽取出本地数据库JDBC对象(如
Oracle
Connection,
Oracle
ResultSet等)的抽取器:nativeJdbcExtractor,这样才可以执行一些特定数据库的操作。对于那些仅封装了Connection而未包括Statement的简单数据连接池,SimpleNativeJdbcExtractor是效率最高的抽取器实现类,但具体到apache的BasicDataSource连接池,它封装了所有JDBC的对象,这时就需要使用CommonsDbcpNativeJdbcExtractor了。Spring针对几个著名的Web服务器的数据源提供了相应的JDBC抽取器: •WebLogic:WebLogicNativeJdbcExtractor •WebSphere:WebSphereNativeJdbcExtractor •JBoss:JBossNativeJdbcExtractor 在定义了JDBC抽取器后,再定义lobHandler。Spring 1.2.5提供了两个lobHandler: •DefaultLobHandler:适用于大部分的数据库,如SqlServer,MySQL,对
Oracle
10g也适用,但不适用于
Oracle
9i(看来
Oracle
9i确实是个怪胎,谁叫
Oracle
公司自己都说
Oracle
9i是一个过渡性的产品呢)。 •
Oracle
LobHandler:适用于
Oracle
9i和
Oracle
10g。 由于我们的数据库是
Oracle
9i,所以使用
Oracle
LobHandler。 在配置完LobHandler后, 还需要将其注入到sessionFactory的Bean
中
,下面是调用后的sessionFactory Bean的配置: 代码 6 将lobHandler注入到sessionFactory
中
的配置 1. <beans> 2. … 3. <bean id="sessionFactory" 4. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 5. <property name="dataSource" ref="dataSource"/> 6. <!-- 为处理Blob类型字段的句柄声明 //--> 7. <property name="lobHandler" ref="lobHandler"/> 8. … 9. </bean> 10. … 11. </beans> 如第7所示,通过sessionFactory的lobHandler属性进行注入。 业务层 1、业务层接口 "面向接口而非面向类编程"是Spring不遗余力所推荐的编程原则,这条原则也已经为大部开发者所接受;此外,JDK的动态代理只对接口有效,否则必须使用CGLIB生成目标类的子类。我们依从于Spring的倡导为业务类定义一个接口: 代码 7 业务层操作接口 1. public interface FileService 2. { 3. void save(FileActionForm fileForm);//将提交的上传文件保存到数据表
中
4. List getAllFile();//得到T_FILE所示
记录
5. void write(OutputStream os,String fileId);//将某个文件的文件数据写出到输出流
中
6. String getFileName(String fileId);//获取文件名 7. } 其
中
save(FileActionForm fileForm)方法,将封装在fileForm
中
的上传文件保存到数据库
中
,这里我们使用FileActionForm作为方法入参,FileActionForm是Web层的表单数据对象,它封装了提交表单的数据。将FileActionForm直接作为业务层的接口入参,相当于将Web层传播到业务层
中
去,即将业务层绑定在特定的Web层实现技术
中
,按照分层模型学院派的观点,这是一种反模块化的设计,但在"一般"的业务系统并无需提供多种UI界面,系统Web层将来切换到另一种实现技术的可能性也微乎其微,所以笔者觉得没有必要为了这个业务层完全独立于调用层的过高目标而去搞一个额外的隔离层,浪费了原材料不说,还将系统搞得过于复杂,相比于其它原则,"简单"始终是最大的一条原则。 getAllFile()负责获取T_FILE表所有
记录
,以便在网页上显示出来。 而getFileName(String fileId)和write(OutputStream os,String fileId)则用于下载某个特定的文件。具体的调用是将Web层将response.getOutputStream()传给write(OutputStream os,String fileId)接口,业务层直接将文件数据输出到这个响应流
中
。具体实现请参见错误!未找到引用源。节下载文件部分。 2、业务层接口实现类 FileService的实现类为FileServiceImpl,其
中
save(FileActionForm fileForm)的实现如下所示: 代码 8 业务接口实现类之save() 1. … 2. public class FileServiceImpl 3. implements FileService 4. { 5. private TfileDAO tfileDAO; 6. public void save(FileActionForm fileForm) 7. { 8. Tfile tfile = new Tfile(); 9. try 10. { 11. tfile.setFileContent(fileForm.getFileContent().getFileData()); 12. } 13. catch (FileNotFoundException ex) 14. { 15. throw new RuntimeException(ex); 16. } 17. catch (IOException ex) 18. { 19. throw new RuntimeException(ex); 20. } 21. tfile.setFileName(fileForm.getFileContent().getFileName()); 22. tfile.setRemark(fileForm.getRemark()); 23. tfileDAO.save(tfile); 24. } 25. … 26. } 在save(FileActionForm fileForm)方法里,完成两个步骤: 其一,象在水桶间倒水一样,将FileActionForm对象
中
的数据倒入到Tfile对象
中
; 其二,调用TfileDAO保存数据。 需要特别注意的是代码的第11行,FileActionForm的fileContent属性为org.apache.struts.upload.FormFile类型,FormFile提供了一个方便的方法getFileData(),即可获取文件的二进制数据。通过解读FormFile接口实现类DiskFile的原码,我们可能知道FormFile本身并不缓存文件的数据,只有实际调用getFileData()时,才从磁盘文件输入流
中
获取数据。由于FormFile使用流读取方式获取数据,本身没有缓存文件的所有数据,所以对于上传超大体积的文件,也是没有
问题
的;但是,由于数据持久层的Tfile使用byte[]来缓存文件的数据,所以并不适合处理超大体积的文件(如100M),对于超大体积的文件,依然需要使用java.sql.Blob类型以常规流操作的方式来处理。 此外,通过FileForm的getFileName()方法就可以获得上传文件的文件名,如第21行代码所示。 write(OutputStream os,String fileId)方法的实现,如代码 9所示: 代码 9 业务接口实现类之write() 1. … 2. public class FileServiceImpl 3. implements FileService 4. { 5. 6. public void write(OutputStream os, String fileId) 7. { 8. Tfile tfile = tfileDAO.findByFildId(fileId); 9. try 10. { 11. os.write(tfile.getFileContent()); 12. os.flush(); 13. } 14. catch (IOException ex) 15. { 16. throw new RuntimeException(ex); 17. } 18. } 19. … 20. } write(OutputStream os,String fileId)也简单地分为两个操作步骤,首先,根据fileId加载表
记录
,然后将fileContent写入到输出流
中
。 3、Spring事务配置 下面,我们来看如何在Spring配置文件
中
为FileService配置声明性的事务 1. <beans> 2. … 3. <bean id="transactionManager" 4. class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 5. <property name="sessionFactory" ref="sessionFactory"/> 6. </bean> 7. <!-- 事务处理的AOP配置 //--> 8. <bean id="txProxyTemplate" abstract="true" 9. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 10. <property name="transactionManager" ref="transactionManager"/> 11. <property name="transactionAttributes"> 12. <props> 13. <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> 14. <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> 15. <prop key="save">PROPAGATION_REQUIRED</prop> 16. <prop key="write">PROPAGATION_REQUIRED,readOnly</prop> 17. </props> 18. </property> 19. </bean> 20. <bean id="fileService" parent="txProxyTemplate"> 21. <property name="target"> 22. <bean class="sshfile.service.FileServiceImpl"> 23. <property name="tfileDAO" ref="tfileDAO"/> 24. </bean> 25. </property> 26. </bean> 27. </beans> Spring的事务配置包括两个部分: 其一,定义事务管理器transactionManager,使用HibernateTransactionManager实现事务管理; 其二,对各个业务接口进行定义,其实txProxyTemplate和fileService是父子节点的关系,本来可以将txProxyTemplate定义的内容合并到fileService
中
一起定义,由于我们的系统仅有一个业务接口需要定义,所以将其定义的一部分抽象到父节点txProxyTemplate
中
意义确实不大,但是对于真实的系统,往往拥有为数众多的业务接口需要定义,将这些业务接口定义内容的共同部分抽取到一个父节点
中
,然后在子节点
中
通过parent进行关联,就可以大大简化业务接口的配置了。 父节点txProxyTemplate注入了事务管理器,此外还定义了业务接口事务管理的方法(允许通过通配符的方式进行匹配声明,如前两个接口方法),有些接口方法仅对数据进行读操作,而另一些接口方法需要涉及到数据的更改。对于前者,可以通过readOnly标识出来,这样有利于操作性能的提高,需要注意的是由于父类节点定义的Bean仅是子节点配置信息的抽象,并不能具体实现化一个Bean对象,所以需要特别标注为abstract="true",如第8行所示。 fileService作为一个目标类被注入到事务代理器
中
,而fileService实现类所需要的tfileDAO实例,通过引用3.2节
中
定义的tfileDAO Bean注入。 Web层实现 1、Web层的构件和交互流程 Web层包括主要3个功能: •上传文件。 •列出所有已经上传的文件列表,以供点击下载。 •下载文件。 Web层实现构件包括与2个
JSP
页面,1个ActionForm及一个Action: •file-upload.
jsp
:上传文件的页面。 •file-list.
jsp
:已经上传文件的列表页面。 •FileActionForm:file-upload.
jsp
页面表单对应的ActionForm。 •FileAction:继承org.apache.struts.actions.DispatchAction的Action,这样这个Action就可以通过一个URL参数区分
中
响应不同的请求。 Web层的这些构件的交互流程如图 6所示: 图 6 Web层Struts流程图 其
中
,在执行文件上传的请求时,FileAction在执行文件上传后,forward到loadAllFile出口
中
,loadAllFile加载数据库
中
所有已经上传的
记录
,然后forward到名为fileListPage的出口
中
,调用file-list.
jsp
页面显示已经上传的
记录
。 2、FileAction功能 Struts 1.0的Action有一个弱项:一个Action只能处理一种请求,Struts 1.1
中
引入了一个DispatchAction,允许通过URL参数指定调用Action
中
的某个方法,如http://yourwebsite/fileAction.do?method=upload即调用FileAction
中
的upload方法。通过这种方式,我们就可以将一些相关的请求集
中
到一个Action当
中
编写,而没有必要为某个请求操作编写一个Action类。但是参数名是要在struts-config.xml
中
配置的: 1. <struts-config> 2. <form-beans> 3. <form-bean name="fileActionForm" type="sshfile.web.FileActionForm" /> 4. </form-beans> 5. <action-mappings> 6. <action name="fileActionForm" parameter="method" path="/fileAction" 7. type="sshfile.web.FileAction"> 8. <forward name="fileListPage" path="/file-list.
jsp
" /> 9. <forward name="loadAllFile" path="/fileAction.do?method=listAllFile" /> 10. </action> 11. </action-mappings> 12. </struts-config> 第6行的parameter="method"指定了承载方法名的参数,第9行
中
,我们还配置了一个调用FileAction不同方法的Action出口。 FileAction共有3个请求响应的方法,它们分别是: •upload(…):处理上传文件的请求。 •listAllFile(…):处理加载数据库表
中
所有
记录
的请求。 •download(…):处理下载文件的请求。 下面我们分别对这3个请求处理方法进行讲解。 2.1 上传文件 上传文件的请求处理方法非常简单,简之言之,就是从Spring容器
中
获取业务层处理类FileService,调用其save(FileActionForm form)方法上传文件,如下所示: 1. public class FileAction 2. extends DispatchAction 3. { 4. //将上传文件保存到数据库
中
5. public ActionForward upload(ActionMapping mapping, ActionForm form, 6. HttpServletRequest request, 7. HttpServletResponse response) 8. { 9. FileActionForm fileForm = (FileActionForm) form; 10. FileService fileService = getFileService(); 11. fileService.save(fileForm); 12. return mapping.findForward("loadAllFile"); 13. } 14. //从Spring容器
中
获取FileService对象 15. private FileService getFileService() 16. { 17. ApplicationContext appContext = WebApplicationContextUtils. 18. getWebApplicationContext(this.getServlet().getServletContext()); 19. return (FileService) appContext.getBean("fileService"); 20. } 21. … 22. } 由于FileAction其它两个请求处理方法也需要从Spring容器
中
获取FileService实例,所以我们特别提供了一个getFileService()方法(第15~21行)。重构的一条原则就是:"发现代码
中
有重复的表达式,将其
提取
为一个变量;发现类
中
有重复的代码段,将其
提取
为一个方法;发现不同类
中
有相同的方法,将其
提取
为一个类"。在真实的系统
中
,往往拥有多个Action和多个Service类,这时一个比较好的设置思路是,提供一个获取所有Service实现对象的工具类,这样就可以将Spring 的Service配置信息屏蔽在一个类
中
,否则Service的配置名字散落在程序各处,维护性是很差的。 2.2 列出所有已经上传的文件 listAllFile方法调用Servie层方法加载T_FILE表
中
所有
记录
,并将其保存在Request域
中
,然后forward到列表页面
中
: 1. public class FileAction 2. extends DispatchAction 3. { 4. … 5. public ActionForward listAllFile(ActionMapping mapping, ActionForm form, 6. HttpServletRequest request, 7. HttpServletResponse response) 8. throws ModuleException 9. { 10. FileService fileService = getFileService(); 11. List fileList = fileService.getAllFile(); 12. request.setAttribute("fileList",fileList); 13. return mapping.findForward("fileListPage"); 14. } 15. } file-list.
jsp
页面使用Struts标签展示出保存在Request域
中
的
记录
: 1. <%@page contentType="text/html; charset=GBK"%> 2. <%@taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> 3. <%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> 4. <html> 5. <head> 6. <title>file-download</title> 7. </head> 8. <body bgcolor="#ffffff"> 9. <ol> 10. <logic:iterate id="item" name="fileList" scope="request"> 11. <li> 12. <a href='fileAction.do?method=download&fileId= 13. <bean:write name="item"property="fileId"/>'> 14. <bean:write name="item" property="fileName"/> 15. </a> 16. </li> 17. </logic:iterate> 18. </ol> 19. </body> 20. </html> 展现页面的每条
记录
挂接着一个链接地址,形如:fileAction.do?method=download&fileId=xxx,method参数指定了这个请求由FileAction的download方法来响应,fileId指定了
记录
的主键。 由于在FileActionForm
中
,我们定义了fileId的属性,所以在download响应方法
中
,我们将可以从FileActionForm
中
取得fileId的值。这里涉及到一个处理多个请求Action所对应的ActionForm的设计
问题
,由于原来的Action只能对应一个请求,那么原来的ActionForm非常简单,它仅需要将这个请求的参数项作为其属性就可以了,但现在一个Action对应多个请求,每个请求所对应的参数项是不一样的,此时的ActionForm的属性就必须是多请求参数项的并集了。所以,除了文件上传请求所对应的fileContent和remark属性外还包括文件下载的fileId属性: 图 7 FileActionForm 当然这样会造成属性的冗余,比如在文件上传的请求
中
,只会用到fileContent和remark属性,而在文件下载的请求时,只会使用到fileId属性。但这种冗余是会带来好处的--它使得一个Action可以处理多个请求。 2.3 下载文件 在列表页面
中
点击一个文件下载,其请求由FileAction的download方法来响应,download方法调用业务层的FileService方法,获取文件数据并写出到response的响应流
中
。通过合理设置HTTP响应头参数,将响应流在客户端表现为一个下载文件对话框,其代码如下所示: 代码 10 业务接口实现类之download 1. public class FileAction 2. extends DispatchAction 3. { 4. … 5. public ActionForward download(ActionMapping mapping, ActionForm form, 6. HttpServletRequest request, 7. HttpServletResponse response) 8. throws ModuleException 9. { 10. FileActionForm fileForm = (FileActionForm) form; 11. FileService fileService = getFileService(); 12. String fileName = fileService.getFileName(fileForm.getFileId()); 13. try 14. { 15. response.setContentType("application/x-msdownload"); 16. response.setHeader("Content-Disposition", 17. "attachment;" + " filename="+ 18. new String(fileName.getBytes(), "ISO-8859-1")); 19. fileService.write(response.getOutputStream(), fileForm.getFileId()); 20. } 21. catch (Exception e) 22. { 23. throw new ModuleException(e.getMessage()); 24. } 25. return null; 26. } 27. } 第15~18行,设置HTTP响应头,将响应类型设置为application/x-msdownload MIME类型,则响应流在IE
中
将弹出一个文件下载的对话框,如图 4所示。IE所支持的MIME类型多达26种,您可以通过这个网址查看其他的MIME类型: http://msdn.microsoft.com/workshop/networking/moniker/overview/appendix_a.asp。 如果下载文件的文件名含有
中
文字符,如果不对其进行硬编码,如第18行所示,客户文件下载对话框
中
出现的文件名将会发生乱码。 第19行代码获得response的输出流,作为FileServie write(OutputStream os,String fileId)的入参,这样文件的内容将写到response的输出流
中
。 3、web.xml文件的配置 Spring容器在何时启动呢?我可以在Web容器初始化来执行启动Spring容器的操作,Spring提供了两种方式启动的方法: •通过org.springframework.web.context .ContextLoaderListener容器监听器,在Web容器初始化时触发初始化Spring容器,在web.xml
中
通过<listener></listener>对其进行配置。 •通过Servlet org.springframework.web.context.ContextLoaderServlet,将其配置为自动启动的Servlet,在Web容器初始化时,通过这个Servlet启动Spring容器。 在初始化Spring容器之前,必须先初始化log4J的引擎,Spring也提供了容器监听器和自动启动Servlet两种方式对log4J引擎进行初始化: •org.springframework.web.util .Log4jConfigListener •org.springframework.web.util.Log4jConfigServlet 下面我们来说明如何配置web.xml启动Spring容器: 代码 11 web.xml
中
对应Spring的配置内容 1. <web-app> 2. <context-param> 3. <param-name>contextConfigLocation</param-name> 4. <param-value>/WEB-INF/applicationContext.xml</param-value> 5. </context-param> 6. <context-param> 7. <param-name>log4jConfigLocation</param-name> 8. <param-value>/WEB-INF/log4j.properties</param-value> 9. </context-param> 10. <servlet> 11. <servlet-name>log4jInitServlet</servlet-name> 12. <servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class> 13. <load-on-startup>1</load-on-startup> 14. </servlet> 15. <servlet> 16. <servlet-name>springInitServlet</servlet-name> 17. <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class> 18. <load-on-startup>2</load-on-startup> 19. </servlet> 20. … 21. </web-app> 启动Spring容器时,需要得到两个信息:Spring配置文件的地址和Log4J属性文件,这两上信息分别通过contextConfigLocationWeb和log4jConfigLocation容器参数指定,如果有多个Spring配置文件,则用逗号隔开,如: /WEB-INF/applicationContext_1.xml, /WEB-INF/applicationContext_1.xm2 由于在启动ContextLoaderServlet之前,必须事先初始化Log4J的引擎,所以Log4jConfigServlet必须在ContextLoaderServlet之前启动,这通过<load-on-startup>来指定它们启动的先后顺序。 乱码是开发Web应用程序一个比较老套又常见
问题
,由于不同Web应用服务器的默认编码是不一样的,为了方便Web应用在不同的Web应用服务器上移植,最好的做法是Web程序自身来处理编码转换的工作。经典的作法是在web.xml
中
配置一个编码转换过滤器,Spring就提供了一个编码过滤器类CharacterEncodingFilter,下面,我们为应用配置上这个过滤器: 1. <web-app> 2. … 3. <filter> 4. <filter-name>encodingFilter</filter-name> 5. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 6. <init-param> 7. <param-name>encoding</param-name> 8. <param-value>GBK</param-value> 9. </init-param> 10. </filter> 11. <filter-mapping> 12. <filter-name>encodingFilter</filter-name> 13. <url-pattern>/*</url-pattern> 14. </filter-mapping> 15. … 16. </web-app> Spring的过滤器类是org.springframework.web.filter.CharacterEncodingFilter,通过encoding参数指定编码转换类型为GBK,<filter-mapping>的配置使该过滤器截获所有的请示。 Struts的框架也需要在web.xml
中
配置,想必读者朋友对Struts的配置都很熟悉,故在此不再提及,请参见本文所提供的源码。 总结 本文通过一个文件上传下载的Web应用,讲解了如何构建基于SSH的Web应用,通过Struts和FormFile,Spring的LobHandler以及Spring为HibernateBlob处理所提供的用户类BlobByteArrayType ,实现上传和下载文件的功能仅需要廖廖数行的代码即告完成。读者只需对程序作稍许的调整,即可处理Clob字段: •领域对象对应Clob字段的属性声明为String类型; •映射文件对应Clob字段的属性声明为org.springframework.orm.hibernate3.support.ClobStringType类型。
HaivOra4J2ee工具提供图片
开发工具HaivDb4J2ee,全称Haiv Database Tool for J2EE,是基于java编写的j2ee代码自动生成工具暨数据库管理工具,运行于jdk1.5环境
中
,目前版本支持
Oracle
、mysql、mssql三种常用的数据库,以后会视情况扩充至其它种类的关系型数据库。它的功能类似于MyEclipse的自动生成hibernate代码,但比MyEclipse功能强大N倍。
本工具主要提供了以下功能:
1、能通过表名、列名、列类型、表和列的注释等信息,自动生成PO类、Hibernate、VO类、struts+spring+hibernate的配置文件、
Jsp
文件、使用说明等文档,以实现对单表的增、删、改、查的操作。生成的代码非常规范,注释来源于表和列的注释,非常详尽。
2、能分析任一SELECT查询语句,
提取
查询结果的
记录
集字段名称、类型,生成查询的j2ee代码,以包括上述文件。
3、工具提供了一套完整的J2EE模板,您也可以对此模板做修改和配置,灵活运用。
4、这个工具同时又是一个简洁易用的数据库客户端工具,它提倡开发人员将每个表和列都加上注释,实现表及注释的平面化管理,是数据库管理员和项目开发、管理人员的最佳选择。
对于一个新的J2EE工程,本工具的使用步骤:
一、由架构师设计本工程的底层架构。
二、配置HaivDb4J2ee所需的工程模板,主要有增删改模板和查询模板。本步骤可以自行配置,也可联系作者进行配置。
三、数据库设计人员设计数据库结构,建议对所有表和列增加注释(对注释的利用是本工具的亮点之一,使用本工具可以方便的增加注释)。
四、使用本工具生成代码,程序员复制的是文件,或是整个java包,而不是一行行的代码,然后做调试和完善,即可发布。
使用本工具之后,您将不再关心以下
问题
:
1、列和PO类变量的对应关系:工具根据您的列名、列类型,自动生成Java变量名、变量类型,生成的变量名包您满意,并且绝对符合JavaBean的命名规范。
2、文件名的命名规范:文件名采用统一的标识加后缀(如PubPersonAction.java、PubPersonView.java、PubPersonFrom.java、PubPersonLogic.java、PubPerson.java、AbstractPubPerson.java、PubPersonAdd.
jsp
、PubPersonSearch.
jsp
等)。
3、不同层的类间代码的复制、粘贴
问题
:不同层的类使用相同的变量名,不需手动复制。
4、代码分层
问题
:本工具将根据您的模板配置,自动实现MVC分层。
5、日期型、数值型变量与
Jsp
页面交互时需手动转换类型的
问题
:自动在Form里生成了对应的String变量,用来和
Jsp
交互。
6、代码可读性
问题
:代码生成非常规范,注释一应俱全,甚至包括生成时间、开发人员签名等(注:注释主要来源于数据库表、列的注释,也可手动修改)。
有需要的可与作者联系,也可下载到以下地址下载最新版本,抢先体验!
下载地址:http://haiqing.rocklv.net/soft/HaivDb4J2ee.rar
QQ 155040311
Emain englishking@qq.com
电话:13598080810
风越.Net代码生成器 [FireCode Creator] V1.3 精简版
《风越.Net代码生成器 [FireCode Creator]》是一款采用.Net FrameWork2.0框架、基于多种数据库的程序代码生成软件,可快速建立数据信息的:添加、编辑、查看、列表、搜索功能。默认提供asp、aspx两种代码框架及多个界面设计模板,均可任意修改管理。通过自定义生成程序的界面风格与输出代码,用户可将其扩展为ASPX/ASP/PHP/
JSP
等各种程序的代码生成器。内置的.net代码框架,能建立C#语言的.net解决方案,可在VS2005
中
直接编辑,既能帮助.net初学者快速入门,更可最大限度提高.net程序员的代码编写效率。 01、支持生成的ASPX/ASP/PHP/
JSP
等页面在本机自动发布、调试(需安装IIS或对应WEB服务器) 02、支持Microsoft SQL Server、Microsoft Access、
Oracle
、MySql、Excel、FoxPro、FoxBase、Text等数据库连接 03、支持从数据表、视图(Access为查询)
中
读取数据字段 04、支持通过数据表
中
的组合主键传递参数 05、支持CSS统一设置页面风格 06、支持多种控件输入方式: 文本框 文本域 UBB文本框(支持UBB文本输入) 密码框 隐藏域 日期选择 单选框 复选框 下拉框 多选列表 单选列表 批量上载 上载文件 上载到库 07、支持多种信息显示方式: 显示文字 链接文件 文本框 文本域 显示图片 背景声音 视频播放 显示flash 08、支持检测提交字符的最小、最大输入长度、是否空值/唯一值、文本类型:★ 不检测 非特殊字符 仅单词字符 仅单词字符空格 仅26个字母 仅
中
文字符 仅允许整数 仅允许小数 仅日期/时间 仅日期+时间 仅日期 仅时间 仅允许邮箱 仅允许网址 仅允许IP 仅身份证号 仅国内电话 仅国内手机 09、支持对用户输入内容进行服务器端与客户端JS双重验证,有效防止SQL注入 ★ 10、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县/公司、部门、小组等形式下拉框 ★ 11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除
记录
时同步删除文件 13、支持控件名加密,使输入控件的名称与字段名不同,防止他人从客户端HTML
中
猜解 ★ 14、支持列表、搜索页面对数据
记录
进行实时排序、修改、批量删除等功能 15、支持表头/单独表格搜索两种布局方式 16、提供多种灵活翻页方案,用户可设置每页
记录
条数、上/下页、前/后N页、输入数字跳转到指定页面等,提高海量数据翻页速度 17、提供丰富的建站常用VB、JS函数库 ★ 18、更多扩展功能: 添加、修改页面在保存信息前进行预览功能 添加、修改页面提交后自动跳转并刷新列表页 字段描述批量格式化,可从字段名、描述生成,加强英文字符处理 列表、搜索页面隔行颜色、点击变色设置 根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表
中
直接批量编辑字段值,便于管理员维护 列表、搜索文件自动读取链接数据表值的实际信息 发送邮件功能,设置字段为邮件对应信息,可发送附件 ★ (繁、简、英)单语言版本 ★ 多语言页面实时翻译功能(默认:繁、简、英,可增加其它语言) ★ 多语言编码支持(GB2312/UTF8) ★ 生成提交校验码图片 ★ 搜索、列表文件以详细列表页(留言板风格)显示 生成权限,限制用户对指定页面的添加、删除、编辑权 将查询结果导出为CSV、HTML、EXCEL文件 ★ 生成不同选择字段的SQL语句 生成数据库字典 ★ 模板代码生成器,可自定义模板、变量生成代码 ★ 19、提供建站常用辅助工具: 屏幕尺 剪切板,保存最近指定次数的历史
记录
常用加解密、编解码(DES、MD5、SHA、BASE64) 批量
提取
文本,支持正则表达式,可将HTML等文件
中
指定内容存入数据库 批量查找替换,支持正则表达式 批量文件、文件夹改名,支持正则表达式 正则表达式测试器(可设置、保存常用正则表达式) 获取键盘的按键值 网页隐藏资源下载,可下载无法直接得到URL的SWF、图片、音乐等资源 获取汉字的拼音、五笔编码、笔画数、笔顺名、部首等信息,并可进行汉字繁/简体,GB/BIG转换 代码编排器,CSS排版、JS、ASP、HTML注
Web 开发
81,091
社区成员
341,719
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章