请教FreeMarker在java web开发中使用方法
我现在的项目用的是struts1,从网上查freemarker是和struts2结合的比较好,不知道在struts1中使用情况怎么样。我刚刚学习了基础的语法,从网上搜了小例子,是在后台能运行的,一个单独的java类和一个.ftl模版文件结合然后得到输出的.html网页,
但是在struts1中使用的是action跳转,我直接把java类的内容放到action里面,第一条就执行不过去,提示说找不到路径,我不知道是路径的问题,还是原来的java文件内容是不可以直接放在action里用啊,
我的思路是在jsp页面上点击一个按钮然后跳到相应的action,在action里面执行代码,调用ftl模版,生成html页面,设置跳转到该html页面,这个思路对吗?
下面是我的jsp页面和action的内容,以及运行项目时提示的错误。
jsp页面内容:
<body>
<form name="myForm" action="test.do?method=tt" method="post" id="myForm" >
<div align="center">
<input id="addbutton" class="new_button" name="addbutton" type="submit" value="提交" />
</div>
</form>
</body>
action内容:
package com.Space_debris.struts.action;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import com.mysql.jdbc.Connection;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestAction extends DispatchAction {
public ActionForward tt(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException,IOException, TemplateException {
//public static void main(String []args) throws IOException, TemplateException{
/**
* freemarker 加载文件
*/
Configuration cfg = new Configuration();
//加载freemarker模板文件
cfg.setDirectoryForTemplateLoading(new File("WebRoot/freemarker"));
//设置对象包装器
cfg.setObjectWrapper(new DefaultObjectWrapper());
//设计异常处理器
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
//定义并设置数据
Map<String, Object> data = new HashMap<String, Object>();
data.put("persion", "godbugs");
//获取指定模板文件
Template template = cfg.getTemplate("test.ftl");
//定义输入文件,默认生成在工程根目录
Writer out = new OutputStreamWriter(new FileOutputStream("E:./WebRoot/freemarker/test.html"),"UTF-8");
//写入目标文件中
//写的是freemarker 生成模板
List list = new ArrayList();
list.add("星期一");
list.add("星期二");
list.add("星期三");
data.put("list", list);
data.put("age", 12);
template.process(data, out);//写入目标文件
return mapping.findForward("test");
}
}
错误提示:exception
java.io.FileNotFoundException: WebRoot\freemarker does not exist. freemarker.cache.FileTemplateLoader$1.run(FileTemplateLoader.java:125)
java.security.AccessController.doPrivileged(Native Method)
freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:122)
freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:108)
freemarker.template.Configuration.setDirectoryForTemplateLoading(Configuration.java:314)
com.Space_debris.struts.action.TestAction.tt(TestAction.java:44)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.Space_debris.filter.HibernateFilter.doFilter(HibernateFilter.java:33)
com.Space_debris.filter.ChangeCharsetFilter.doFilter(ChangeCharsetFilter.java:28)
--------------------编程问答-------------------- 元芳,CSDN新论坛上线!你怎么看? --------------------编程问答-------------------- cfg.setDirectoryForTemplateLoading(new File("WebRoot/freemarker")); 目录应该是你磁盘下的目录不是单纯的项目 web-info 我也遇到这种错误。。。不过可以设置 web.xml一下 --------------------编程问答-------------------- freemarker 和struts1 是兼容的,我之前用过。。
WebRoot\freemarker does not exist. 是说 目录不存在,,地址要指定绝对的路径。
补充:Java , Web 开发