ssh框架搭建

1.在查詢分析器中創建好數據庫以及數據表

2.在 Eclipse 中配置好JDBC連接以準備連接數據庫

3.新建一個web工程,依次添加 struts,spring,hibernate,注意 spring 添加的是1.2.8或1.2版本,並修改 spring 的配置文件 applicationContext.xml的存放路徑爲webRoot/WEB-INF/下,並修改其名稱爲applicationContext_*.xml,* 號可替代爲dao,command,action,不要勾選爲Hibernate生成配置文件和sessionFactory的複選框

4.通過數據表生成對應於數據表的Java類以及映射文件,檢查這幾個映射文件的存放地址是否已經配置到了 applicationContext_*.xml文件中,如果沒有就配置進去,配置內容如下:

<bean id="sessionFactory"

   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

   ......

   <property name="mappingResources">

    <list>

     <value>com/konglong/ssh/form/Books.hbm.xml</value>

     <value>com/konglong/ssh/form/Logintable.hbm.xml</value>

    </list>

   </property>

   ......

</bean>

5.將 spring 的 Servlet 和 applicationContext_*.xml 文件的存放路徑配置到 web.xml 文件中,配置內容如下:

<servlet>

   <servlet-name>context</servlet-name>

   <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>

   <load-on-startup>1</load-on-startup>

</servlet>

<context-param>

   <param-name>contextConfigLocation</param-name>

   <param-value>/WEB-INF/applicationContext*.xml </param-value>

</context-param>

6.編寫 BaseForm 類,基本結構如下:

public class BaseForm extends ActionForm

{

//在該類中存放所有 form 的公共屬性

protected Integer id;

public Integer getId() {

   return id;

}

public void setId(Integer id) {

   this.id = id;

}

}

7.編寫 IDAO 接口和該接口的適配器 DAOAdapter,他們的基本結構如下:

public interface IDAO {

public Map create(BaseForm form) throws Exception;

public Map create(List list) throws Exception;

......

}

public abstract class DAOAdapter extends HibernateDaoSupport implements IDAO {

public Map create(BaseForm form) throws Exception {

   getHibernateTemplate().save(form);

   return null;

}

public Map create(List list) throws Exception {

   for(int i = 0; i < list.size(); i++)

   {

    BaseForm form = (BaseForm)list.get(i);

    getHibernateTemplate().save(form);

   }

   return null;

}

......

}

8.編寫 ICommand 接口和該接口的適配器 CommandAdapter,他們的基本結構如下:

public interface ICommand {

//注意在這裏老師是將 IDAO 接口中的方法聲明直接拷貝到這的

public Map create(BaseForm form) throws Exception;

public Map create(List list) throws Exception;

}

public abstract class CommandAdapter implements ICommand {

protected IDAO daoOne;

protected IDAO daoTwo;

public void setDaoOne(IDAO daoOne) {

   this.daoOne = daoOne;

}

public void setDaoTwo(IDAO daoTwo) {

   this.daoTwo = daoTwo;

}

}

在實際應用中肯定存在一個 command 中依賴多個 dao 的情況,有可能是2個,3個或者5個,但我們在 command 的適配器中一般

只定義 2個或3個 dao ,如果某個具體 command 類依賴的 dao 的數量超過適配器中定義的個數那麼自己在這個 command 類添加

所需的 dao ,然後自己去依賴注入

9.編寫具體的 dao 類去繼承 DAOAdapter 類,然後在編寫具體的 command 類去繼承 CommandAdapter 類

10.修改第 4 步中我們手動生成的對應於數據表的 javaBean 類,讓他們都去繼承 BaseForm 變成 FormBean,例如:

public class Books extends BaseForm {

......

}

11.在 struts-config.xml 文件中配置這些 FormBean

12.編寫基類BaseAction,並讓它去繼承Action,例如:

public class BaseAction extends Action {

protected ICommand command;

public ICommand getCommand() {

   return command;

}

public void setCommand(ICommand command) {

   this.command = command;

}

}

13.編寫具體的Action類繼承基類BaseAction,並在 struts-config.xml 文件中配置:

<action path="/login"

       name="loginForm"

       type="com.konglong.ssh.action.LoginAction" >

    ......

</action>

在這裏我們可以順便將創建 Action 對象的工作交由 spring 容器來做,配置內容如下:

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>

進行了上述處理後,<action...>元素中的 type 屬性可要可不要。

14.在 applicationContext_dao.xml 文件中配置具體的 dao 類,例如:

<bean id="bookDao" class="com.konglong.ssh.dao.BookTableDAO">

   <property name="sessionFactory">

    <ref bean="sessionFactory"/>

   </property>

</bean>

   在 applicationContext_command.xml 文件中配置具體的 command 類,例如:

<bean id="transactionManager"

   class="org.springframework.orm.hibernate3.HibernateTransactionManager">

   <property name="sessionFactory">

    <ref bean="sessionFactory" />

   </property>

</bean>

<bean id="proxyTemplate"

   class="org.springframework.transaction.interceptor.TransactionInterceptor">

   <property name="transactionManager">

      <ref bean="transactionManager" />

   </property>

   <property name="transactionAttributes">

    <props>

      <prop key="update*">PROPAGATION_REQUIRED</prop>     

      <prop key="save*">PROPAGATION_REQUIRED</prop>

    <prop key="delete*">PROPAGATION_REQUIRED</prop>

   <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>

   </props>

   </property>

</bean>

