struts+spring+ibatis+velocity整合配置

<!--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 >

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 >

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 >

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 >

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 >

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

toolbox.xml工具箱设置示例

<? xml version="1.0" ?>
< 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 >

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());
        }

    }

}

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");
    }

}

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值