Jodd-madvoc 是一个很不错的web mvc框架。但只使用了jsp作为视图技术,这显然拉了madvoc的后腿。本文将告诉你如何将beetl集成到jodd上。
第一步:配置web.xml:在基于madvoc的基础配置上,需要增加beetl的初始化工作
<filter>
<filter-name>madvoc</filter-name>
<filter-class>jodd.madvoc.MadvocServletFilter</filter-class>
<init-param>
<param-name>madvoc.webapp</param-name>
<param-value> com.test.AppWebApplication</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>madvoc</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
第二步: 完成AppWebApplication类:
public class AppWebApplication extends WebApplication {
protected void initResults(ResultsManager actionManager) {
actionManager.register(new BeetlActionResult());
}
public void configure(MadvocConfigurator configurator) {
AutomagicMadvocConfigurator auto = (AutomagicMadvocConfigurator)configurator;
auto.setExcludedJars("**/beetl.1.25.03.jar");
super.configure(configurator);
}
}
重载了initResults 将注册一个BeetlActionResult,这是用来初始化Beetl,以及负责渲染具体视图,我们稍后会提到
重载了confgure ,auto.setExcludedJars 用于让jodd别扫描beetl类,因为jodd配置是基于扫描类来获取配置信息的。因为beetl也集成struts,spring等mvc框架,还是别让他扫描,以免出错
第三步,实现BeetlActionResult, jodd提供机制允许注册视图渲染类,如json,二进制数据等,基类是ActionResult
package com.test;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jodd.madvoc.ActionRequest;
import jodd.madvoc.result.ActionResult;
import org.bee.tl.core.GroupTemplate;
import org.bee.tl.core.Template;
import org.bee.tl.ext.WebConfig;
import org.bee.tl.ext.WebPathKit;
import org.bee.tl.ext.spring.SessionWrapper;
import org.bee.tl.ext.spring.WebVariable;
public class BeetlActionResult extends ActionResult{
public static final String NAME = "beetl";
GroupTemplate group = null;
public BeetlActionResult() {
super(NAME);
try{
WebConfig config = new WebConfig();
config.updateRootPath(WebPathKit.getWebRootPath()); //更新模版路径
group = config.createGroupTemplate();
group.setCharset("UTF-8");
}catch(Exception ex){
throw new RuntimeException(ex.getMessage());
}
}
@Override
public void render(ActionRequest actionRequest, Object resultObject, String resultValue, String resultPath) throws Exception {
HttpServletRequest request = actionRequest.getHttpServletRequest();
HttpServletResponse response = actionRequest.getHttpServletResponse();
response.setContentType("text/html;charset=UTF-8");
String target = resultPath;
Template t = group.getFileTemplate(resultPath);
Enumeration en = request.getAttributeNames();
while (en.hasMoreElements())
{
String key = (String) en.nextElement();
t.set(key, request.getAttribute(key));
}
WebVariable webVariable = new WebVariable();
webVariable.setRequest(request);
webVariable.setResponse(response);
webVariable.setSession(request.getSession());
t.set("servlet", webVariable);
t.set("request", request);
t.set("ctxPath", request.getContextPath());
t.setRawValue("session", new SessionWrapper(request.getSession()));
t.getText(response.getWriter());
}
}
第四步,测试一下:
写一个Controller:
package com.test;
import jodd.madvoc.meta.Action;
import jodd.madvoc.meta.In;
import jodd.madvoc.meta.MadvocAction;
import jodd.madvoc.meta.Out;
@MadvocAction
public class IndexAction {
@In
String name;
@Out
String value;
@Action("/index.html")
public String world() {
value = "Hello World!";
return "beetl:ok.html";
}
}
hello,中国 ${value}
有任何疑问,可以通过beetl qq群提问