<bean

   class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

   <property name="interceptorNames">

    <list>

     <value>proxyTemplate</value>

    </list>

   </property>

   <property name="beanNames">

    <list>

     <value>loginCommand</value>

    </list>

   </property>

</bean>

<bean id="loginCommand" class="com.konglong.ssh.command.LoginCommand">

   <property name="daoOne">

    <ref bean="loginDao"/>

   </property>

   <property name="daoTwo">

    <ref bean="bookDao"/>

   </property>

</bean>

   在 applicationContext_action.xml 文件中配置具體的 action 類,例如:

<bean name="/login" class="com.konglong.ssh.action.LoginAction">

   <property name="command">

    <ref bean="loginCommand"/>

   </property>

</bean>

15.編寫 jsp 頁面,設置好提交路徑,跳轉路徑。

第二部分:Tiles 框架的配置

在 WEB-INF 上單擊右鍵-->選擇 “New”-->XML(Advanced Templates)-->指定文件名,例如:tiles_defs.xml,內容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">

<tiles-definitions>

   <definition name="tilesDefinition" path="/welcome/layout.jsp">

    <put name="header" value="/welcome/header.jsp"/>

    <put name="menu" value="/welcome/menu.jsp"/>

    <put name="content" value="/welcome/content.jsp"/>

    <put name="footer" value="/welcome/footer.jsp"/>

   </definition>

   <definition name="tilesAdminPage1" extends="tilesDefinition">

    <put name="menu" value="/admin/menu.jsp"/>

    <put name="content" value="/admin/page1.jsp"/>

   </definition>

   .........

</tiles-definitions>

然後在 struts-config.xml文件中將 tiles 框架作爲插件引入 struts 框架中:

<plug-in className="org.apache.struts.tiles.TilesPlugin">

   <set-property property="definitions-config"

      value="/WEB-INF/tiles-defs.xml"/>

</plug-in>

最後在 struts-config.xml文件中配置利用 tiles 框架組合的頁面以供使用:

<action path="/tilesDefinition"

    parameter="tilesDefinition"

    type="org.apache.struts.actions.ForwardAction">

</action>

<action path="/admin/tilesAdminPage1"

    parameter="tilesAdminPage1"

    type="org.apache.struts.actions.ForwardAction">

</action>

或者在 action 元素中將其配置成 Forward:

<action

         ......>

         <forward name="index" path="/index.jsp"></forward>

         <forward name="tilesAdminPage1" path="tilesAdminPage1"></forward>

         <forward name="tilesUserPage1" path="tilesUserPage1"></forward>

    </action>

注意在配置 tiles 頁面時,設置 path 屬性值時不要以 "/" 開頭否則報錯。

另附加:

ssh環境搭建

applicationContext.xml下配置:

    java:comp/env/jdbc/mldn

    <!-- 表示允許自動提交 -->
    <prop key="hibernate.connection.autocommit">true</prop>
    <!-- 顯示sql語句 -->
    <prop key="hibernate.show_sql">true</prop>

   <bean id="hibernateTemplate"
        class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>

<!-- 插入dao接口-->
<bean id="iuserdao" class="org.lxh.myzngt.dao.IUserDAO" abstract="true">
</bean>
<!-- 插入dao-->
<bean id="iuserdaoimpl" class="org.lxh.myzngt.dao.impl.IUserDAOImpl" parent="iuserdao">
        <property name="hibernateTemplate">
            <ref bean="hibernateTemplate" />
        </property>
</bean>

<bean name="/jsp/user"
        class="org.lxh.myzngt.struts.action.UserAction">
        <property name="iuserdao">
            <ref bean="iuserdaoimpl" />
        </property>
</bean>



web.xml下配置:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/classes/applicationContext.xml
        </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-config.xml下配置:

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>
    <message-resources parameter="org.lxh.myzngt.struts.ApplicationResources" />
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
    </plug-in>

TOMCAT配置:

       <Context path="/znt" docBase="E:\Workspace\javaProject\yzb\MyZNT\WebRoot" debug="5" reloadable="true" crossContext="true">
        <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_MysqlTest_log." suffix=".txt" timestamp="true"/>           
        <Resource name="jdbc/mldn" auth="Container" type="javax.sql.DataSource"/>
        <ResourceParams name="jdbc/mldn">
            <parameter>
                <name>factory</name>
                <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
            </parameter>
            <parameter>
                <name>maxActive</name>
                <value>100</value>
            </parameter>
            <parameter>
                <name>maxIdle</name>
                <value>30</value>
            </parameter>
            <parameter>
                <name>maxWait</name>
                <value>5000</value>
            </parameter>
            <parameter>
                <name>username</name>
                <value>root</value>
            </parameter>
            <parameter>
                <name>password</name>
                <value>elephant1234</value>
            </parameter>
            <parameter>
                <name>driverClassName</name>
                <value>org.gjt.mm.mysql.Driver</value>
            </parameter>
            <parameter>
                <name>url</name>
                <value>jdbc:mysql://localhost:3306/mldn</value>
            </parameter>
        </ResourceParams>
        </Context>


加過濾器:
package org.lxh.myzngt.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {
    private String charset = null;
    public void destroy() {
    }
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
        req.setCharacterEncoding(this.charset);
        chain.doFilter(req, resp);
    }
    public void init(FilterConfig arg0) throws ServletException {
        this.charset = arg0.getInitParameter("charset");
    }
}
<filter>
        <filter-name>encoding</filter-name>
        <filter-class>com.znt.fitler.EncodingFilter</filter-class>
        <init-param>
            <param-name>charset</param-name>
            <param-value>gbk</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</filter>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章