• SSH三大框架的基本整合以及常见错误的解决方法


    一、新建项目

      eclipse->file->new->other->Dynamic Web Project,project name为sshDemo

    二、下载jar包

    1、struts:http://struts.apache.org。一般下载最新版2.5即可,下载完成后解压,将lib下的struts2-spring-plugin.jar导入lib,将apps/struts2-blank.war中的所有jar导入项目中的lib。

    2、spring:http://repo.spring.io/release/org/springframework/spring。下载4.xx版本即可,记得下载带“RELEASE-dist”字样的而非“Resource”字样的。下载完成后解压,将libs下所有未带有source和javadoc的jar包导入lib

    3、hibernate:http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/h/project/hi/hibernate/

    或https://sourceforge.net/projects/hibernate/files/hibernate-orm/。一般下载3.6.10版本(hibernate3最高版本),解压后将lib/required、lib/bytecode/cglib、lib/jpa、lib/optional/c3p0和根目录的hibernate3.jar分别导入lib

    4、数据库driver包:这里只举例oracle的,cmd中输入sqlplus即可显示数据库版本号,然后根据数据库版本查找对应的driver包。http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

    三、文件配置

    1、web.xml,配置Struts2的Filter和spring的监听器

     1  <filter>
     2       <filter-name>strutsFilter</filter-name>
     3       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
     4   </filter>
     5   <filter-mapping>
     6       <filter-name>strutsFilter</filter-name>
     7       <url-pattern>/*</url-pattern>
     8   </filter-mapping>
     9   <listener>
    10       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    11   </listener>
    12   <context-param>
    13             <param-name>contextConfigLocation</param-name>
    14             <param-value>classpath:applicationContext.xml</param-value>
    15  </context-param>

    2、创建jdbc.properties文件,保存基本的数据连接信息,放在/WEB-INF根下

    jdbc.driverClassName=oracle.jdbc.OracleDriver
    jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
    jdbc.username=scott
    jdbc.password=scott123
    

      

    3、applicationContext.xml-配置spring配置文件,将其放在src根下

    <!-- 扫描properties文件 -->
        <context:property-placeholder location="WEB-INF/jdbc.properties"/>
        <context:annotation-config />
        <!-- 扫描@component注解文件 -->
        <context:component-scan base-package="cn.test.*"></context:component-scan>
        
        <!-- 配置dataSource,来获取connection,此处用的是c3p0连接池 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
            <property name="driverClass" value="${jdbc.driverClassName}"/>
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <property name="user" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            
            <property name="initialPoolSize" value="3"></property>
            <property name="minPoolSize" value="3"></property>
            <property name="maxPoolSize" value="5"></property>
            <property name="acquireIncrement" value="3"></property>
            <property name="maxIdleTime" value="1800"></property>
        </bean>
    
        
        <!-- 配置SessionFactory,用来获取session-->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource"></property>
            <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
        </bean>
        
        <!-- 配置以下内容实现注解事务管理 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
        <tx:annotation-driven transaction-manager="transactionManager"/>

    4、hibernate.xml,将其放在src根下

    <hibernate-configuration>
        <session-factory>
        <!--applicationContext.xml中已经配置了数据库连接的用户名密码等信息,此处配置数据库连接方言即可-->
            <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
             <mapping resource="cn/test/model/Student.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

       tip:关于方言可以使用ctrl+shift+t打开类型搜索界面,例如mysql数据库,输入*mysqldialect,然后选择对应版本的方言,记下起地址,填入即可。

    5、struts.xml,将其放在src根下

     
        <!-- 设置开发模式,重新加载国际化资源文件和配置文件 -->
        <constant name="struts.devMode" value="true" />
        <package name="studentPkg" namespace="/helloworld" extends="struts-default">
            <!--如果请求地址是sshdemo_delete,则调用studentAction中的delete方法,这叫动态调用;class中写的studentAction是spring管理的beanName-->
            <action name="sshdemo_*" class="studentAction" method="{1}">
                <result name="stulist">/student/stulist.jsp</result>
                <result name="updatepage">/student/updatepage.jsp</result>
                <result name="insertpage">/student/insertpage.jsp</result>
                <result name="fail">/fail.jsp</result>
                <result name="success">/success.jsp</result>
            </action>
        </package>

    四、代码上的使用

      1、创建model/bean类,需要创建该model/bean与数据库映射的.hbm.xml文件。如下,创建了Student类

    package cn.test.model;
    
    public class Student {
        private int id;
        private String name;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

        其映射文件和该类同名,放在同级路径,Student.hbm.xml如下:

    <hibernate-mapping>
            <class name="cn.test.model.Student" table="stutbl">
                <!--id列是主键列-->
                <id name="id">
                    <generator class="identity" /><!-- native or identity-->
                </id>    
                <property name="name" not-null="true"/>    
            </class>
     </hibernate-mapping>

        最后,打开hibernate.xml文件,将映射配置入hibernate.xml文件中

     <mapping resource="cn/test/model/Student.hbm.xml"/>

      2、将类交由spring容器管理,既然我前面配置了注解方式,那么我就使用注解方式来管理相关的类

        1)在StudentDaoImpl类(需要是implDao,接口dao不用)上配置bean注解@Repository("stuDao")以及事务注解@Transactional,并在类中动态获取sessionFactory对象,通过sessionFactory.getCurrentSession()来获取session

    @Transactional
    @Repository("stuDao") public class StudentDaoImpl implements StudentDao { @Resource private SessionFactory sessionFactory; @Override public void delete(int stuid) { Session session = sessionFactory.getCurrentSession(); session.delete(stuid); }

        2)在StudentService类上配置注解@Service("stuService")并在类中动态获取dao对象

    @Service("stuService")
    public class StudentService {
        
        @Resource
        private StudentDao stuDao;
            ...

        3)将所有的Action都加上注解@Component交由spring容器管理,并动态获取service对象,@Scope("prototype")表示该action是多例形态的。

    @Component("studentAction")
    @Scope("prototype")
    public class StudentAction  {
        private int id;
        private String name;
        
        @Resource
        private StudentService stuService;
        
        public int getId() {
            return id;
        }

    五、常见问题

    1)出现Could not open ServletContext resource[/WEB-INF/applicationContext.xml]
    解决:监听器配置问题,考虑是否拼写有错误

    2)出现java.lang.NoClassDefFoundError:Lorg/Hibernate/cache/CacheProvider
    解决:hibernate4中移除了CacheProvider这个类,使用低于4.0版本的Hibernate-jar包,或使用更高版本的spring-jar包

    3)弹窗detail:timeout waiting for tomcat
    解决:window->preference->server->server timeout delay设置为Longer

    4)出现:Could not determine type for:
    解决:hibernate映射文件.hbm.xml中字段type填写错误,类似java.lang.Integer为正确的写法

    5)出现java.lang.ClassNotFoundException: org.xxxx.xxx.xxx
    解决:这个最easy,缺少相应的jar包,直接百度org.xxx.xxx下载加上就行

    6)Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    解决:运行services.msc(或控制面板打开服务)->检查ORACLE相关服务是否开启->检查数据库连接字符串是否正确。参考:      http://blog.csdn.net/redarmy_chen/article/details/7025033

    8、No mapping found for dependency [type=java.lang.String
    解决:一般是拼写错误或者是jar包重复


    9、Caused by: Action class [studentAction] not found
    解决:struts-sping-plugin.jar未导入或拼写错误

    十、附上资源文件

     内有已经配置好的配置文件以及示例demo

     百度云: http://pan.baidu.com/s/1i4qOUlJ

     防和谐链接:http://pan.baidu.com/s/1i4qOUlJ

  • 相关阅读:
    51 nod 1181 质数中的质数(质数筛法)
    Just oj 2018 C语言程序设计竞赛(高级组)F:Star(结构体排序+最小生成树)
    欧拉函数+费马小定理拓展
    ZOJ 3785 What day is that day?(数论:费马小定理)
    Just oj 2018 C语言程序设计竞赛(高级组)H: CBT?
    树链剖分(入门学习)
    bitset用法
    链式前向星
    Nearest Common Ancestors(LCA板子)
    LCA(最近公共祖先)
  • 原文地址:https://www.cnblogs.com/2333/p/5275945.html
Copyright © 2020-2023  润新知