<!--java菜鸟第一篇-->
这几天学了下struts+spring+ibatis+velocity的框架组合。弄了个Blog的小程序,基本上算就简的了,略记之。高级的东东还在学习中。。。
1、web.xml的配置
<?
xml version="1.0" encoding="UTF-8"
?>
< web-app xmlns ="http://java.sun.com/xml/ns/javaee"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" version ="2.5"
xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
<!-- Spring 的配置 -->
< context-param >
< param-name > context </ param-name >
< param-value > /WEB-INF/applicationContext </ param-value >
</ context-param >
< servlet >
< servlet-name > context </ servlet-name >
< servlet-class >
org.springframework.web.context.ContextLoaderServlet
</ servlet-class >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
<!-- Struts 的配置 -->
< servlet >
< servlet-name > action </ servlet-name >
< servlet-class >
org.apache.struts.action.ActionServlet
</ servlet-class >
< init-param >
< param-name > config </ param-name >
< param-value > /WEB-INF/struts-config.xml </ param-value >
</ init-param >
< init-param >
< param-name > debug </ param-name >
< param-value > 3 </ param-value >
</ init-param >
< init-param >
< param-name > detail </ param-name >
< param-value > 3 </ param-value >
</ init-param >
< load-on-startup > 0 </ load-on-startup >
</ servlet >
<!-- Velocity 的配置 -->
< servlet >
< servlet-name > velocity </ servlet-name >
< servlet-class >
org.apache.velocity.tools.view.servlet.VelocityLayoutServlet
</ servlet-class >
< init-param >
< param-name > org.apache.velocity.toolbox </ param-name >
< param-value > /WEB-INF/toolbox.xml </ param-value >
</ init-param >
< init-param >
< param-name > org.apache.velocity.properties </ param-name >
< param-value > /WEB-INF/velocity.properties </ param-value >
</ init-param >
< load-on-startup > 2 </ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name > velocity </ servlet-name >
< url-pattern > *.htm </ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name > action </ servlet-name >
< url-pattern > *.do </ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file > pages/index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
< web-app xmlns ="http://java.sun.com/xml/ns/javaee"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" version ="2.5"
xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
<!-- Spring 的配置 -->
< context-param >
< param-name > context </ param-name >
< param-value > /WEB-INF/applicationContext </ param-value >
</ context-param >
< servlet >
< servlet-name > context </ servlet-name >
< servlet-class >
org.springframework.web.context.ContextLoaderServlet
</ servlet-class >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
<!-- Struts 的配置 -->
< servlet >
< servlet-name > action </ servlet-name >
< servlet-class >
org.apache.struts.action.ActionServlet
</ servlet-class >
< init-param >
< param-name > config </ param-name >
< param-value > /WEB-INF/struts-config.xml </ param-value >
</ init-param >
< init-param >
< param-name > debug </ param-name >
< param-value > 3 </ param-value >
</ init-param >
< init-param >
< param-name > detail </ param-name >
< param-value > 3 </ param-value >
</ init-param >
< load-on-startup > 0 </ load-on-startup >
</ servlet >
<!-- Velocity 的配置 -->
< servlet >
< servlet-name > velocity </ servlet-name >
< servlet-class >
org.apache.velocity.tools.view.servlet.VelocityLayoutServlet
</ servlet-class >
< init-param >
< param-name > org.apache.velocity.toolbox </ param-name >
< param-value > /WEB-INF/toolbox.xml </ param-value >
</ init-param >
< init-param >
< param-name > org.apache.velocity.properties </ param-name >
< param-value > /WEB-INF/velocity.properties </ param-value >
</ init-param >
< load-on-startup > 2 </ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name > velocity </ servlet-name >
< url-pattern > *.htm </ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name > action </ servlet-name >
< url-pattern > *.do </ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file > pages/index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
2、applicationContext.xml的配置
<?
xml version="1.0" encoding="UTF-8"
?>
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >
<!-- 数据库配置 -->
< bean id ="dataSource"
class ="org.springframework.jdbc.datasource.DriverManagerDataSource" >
< property name ="driverClassName" >
< value > ${JDBC.Driver} </ value >
</ property >
< property name ="url" >
< value > ${JDBC.ConnectionURL} </ value >
</ property >
< property name ="username" >
< value > ${Username} </ value >
</ property >
< property name ="password" >
< value > ${Password} </ value >
</ property >
</ bean >
<!-- 与ibatis整合 -->
< bean id ="sqlMapClient"
class ="org.springframework.orm.ibatis.SqlMapClientFactoryBean" >
< property name ="configLocation" >
< value > WEB-INF/sql-map-config.xml </ value >
</ property >
< property name ="dataSource" >
< ref bean ="dataSource" />
</ property >
</ bean >
< bean id ="TransactionManager"
class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name ="dataSource" >
< ref bean ="dataSource" />
</ property >
</ bean >
<!-- 用户DAO配置 -->
< bean id ="blogDAO"
class ="com.renyao.ryblog.DAO.DefaultBlogDAO" >
< property name ="sqlMapClient" >
< ref local ="sqlMapClient" />
</ property >
</ bean >
</ beans >
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >
<!-- 数据库配置 -->
< bean id ="dataSource"
class ="org.springframework.jdbc.datasource.DriverManagerDataSource" >
< property name ="driverClassName" >
< value > ${JDBC.Driver} </ value >
</ property >
< property name ="url" >
< value > ${JDBC.ConnectionURL} </ value >
</ property >
< property name ="username" >
< value > ${Username} </ value >
</ property >
< property name ="password" >
< value > ${Password} </ value >
</ property >
</ bean >
<!-- 与ibatis整合 -->
< bean id ="sqlMapClient"
class ="org.springframework.orm.ibatis.SqlMapClientFactoryBean" >
< property name ="configLocation" >
< value > WEB-INF/sql-map-config.xml </ value >
</ property >
< property name ="dataSource" >
< ref bean ="dataSource" />
</ property >
</ bean >
< bean id ="TransactionManager"
class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name ="dataSource" >
< ref bean ="dataSource" />
</ property >
</ bean >
<!-- 用户DAO配置 -->
< bean id ="blogDAO"
class ="com.renyao.ryblog.DAO.DefaultBlogDAO" >
< property name ="sqlMapClient" >
< ref local ="sqlMapClient" />
</ property >
</ bean >
</ beans >
3、sql-map-config.xml的配置
<?
xml version="1.0" encoding="UTF-8"
?>
<! DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd" >
< sqlMapConfig >
< settings cacheModelsEnabled ="true" enhancementEnabled ="true"
lazyLoadingEnabled ="true" maxRequests ="32" maxSessions ="10"
maxTransactions ="5" useStatementNamespaces ="false" />
<!-- 映射存放sql语句的xml文件资源 -->
< sqlMap resource ="com/renyao/ryblog/Blog.xml" />
</ sqlMapConfig >
<! DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd" >
< sqlMapConfig >
< settings cacheModelsEnabled ="true" enhancementEnabled ="true"
lazyLoadingEnabled ="true" maxRequests ="32" maxSessions ="10"
maxTransactions ="5" useStatementNamespaces ="false" />
<!-- 映射存放sql语句的xml文件资源 -->
< sqlMap resource ="com/renyao/ryblog/Blog.xml" />
</ sqlMapConfig >
4、ibatis映射文件实例--Blog.xml
<?
xml version="1.0" encoding="UTF-8"
?>
<! DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd" >
< sqlMap namespace ="Blog" >
<!-- select,update,insert,delete. id名用于访问该资源,resultClass表示输出类型,parameterClass表示输入参数 -->
< select id ="getBlog" resultClass ="com.renyao.ryblog.bean.Blog" >
SELECT BID as bid , TITLE as title, CONTENT as content,
CREATETIME as createTime, MODIFYTIME as modifyTime, CREATER as
creator,STATUS as status ,ISOPEN as isOpen ,PICURL as picURL
FROM BLOG WHERE BID = #value#
</ select >
< select id ="getBlogByTitle"
resultClass ="com.renyao.ryblog.bean.Blog" >
SELECT BID as bid , TITLE as title, CONTENT as content,
CREATETIME as createTime, MODIFYTIME as modifyTime, CREATER as
creator,STATUS as status ,ISOPEN as isOpen ,PICURL as picURL
FROM BLOG WHERE TITLE like #value#
</ select >
< select id ="getAllBlog" resultClass ="com.renyao.ryblog.bean.Blog" >
SELECT BID as bid , TITLE as title, CONTENT as content,
CREATETIME as createTime, MODIFYTIME as modifyTime, CREATER as
creator,STATUS as status ,ISOPEN as isOpen ,PICURL as picURL
FROM BLOG
</ select >
< insert id ="insertBlog"
parameterClass ="com.renyao.ryblog.bean.Blog" >
INSERT INTO BLOG(TITLE,CONTENT,CREATETIME,MODIFYTIME) values
(#title#, #content#, #createTime#, #modifyTime#)
</ insert >
< update id ="updateBlog"
parameterClass ="com.renyao.ryblog.bean.Blog" >
UPDATE BLOG SET TITLE = #title#, CONTENT= #content#, MODIFYTIME=
#modifyTime# WHERE BID = #bid#
</ update >
< delete id ="deleteBlog"
parameterClass ="java.lang.Integer" >
DELETE BLOG WHERE BID = #bid#
</ delete >
</ sqlMap >
<! DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd" >
< sqlMap namespace ="Blog" >
<!-- select,update,insert,delete. id名用于访问该资源,resultClass表示输出类型,parameterClass表示输入参数 -->
< select id ="getBlog" resultClass ="com.renyao.ryblog.bean.Blog" >
SELECT BID as bid , TITLE as title, CONTENT as content,
CREATETIME as createTime, MODIFYTIME as modifyTime, CREATER as
creator,STATUS as status ,ISOPEN as isOpen ,PICURL as picURL
FROM BLOG WHERE BID = #value#
</ select >
< select id ="getBlogByTitle"
resultClass ="com.renyao.ryblog.bean.Blog" >
SELECT BID as bid , TITLE as title, CONTENT as content,
CREATETIME as createTime, MODIFYTIME as modifyTime, CREATER as
creator,STATUS as status ,ISOPEN as isOpen ,PICURL as picURL
FROM BLOG WHERE TITLE like #value#
</ select >
< select id ="getAllBlog" resultClass ="com.renyao.ryblog.bean.Blog" >
SELECT BID as bid , TITLE as title, CONTENT as content,
CREATETIME as createTime, MODIFYTIME as modifyTime, CREATER as
creator,STATUS as status ,ISOPEN as isOpen ,PICURL as picURL
FROM BLOG
</ select >
< insert id ="insertBlog"
parameterClass ="com.renyao.ryblog.bean.Blog" >
INSERT INTO BLOG(TITLE,CONTENT,CREATETIME,MODIFYTIME) values
(#title#, #content#, #createTime#, #modifyTime#)
</ insert >
< update id ="updateBlog"
parameterClass ="com.renyao.ryblog.bean.Blog" >
UPDATE BLOG SET TITLE = #title#, CONTENT= #content#, MODIFYTIME=
#modifyTime# WHERE BID = #bid#
</ update >
< delete id ="deleteBlog"
parameterClass ="java.lang.Integer" >
DELETE BLOG WHERE BID = #bid#
</ delete >
</ sqlMap >
5、struts-config.xml配置
<?
xml version="1.0" encoding="UTF-8"
?>
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd" >
< struts-config >
< data-sources />
<!-- 主要是form-bean与action-mapping的配置,前者用于存放表单提交后的数据,后者指定处理Action -->
< form-beans >
< form-bean name ="blogForm"
type ="com.renyao.ryblog.form.BlogForm" />
</ form-beans >
< global-exceptions />
< global-forwards >
< forward name ="blog" path ="/pages/blog.do?method=list" ></ forward >
</ global-forwards >
< action-mappings >
< action input ="/pages/blog_edit.htm" name ="blogForm"
parameter ="method" path ="/pages/blog"
type ="com.renyao.ryblog.action.BlogAction" >
< forward name ="list" path ="/pages/blog.do?method=list" />
< forward name ="success" path ="/pages/blog_list.htm" />
< forward name ="view" path ="/pages/blog_detail.htm" />
</ action >
< action input ="/pages/blog_add.htm" name ="blogForm"
parameter ="method" path ="/pages/blogadd"
type ="com.renyao.ryblog.action.BlogAction" >
< forward name ="list" path ="/pages/blog.do?method=list" />
</ action >
</ action-mappings >
< message-resources
parameter ="com.renyao.ryblog.ApplicationResources" />
</ struts-config >
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd" >
< struts-config >
< data-sources />
<!-- 主要是form-bean与action-mapping的配置,前者用于存放表单提交后的数据,后者指定处理Action -->
< form-beans >
< form-bean name ="blogForm"
type ="com.renyao.ryblog.form.BlogForm" />
</ form-beans >
< global-exceptions />
< global-forwards >
< forward name ="blog" path ="/pages/blog.do?method=list" ></ forward >
</ global-forwards >
< action-mappings >
< action input ="/pages/blog_edit.htm" name ="blogForm"
parameter ="method" path ="/pages/blog"
type ="com.renyao.ryblog.action.BlogAction" >
< forward name ="list" path ="/pages/blog.do?method=list" />
< forward name ="success" path ="/pages/blog_list.htm" />
< forward name ="view" path ="/pages/blog_detail.htm" />
</ action >
< action input ="/pages/blog_add.htm" name ="blogForm"
parameter ="method" path ="/pages/blogadd"
type ="com.renyao.ryblog.action.BlogAction" >
< forward name ="list" path ="/pages/blog.do?method=list" />
</ action >
</ action-mappings >
< message-resources
parameter ="com.renyao.ryblog.ApplicationResources" />
</ struts-config >
6、整合velocity
将web.xml中指定的两个文件,toolbox.xml,velocity.properties放到相应的路径,还有vm_global_library.vm。
velocity.properties相应设置如下
<!--
directory指定输出文件夹,template指定输出模板页
-->
velocimacro.library = /WEB-INF/VM_global_library.vm
input.encoding=GBK
output.encoding=GBK
default.contentType=text/html; charset=GBK
tools.view.servlet.layout.directory=pages
tools.view.servlet.layout.default.template=default.htm
velocimacro.library = /WEB-INF/VM_global_library.vm
input.encoding=GBK
output.encoding=GBK
default.contentType=text/html; charset=GBK
tools.view.servlet.layout.directory=pages
tools.view.servlet.layout.default.template=default.htm
toolbox.xml工具箱设置示例
<?
xml version="1.0"
?>
< toolbox >
< tool >
< key > link </ key >
< scope > request </ scope >
< class > org.apache.velocity.tools.struts.StrutsLinkTool </ class >
</ tool >
</ toolbox >
< toolbox >
< tool >
< key > link </ key >
< scope > request </ scope >
< class > org.apache.velocity.tools.struts.StrutsLinkTool </ class >
</ tool >
</ toolbox >
模板页代码
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>
< html >
< head >
< title > Renyao Blog </ title >
< meta http-equiv ="keywords" content ="keyword1,keyword2,keyword3" >
< meta http-equiv ="description" content ="this is my page" >
<!-- <link rel="stylesheet" type="text/css" href="./styles.css"> -->
< base href ="$link.baseRef" >
</ head >
< body >
#parse('pages/header.htm')
$screen_content
#parse('pages/footer.htm')
</ body >
</ html >
< html >
< head >
< title > Renyao Blog </ title >
< meta http-equiv ="keywords" content ="keyword1,keyword2,keyword3" >
< meta http-equiv ="description" content ="this is my page" >
<!-- <link rel="stylesheet" type="text/css" href="./styles.css"> -->
< base href ="$link.baseRef" >
</ head >
< body >
#parse('pages/header.htm')
$screen_content
#parse('pages/footer.htm')
</ body >
</ html >
7、后台实现
需要编写的文件:Blog.xml,Blog.java,BlogForm.java,BlogAction.java,IBlogDAO.java---DAO接口,DefaultBlogDAO.java---实现
改进的地方:通过继承与接口优化代码结构
主要代码:
a.BaseAction.java
package
com.renyao.ryblog.action;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.actions.DispatchAction;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class BaseAction extends DispatchAction ... {
private ApplicationContext ac;
protected Object getBean(String beanName)...{
return ac.getBean(beanName);
}
public void setServlet(ActionServlet actionServlet)...{
if(actionServlet!=null)...{
super.setServlet(actionServlet);
ac=WebApplicationContextUtils.getRequiredWebApplicationContext(actionServlet.getServletContext());
}
}
}
import org.apache.struts.action.ActionServlet;
import org.apache.struts.actions.DispatchAction;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class BaseAction extends DispatchAction ... {
private ApplicationContext ac;
protected Object getBean(String beanName)...{
return ac.getBean(beanName);
}
public void setServlet(ActionServlet actionServlet)...{
if(actionServlet!=null)...{
super.setServlet(actionServlet);
ac=WebApplicationContextUtils.getRequiredWebApplicationContext(actionServlet.getServletContext());
}
}
}
b.BlogAction.java
package
com.renyao.ryblog.action;
import java.sql.Date;
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 com.renyao.ryblog.DAO.iface.IBlogDAO;
import com.renyao.ryblog.bean.Blog;
import com.renyao.ryblog.form.BlogForm;
public class BlogAction extends BaseAction ... {
public ActionForward list(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
try ...{
request.setAttribute("blogs", ((IBlogDAO) getBean("blogDAO"))
.getAllBlog());
return mapping.findForward("success");
} catch (Exception e) ...{
return mapping.getInputForward();
}
}
public ActionForward view(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
int bid = Integer.parseInt(request.getParameter("bid"));
Blog blog = ((IBlogDAO) getBean("blogDAO")).getBlog(bid);
request.setAttribute("blog", blog);
return mapping.findForward("view");
}
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
int bid = Integer.parseInt(request.getParameter("bid"));
((IBlogDAO) getBean("blogDAO")).deleteBlog(bid);
return mapping.findForward("list");
}
public ActionForward update(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
int bid = Integer.parseInt(request.getParameter("bid"));
Date modifyTime = new Date(System.currentTimeMillis());
Blog blog = ((IBlogDAO) getBean("blogDAO")).getBlog(bid);
blog.setContent(((BlogForm)form).getContent());
blog.setTitle(((BlogForm)form).getTitle());
blog.setModifyTime(modifyTime);
((IBlogDAO)getBean("blogDAO")).updateBlog(blog);
return mapping.findForward("list");
}
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
Blog blog = null;
String title = ((BlogForm) form).getTitle();
String content = ((BlogForm) form).getContent();
Date date = new Date(System.currentTimeMillis());
blog.setContent(content);
blog.setTitle(title);
blog.setCreateTime(date);
blog.setModifyTime(date);
((IBlogDAO) getBean("blogDAO")).insertBlog(blog);
return mapping.findForward("list");
}
}
import java.sql.Date;
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 com.renyao.ryblog.DAO.iface.IBlogDAO;
import com.renyao.ryblog.bean.Blog;
import com.renyao.ryblog.form.BlogForm;
public class BlogAction extends BaseAction ... {
public ActionForward list(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
try ...{
request.setAttribute("blogs", ((IBlogDAO) getBean("blogDAO"))
.getAllBlog());
return mapping.findForward("success");
} catch (Exception e) ...{
return mapping.getInputForward();
}
}
public ActionForward view(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
int bid = Integer.parseInt(request.getParameter("bid"));
Blog blog = ((IBlogDAO) getBean("blogDAO")).getBlog(bid);
request.setAttribute("blog", blog);
return mapping.findForward("view");
}
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
int bid = Integer.parseInt(request.getParameter("bid"));
((IBlogDAO) getBean("blogDAO")).deleteBlog(bid);
return mapping.findForward("list");
}
public ActionForward update(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
int bid = Integer.parseInt(request.getParameter("bid"));
Date modifyTime = new Date(System.currentTimeMillis());
Blog blog = ((IBlogDAO) getBean("blogDAO")).getBlog(bid);
blog.setContent(((BlogForm)form).getContent());
blog.setTitle(((BlogForm)form).getTitle());
blog.setModifyTime(modifyTime);
((IBlogDAO)getBean("blogDAO")).updateBlog(blog);
return mapping.findForward("list");
}
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
Blog blog = null;
String title = ((BlogForm) form).getTitle();
String content = ((BlogForm) form).getContent();
Date date = new Date(System.currentTimeMillis());
blog.setContent(content);
blog.setTitle(title);
blog.setCreateTime(date);
blog.setModifyTime(date);
((IBlogDAO) getBean("blogDAO")).insertBlog(blog);
return mapping.findForward("list");
}
}