EasyJWeb也是驱动请求的MVC框架,他有自身的IOC和AOP,当然功能上和Spring相比存在很大的差别,在使用EasyJWeb进行web开发的时候,在Bean的管理以及事务支持等方面还是使用Spring比较好。
在使用EasyJWeb开发前要给以下jar文件添加到classpath中:
easyjweb-core-1.0-m3.jar
dom4j-1.6.1.jar
easydbo-0.9.1.jar
velocity-1.5.jar
velocity-dep-1.5.jar
jaxen-1.1.jar
log4j-1.2.14.jar
commons-fileupload-1.2.jar
commons-logging-1.1.jar
首先还是定义一个实体类User,代码如下:
package spring.chapter6.easyjweb.domain;
publicclass User {
private String userName;
private String passWord;
public String getUserName() {
returnuserName;
}
publicvoid setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
returnpassWord;
}
publicvoid setPassWord(String passWord) {
this.passWord = passWord;
}
}
定义一个action,在easyjweb中action可以继承AbstractCmdAction也可以继承AbstractPageAction,这个根据自己的喜好,至于他们的区别这里不多重复,有兴趣可以参考EasyJWeb相关文档,UserAction代码如下:
package spring.chapter6.easyjweb.action;
import spring.chapter6.easyjweb.domain.User;
import com.easyjf.web.Module;
import com.easyjf.web.Page;
import com.easyjf.web.WebForm;
import com.easyjf.web.core.AbstractCmdAction;
publicclass UserAction extends AbstractCmdAction {
public Page doInit(WebForm form, Module module) {
returnnew Page("/index.html");
}
public Page doShow(WebForm form, Module module) {
User user = new User();
form.toPo(user);
form.addResult("user", user);
returnnew Page("/show.html");
}
}
AbstractCmdAction默认执行方法是doInit(),当请求是user.ejf时调用默认方法,请求时uesr.ejf?cmd=show时调用show()方法,这个是easyjweb中的一种命名约束,UserAction中定义了2个方法,第一个直接打开一个页面index.html,在easyjweb中页面默认的路径是WEB-INF/views/,执行doshow()方法后,有一个form.toPo(user),这里就是给表单对象转换成实体类,这里和Spring的SimpleFormController中的command一样,表单字段名称要和实体类属性一样。
接着编写web.xml,定义servlet以及相关配置文件的读取,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>easyjwebConfigLocation</param-name>
<param-value>/WEB-INF/mvc.xml</param-value>
</context-param>
<!--定义EasyJWeb的主控Servlet -->
<servlet>
<servlet-name>easyjf</servlet-name>
<servlet-class>com.easyjf.web.ActionServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>easyjf</servlet-name>
<url-pattern>*.ejf</url-pattern><!--所有.ejf的扩展名都由easyjweb来处理-->
</servlet-mapping>
<!-- 定义字符处理Filter -->
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>com.easyjf.web.CharsetFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<servlet-name>easyjf</servlet-name>
</filter-mapping>
</web-app>
首先定义了<context-param>来读取指定的easyjweb配置文件,这里为/WEB-INF/下的mvc.xml,然后指定了servlet,在最后指定了一个Filter,Filter用来统一编码,对所有的中文均采用UTF-8格式来防止中文乱码的出现。
编写easyjweb的配置文件mvc.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<easyjf-web xmlns="http://www.easyjf.com/schema/easyjf/web"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.easyjf.com/schema/easyjf/web http://www.easyjf.com/schema/easyjf/web/easyjf-web-0.0.1.xsd">
<modules>
<module name="user" path="/user"
action="spring.chapter6.easyjweb.action.UserAction">
</module>
</modules>
</easyjf-web>
easjweb的配置文件也是基于schema的,最外层使用<easyjf-web>标签,<modules>标签表示所有的应用模块,<module>表示单个应用模块,每一个<module>对应一个action,<module>中的name属性用来标识该模块,在程序中可以使用module.findPage(模块名)来导向模块页面,path属性表示请求的方式,“path="/user"”表示请求为user.ejf的时候交给action指定的程序来处理,这里表示每当user.ejf的请求都交给UserAction来处理。
index.html代码以及show.html代码如下:
index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一个EasyJWeb实例</title>
</head>
<body>
<form action="/FirstEasyJWebProject/user.ejf?cmd=show" method="post">用户名:<input
type="text" name="userName" value="" /><br>
密码:<input type="password" name="passWord" value="" /><br>
<input type="submit" value="提交" /></form>
</body>
</html>
表单的字段名为userName和passWord,和User实例类中的属性一样,这样在调用form.toPo()就直接将表单转换成User对象了。
show.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一个EasyJWeb实例</title>
</head>
<body>
${user.userName}您好!您的密码是:${user.passWord}.
</body>
</html>
代码中使用了velocity标签,velocity标签是easyjweb默认的标签,在使用easyjweb的过程中也可以使用freemarker等其他标签,使用方法可以参考官方网站的介绍,这里不多重复。