- 浏览: 29195 次
- 性别:
- 来自: 二次元世界
最新评论
文章列表
注:文中使用部分方法请参考《对Java IO的一些总结 (1) 》及《对Java IO的一些总结 (2) 》
读文件的关键技术点如下:
1. 用FileInputStream打开文件输入流,通过read方法以字节为单位读取文件,是最通用的读文件的方法,能读取任何文件,特别适合读二进制文件,如图片、声音、视频文件。
2. 用InputStreamReader打开文件输入流,通过read方法以字符为单位读取文件,常用于读取文本文件
3. 用BufferedReader打开文件输入流,通过readLine方法以行为单位读取文件,重用于读格式化的文本。
4. 用RandomAccessFile打开文件 ...
注:文中使用部分方法请参考《对Java IO的一些总结 (1) 》
移动文件和目录的关键技术如下:
1. File的renameTo方法能移动文件。
2. 当目标文件存在,或者目标的父目录不存在时,renameTo方法返回false。
/**
* 移动单个文件
* @param srcFileName 待移动的源文件名
* @param targetFileName 目标文件名
* @param overlay 如果目标文件存在,是否覆盖
* @return 文件移动成功返回true,否则返回false
*/
public static bo ...
多数程序在不获取外部数据的情况下不能顺利完成目标。数据从一个输入源获得,程序的结果被送到输出目的地。
Java程序通过流来完成输入/输出,它是生产和消费信息的抽象。流通过Java的输入/输出系统与物理设备连接,尽管 ...
Struts 2更是提供了对Velocity和FreeMarker模板引擎的支持。通过以下几个步骤,实现在Struts 2中使用velocity模板。
创建一个Web Project,除了Struts2所必备的包外,还需要引入如下包:velocity-1.4.jar、velocity-dep-1.4.jar、velocity-tools-1.1.jar
在web.xml中不需要配置关于Velocity的Servlet,只配置Struts 2的filter即可。
<web-app version="2.5"
xmlns="http://java.sun. ...
Struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径),或者使用myeclipse经常用的,指定basePath。如下:
<struts>
<constant name="struts.devMode" value="true" />
<package name=&qu ...
最近在看JeeCMS的源码,大量使用通配符,稍微有点不习惯。呵呵!
总结整理一下。
使用通配符,将配置量降到最低,不过,一定要遵守“约定优于配置”的原则。
如:访问/namespace/Studentadd,使用如下的配置:
<action name="Student*" class="com.struts2.action.StudentAction" method="{1}">
<result>/Student{1}_success.jsp</result>
</action> ...
在Struts中有两种使用Velocity的方法,一种是利用Velocity的vm模板进行页面展示,一种则是利用Velocity来生成静态页面。以下介绍在Struts 1.*版本中使用Velocity模板生成静态页面的过程。
思路是访问一个Action,在Action中进行静态页面的生成,最终该Action跳转到生成好的静态页面中。
步骤为:
1. 获取VelocityContext,该对象中包含了需要展示的数据
2. 获取指定路径下的vm模板内容
3. 根据Velocity模板,生成字符串
4. 根据指定路径及文件名创建文件
5. 将转换好的模板文件写入指定文件中
源码如下:
V ...
在Struts中有两种使用Velocity的方法,一种是利用Velocity的vm模板进行页面展示,一种则是利用Velocity来生成静态页面。以下介绍在Struts 1.*版本中使用Velocity的vm模板显示。
在Struts 1.*版本中,并未支持对vm模板的显示,所以当ActionForward指向一个vm模板时,只会将模板中的Velocit语句当做普通字符内容显示出来,而不对其中的Velocity语句进行任何解析及赋值。所以在Struts 1.*版本中使用Velocity,需要在web.xml中配置VelocityViewServlet,以处理后缀为.vm的模板文件。
在web. ...
在基于WEB的应用中,通常大多数情况下是在servlet里使用Velocity。在servlet里的Velocity基本应用是非常简单的,只需通过两个必要步骤就可以实现:
1. 继承org.apache.velocity.servlet.VelocityServlet抽象类:
public class SampleServlet extends VelocityServlet
2. 仅需实现VelocityServlet类的一个方法handleRequest():
public Template handleRequest(HttpServletRequest req, HttpServlet ...
会话bean(session bean):负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作。
会话bean分为两种:
无状态会话bean (Stateful Session Bean):平常我 ...
设置JNDI访问环境信息
在进行JNDI查找前,我们必须设置应用服务器的上下文信息,主要是设置:
1. JNDI驱动的类名(java.naming.factory.initial)
java.naming.factory.initial或Context.INITIAL_CONTEXT_FACTORY:环境属性名,用于指定InitialContext工厂(作者称它为JNDI驱动更容易理解),它类似于JDBC指定数据库驱动类。因为本例子连接的是JbossNS(命名服务的实现者),所以使用Jboss提供的驱动类:org.jnp.interfaces.NamingContextFactory
2. 命 ...
表达式是FreeMarker模板的核心功能,表达式放置在插值语法(${……})之中时,表明需要输出表达式的值;表达式语法也可与FreeMarker标签结合,用于控制输出。
直接指定值
使用直接指定值的语法让FreeMarker直接输出插值中的值,而不是输出变量值。直接指定值可以是字符串、数值、布尔值、集合和MAP对象。
如果字符串中包含特殊字符,需要转义。
${"文件保存在c:\\盘"} --输出为-- 文件保存在c:\盘
${'名字是\"Hoffman\"'} --输出为-- 名字是"Hoffman
注意:Map对象的key和value都是 ...
FreeMarker模板文件主要由如下4个部分构成:
1. 文本:直接输出的部分
2. 注释:即<#-- …… -->格式部分,不会输出
3. 插值:即${……}或者#{……}格式的部分,将使用数据模型中的部分替代输出
4. FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出
<html>
<body>
<#-- 注释部分 -->
<#-- 下面引用插值 -->
<h1>Welcome! ${user}!</h1>
<#-- 使用FTL指令 --> ...
对于上传文件的大小,FCKeditor并没有提供限制,可以通过修改源码来达到控制上传文件大小。
在Dispatcher类中,FCKeditor对文件的扩展名进行了一定的验证,通过验证的文件,可被上传。所以这里需要修改3个类的源代码。
1. Dispatcher:增加对文件大小的验证
2. UploadResponse:定义新的错误类型常量,及处理错误的方法
3. ConnectorServlet:引用包的修改
Dispatcher源码如下:
//检查文件扩展名
if (type.isDeniedExtension(FilenameUtils.getExtension(fileName))) { ...
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。
DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager。
根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:
第一种方式:每个Bean都有一个代理
...