struts+spring+ibatis+velocity整合配置

文章转自:
http://blog.csdn.net/hgs_renyao/article/details/1770890


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

猜你喜欢

转载自tianlijia202.iteye.com/blog/1131243
今日推荐