Jodd 3.6.6 发布了,Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架。简单,却很强大!Jodd是一个通用目的的开源Java库少轻量级框架和组件:豆操纵的工具,更容易数据库访问,对网络工程建设代理Proxetta,优雅的时间处理,宠物JDateTime Madvoc分贝捆绑.你可以把Jodd想象成Java的“瑞士军刀”,不仅小,锋利而且包含许多便利的功能。
Jodd = Tools + IoC + MVC + DB + AOP + TX + JSON + HTML < 1.5 Mb
Jodd 被分成众多模块,按需选择,其中
工具类模块有:
jodd-core 一些工具类,包括Printf、JDateTime、StringUtil、Fast buffers等等
jodd-bean BeanUtil以及类型检查转换工具
jodd-props 更强大的Java Properties替代
jodd-email 更简单易用的e-mail收发
jodd-upload 处理HTTP上传
jodd-servlets 一些Servlet相关的工具类, 附带一套漂亮的JSP标签库
jodd-http 轻巧的HTTP客户端
小型框架模块有:
jodd-madvoc 一个MVC框架
jodd-petite 一个依赖注入容器
jodd-lagarto HTML/XML解析器,包含Jerry和CSSelly,让你像jQuery一样筛选HTML节点
jodd-lagarto-web Lagarto的Web扩展,包含Decora、HtmlStapler等等
jodd-proxetta 帮你实现动态代理,获取函数参数名
jodd-dboom 数据库访问的轻量级封装,可看作一个简单的ORM
jodd-json JSON解析、序列化
jodd-vtor 一个基于注解的字段验证框架
Jodd提供的功能有:
1. 提供操作Java bean
2. 可以从各种数据源加载Bean
3. 简化JDBC的接连与代码
4. 剖析SQL查询
5. 处理时间与日期
6. 操作与格式化String
7. 搜索本地硬盘上的文件
8. 帮助处理Servlet请求等
除此之外还包含一个很小,但实用的基于JSP的MVC框架。
使用Jodd的优点简化和统一 controller ,抛弃 extends SimpleFormController ,统一使用 implements Controller 的方式。
2. 简化 JSP 页面的 bind, 不需要一个字段一个字段的绑定。
3. 对 bean 没有任何要求,可以使用任意的 bean 做为 formBean.
使用方法简介:
1 把 jodd.jar 放到 web-inf->lib 下,在 web.xml 里声名标签:
< taglib >
< taglib-uri > jodd </ taglib-uri >
< taglib-location > /WEB-INF/lib/jodd.jar </ taglib-location >
</ taglib >
2 任意的一个 javaBean做为FormBean
package caike;
public class User {
private String userName;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String pwd) {
this .password = pwd;
}
public String getUserName() {
return userName;
}
public void setUserName(String username) {
this .userName = username;
}
}
3 在 JSP 页面使用 jodd tag:, 比如对应用户登录页面的
<% @page import = " caike.User " %>
<% @taglib uri = " jodd " prefix = " jodd " %>
< jodd:form beans ="user" scopes ="session" >
< form action ="my.htm" method ="post" >
< table width ="300" border ="0" cellspacing ="0" cellpadding ="0"
align ="center" class ="white" >
< tr >
< td height ="32" align ="right" width ="107" > 用户名: </ td >
< td height ="32" width ="193" >< input type ="text" name ="userName"
class ="input" size ="20" > </ td >
</ tr >
< tr >
< td height ="33" align ="right" width ="107" > 密码: </ td >
< td height ="33" width ="193" >< input type ="password" name ="password"
class ="input" size ="21" ></ td >
</ tr >
< tr >
< td height ="69" align ="center" colspan ="2" >
< input type ="submit" name ="Submit" value ="登录" >
</ tr >
</ table >
</ form >
</ jodd:form >
4 Dispatch-servelt.xml 中对 controller 的配置
<bean id="myController" class="caike.MyController">
</bean>
不再需要这种方式:
<!--
<bean id="myController" class="caike.MyFormController">
<property name="commandClass" value="caike" />
<property name="formView" value="userForm" />
</bean>
-->
5 在 controller 中取出 user
package caike;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jodd.bean.BeanUtil;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class MyController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
User user = new User();
BeanUtil.load(user, request);
System.out.println( " 用户名: " + user.getUserName() + " 密码: " + user.getPassword());
return null ;
}
}
需要注意的地方:
表单中对应的名字 name 和 javaBean 里对应的属性名要相同。
<input type="text" name="userName"
class="input" size="20">
public class User {
private String userName;
.......
改进记录包括:
FIXED
[http]Fixed special case when content-length and chunked encoding exists.
NEW
[util] getResourceAsStream now has a boolean argument to disable the cache.
CHANGED
[util]Zip methods now returns resulting zip File .
FIXED
[methref]Fixed parallel access, added Pathrefs .
FIXED
[mail]Fixed parsing with MailAddress .
NEW
[mail]Added startTlsRequired and plaintextOverTLS() .
NEW
[mail]Added debug mode option and strict email address flag.
CHANGED
[bean] BeanCopy got some slight modifications and improvements.
CHANGED
[madvoc]Execution of inteceptors, filters and actions is significantly simplified.