当前位置:编程学习 > JAVA >>

请教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 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,