您的位置:首页 > 编程语言 > Java开发

struts+spring+ibatis+velocity整合配置

2007-09-03 21:56 483 查看
<!--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");


}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: