S2SH框架搭建与项目结构分析

1 使用mysql ,检查是否安装mysql

2 启动mysql

3 myeclipse 连接mysql,配置信息以及驱动文件导入

https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=monline_3_dg&wd=myeclipse%E4%B8%AD%E8%BF%9E%E6%8E%A5mysql%E6%95%B0%E6%8D%AE%E5%BA%93&oq=myeclipse%E4%B8%AD%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93&rsv_pq=fac5622100022aed&rsv_t=426bo3%2BmtTuvSeoFzKjCRuHdV7E715nQbp%2FU9vq%2FPA47HzWrAtxydakAM7xDVQ5iAKip&rsv_enter=1&inputT=1498&rsv_sug3=21&rsv_sug1=15&rsv_sug7=100&rsv_sug2=0&rsv_sug4=3039

 

 

HTTP Status404 - No result defined for action XXXX and result success 处理

 

http://stackoverflow.com/questions/17757947/struts-2-http-status-404-no-result-defined-for-action

 

 

 

http://blog.csdn.net/zhqingyun163/article/details/6394621

 

 

Unable to instantiate Action, loginAction,defined for 'login' in namespace

 

1

 

http://bbs.csdn.net/topics/380074729

 

 

 

 

java.lang.NoClassDefFoundError:org.hibernate.cfg.Configuration

 

 

1spring和her整合,确认spring jar包有导入,没有导入的话会提示类找不到。

2整合时不仅需要spring包,还需要配置文件相应的her包

3引入新的jar包时,需要从新部署项目,但重启tomcat没有。

 

 

 

http://wanglihu.iteye.com/blog/1897718

常见s2sh问题

 

 

 

type Exception report

message

description The server encountered aninternal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException

        com.sanqing.action.LoginAction.execute(LoginAction.java:42)

        sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)

 

 

问题可以看出是指使用了null对象的属性或方法

 

1 在java中定义的变量声明就是定义,而方法声明后还需要new,或者赋值

 

Private string str;  这里由于是变量,其实是string类型,与底层有关,声明就是定义

 

Private fuction fun;  这里只是声明了方法,并没有定义,所以还需要new或者赋值

User user = newUser();

 

 

    publicvoidsetUserService(UserService userService){

        this.userService=userService;

    }

 

第一种是new ,第二种是赋值,这里要注意了,这里是通过参数传递一个这样的方法遍历来赋值,那么这个参数必须有效。这是在s2sh中常见的一种形式,其原因是application.xml中定义了很多bean代理实例化方法,也就是注入的方式了,所以上面依然报null错误是因为没有配置application.xml

 

 

 

S2SH框架搭建与项目结构分析

 

相应的可以选择javaee版本,笔者使用默认的5.0

 

2struts2

添加struts2支持,同样可以选择相应的版本。

笔者选择相应的版本与配置文件中形式。

选择相应的lib包,其中core里面就包含了很多jar,而且core里面的不是项目都需要的。其他的lib,笔者也不清楚,不选择。

 

可见,core lib包里面我们不是所有的jar都需要,简单的支持需要一下几个包

⊃2;        Commons-logging-1.0.4.jar

⊃2;       Freemarker-2.3.13.jar

⊃2;       Ognl-2.6.11.jar

⊃2;       Struts2-core-2.1.6.jar

⊃2;       Xwork-2.1.2.jar

 

此时,我们需要在web.xml中为struts2配置相应的信息,指定struts的位置和作用。

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appversion="2.5"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 <display-name></display-name>

 <welcome-file-list>

   <welcome-file>index.jsp</welcome-file>

 </welcome-file-list>

 <filter>

    <filter-name>struts2</filter-name>

    <filter-class>

        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    </filter-class>

 </filter>

 <filter-mapping>

    <filter-name>struts2</filter-name>

    <url-pattern>/*</url-pattern>

 </filter-mapping></web-app>

 

这里不再解释web.xml配置说明。

 

 

2 hibernate

连接数据库的

 

指定hibernateSessionFactory文件的,这个是hibernate执行数据库操作的必须创建的文件,后面用spring后,那么spring为我们创建这个文件。

 

完成hibernate后,项目结构如上。

 

这里要实现hibernate框架,同样lib包时必须的,

导入最小jar包,即使用Hibernate3所必需的jar包。下载hibernate-distribution-3.3.1.GA解压后,必需jar包都在lib"required目录下。必需jar包如下:

⊃2;       hibernate3.jar-----------------------------核心类库

⊃2;       antlr-2.7.6.jar-----------------------------代码扫描器,用来翻译HQL语句

⊃2;       commons-collections-3.1.jar----------- Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大

⊃2;       dom4j-1.6.1.jar----------------------------是一个Java的XML API,类似于jdom,用来读写XML文件的

⊃2;       javassist-3.4.GA.jar----------------------- Javassist 字节码解释器

⊃2;       jta-1.1.jar------------------------------------标准的JTAAPI。

⊃2;       slf4j-api-1.5.2.jar

⊃2;       slf4j-nop-1.5.2.jar

 

Hibernate.cfg.xml配置

<?xmlversion='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configurationPUBLIC

         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->

<hibernate-configuration>

 

   <session-factory>

       <propertyname="dialect">org.hibernate.dialect.MySQLDialect</property>

       <property name="connection.url">jdbc:mysql://localhost:3306/test</property>

       <property name="connection.username">root</property>

       <property name="connection.password">myazi</property>

       <propertyname="connection.driver_class">com.mysql.jdbc.Driver</property>

       <propertyname="myeclipse.connection.profile">test</property>

   

   </session-factory>

 

</hibernate-configuration>

配置不再解释,需要注意是必须有链接数据库的驱动包

 

3 Spring

选择相应的版本,

添加spring后文件结构如上,错误的原因是

<?xmlversion="1.0" encoding="UTF-8"?>

<beans

    xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:p="http://www.springframework.org/schema/p"

    xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

 

 

    <beanid="sessionFactory"

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

        <propertyname="configLocation"

            value="classpath:hibernate.cfg.xml">

        </property>

    </bean></beans>

 

缺少spring.orm.hibernate3..的jar包,需要自己添加。添加后注意myeclpse需要保存才能不显示叉。

 

引入spring框架后需要修改web.xml文件

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appversion="2.5"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 <display-name></display-name>

 <welcome-file-list>

   <welcome-file>index.jsp</welcome-file>

 </welcome-file-list>

 <filter>

    <filter-name>struts2</filter-name>

    <filter-class>

        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    </filter-class>

 </filter>

 <filter-mapping>

    <filter-name>struts2</filter-name>

    <url-pattern>/*</url-pattern>

 </filter-mapping>

   <!--指定strust2的action交给spring-->

     <listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

   </listener>

   <!--指定application。xml的路径-->

   <context-param>

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

 <param-value>classpath*:applicationContext*.xml</param-value>

</context-param>

 

  </web-app>

 

 

由上步骤下来,部署服务器启动报如下错误

2016-3-10 15:08:07 org.apache.catalina.core.AprLifecycleListenerinit

信息:The Apache Tomcat Native library which allows optimal performance in productionenvironments was not found on the java.library.path:D:\myEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin;D:\myEclipse\Common\plugins\com.genuitec.eclipse.easie.tomcat.myeclipse_9.0.0.me201211011550\tomcat\bin

2016-3-10 15:08:07org.apache.coyote.http11.Http11Protocol init

信息:Initializing Coyote HTTP/1.1 on http-8080

2016-3-10 15:08:07org.apache.catalina.startup.Catalina load

信息:Initialization processed in 409 ms

2016-3-10 15:08:07org.apache.catalina.core.StandardService start

信息:Starting service Catalina

2016-3-10 15:08:07org.apache.catalina.core.StandardEngine start

信息:Starting Servlet Engine: Apache Tomcat/6.0.13

2016-3-10 15:08:08org.apache.catalina.core.StandardContext listenerStart

严重:Error configuring application listener of classorg.springframework.web.context.ContextLoaderListener

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    atorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)

    atorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)

    atorg.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3770)

    atorg.apache.catalina.core.StandardContext.start(StandardContext.java:4334)

    atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)

    atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)

    atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)

    atorg.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)

    atorg.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)

    atorg.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)

    atorg.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)

    atorg.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)

    atorg.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)

    atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)

    atorg.apache.catalina.core.StandardHost.start(StandardHost.java:719)

    atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

    atorg.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)

    atorg.apache.catalina.core.StandardService.start(StandardService.java:516)

    atorg.apache.catalina.core.StandardServer.start(StandardServer.java:710)

    atorg.apache.catalina.startup.Catalina.start(Catalina.java:566)

    atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)

    atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    atjava.lang.reflect.Method.invoke(Method.java:597)

    atorg.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)

    atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

2016-3-10 15:08:08org.apache.catalina.core.StandardContext listenerStart

严重:Skipped installing application listeners due to previous error(s)

2016-3-10 15:08:08org.apache.catalina.core.StandardContext start

严重:Error listenerStart

2016-3-10 15:08:08org.apache.catalina.core.StandardContext start

严重:Context [/hh] startup failed due to previous errors

2016-3-10 15:08:08org.apache.coyote.http11.Http11Protocol start

信息:Starting Coyote HTTP/1.1 on http-8080

2016-3-10 15:08:08org.apache.jk.common.ChannelSocket init

信息:JK: ajp13 listening on /0.0.0.0:8009

2016-3-10 15:08:08org.apache.jk.server.JkMain start

信息:Jk running ID=0 time=0/26  config=null

2016-3-10 15:08:08org.apache.catalina.startup.Catalina start

信息:Server startup in 1392 ms

 

缺少org.springframework.web.context.ContextLoaderListener的jar包在,这个在spring lib包里面,添加spring 包就行,注意一定要重新删除后部署才有用,只要是添加新的包,就要删除原来部署在服务器上的项目,重新部署启动。

 

 

好了终于部署完项目了,但是有没有发现部署这个项目下来不知道导入了多少包了,但是并不是之前导入的包我们都需要,所以这里我们一些必要的包进行说明下。

如下:

 

这里不再详细介绍,缺少相应的包,笔者犯的错误后面会说明。

 

2 搭建好S2SH框架后,我们还需要建立项目,项目的结构很重要,同样在搭建项目结构时也需要配置相应的东西。

Action 负责显示层的提交数据和现实数据。

Service 负责把action收集到的数据整理起来,并向后台申请相应的服务和后台处理完服务返回的结果交给action。

Dao 负责连接数据库,对service的请求做数据操作和把数据操作的结果返回给service。

Po 负责建立数据库的表和java变量的关系,建立关系配置由XXX.hbm.Xml配置。

Util 负责一些常用的功能函数的实现。

 

 

Action和jsp action和name对应,result必须的有,没有配置spring的话就class全路径,配置spring的话就与spring中bean的id一致。

 

Web.xml配置

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appversion="2.5"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 <display-name></display-name>

 <welcome-file-list>

   <welcome-file>index.jsp</welcome-file>

 </welcome-file-list>

 <filter>

    <filter-name>struts2</filter-name>

    <filter-class>

        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    </filter-class>

   

 </filter>

 <filter-mapping>

    <filter-name>struts2</filter-name>

    <url-pattern>/*</url-pattern>

 </filter-mapping>

  <!--指定strust2的action交给spring-->

     <listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

   </listener>

   <!--指定application。xml的路径-->

   <context-param>

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

 <param-value>classpath*:applicationContext*.xml</param-value>

</context-param>

 </web-app>

 

Strust.xml配置

<struts><!-- 根节点 -->

    <constantname="struts.i18n.encoding" value="utf-8"></constant>

    <packagename="struts2" extends="struts-default" namespace="/">

        <actionname="login" class="loginAction">

            <resultname="success" >user.jsp</result>

            <resultname="input">index.jsp</result>

            <resultname="admin">admin.jsp</result>

        </action>

       

       

        <actionname="register" class="registerAction">

            <resultname="success">/admin.jsp</result>

            <resultname="input">/user.jsp</result>

        </action>

       

       

        </package>

</struts>

 

 

Spring配置

 

<?xmlversion="1.0" encoding="UTF-8"?>

<beans

 

    xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:p="http://www.springframework.org/schema/p"

    xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

 

<!-- 定义数据源-->

    <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <propertyname="driverClassName">

            <value>com.mysql.jdbc.Driver</value><!--设置驱动类 -->

        </property>

        <propertyname="url">

            <value>jdbc:mysql://localhost:3306/oj</value><!--设置连接URL -->

        </property>

        <propertyname="username">

            <value>root</value>                     <!-- 数据库用户名-->

        </property>

        <propertyname="password">

            <value>myazi</value>                    <!-- 数据库密码-->

        </property>

    </bean>

   

        <!--定义SessionFactory -->

    <beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <propertyname="dataSource">            <!--数据源-->

            <refbean="dataSource"/>

        </property>

        <propertyname="hibernateProperties">   <!--Hibernate配置属性-->

            <props>

                <propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

                <propkey="hibernate.show_sql">false</prop>

            </props>

        </property>

        <propertyname="mappingResources">      <!--关系映射文件-->

            <list>

                <value>com/sanqing/po/Message.hbm.xml</value>

                <value>com/sanqing/po/Problem.hbm.xml</value>

                <value>com/sanqing/po/Reply.hbm.xml</value>

                <value>com/sanqing/po/Title.hbm.xml</value>

                <value>com/sanqing/po/User.hbm.xml</value>

            </list>

        </property>

    </bean>

   

    <!--定义HibernateTemplate -->

    <beanid="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate">

        <propertyname="sessionFactory">

            <refbean="sessionFactory"/>        <!--注入SessionFactory实例对象-->

        </property>

    </bean>

   

    <beanid="hibernateTransactionManager"

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

        <propertyname="sessionFactory">

            <refbean="sessionFactory"/>    <!--注入SessionFactory实例对象-->

        </property>

    </bean>

   

    <beanid="userDAOTarger" class="com.sanqing.dao.UserDAOImpl"><!--装配数据访问层-->

        <propertyname="hibernateTemplate">

            <refbean="hibernateTemplate"/> <!--注入HibernateTemplate -->

        </property>

    </bean>

   

    <beanid="userDAO"

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

        <propertyname="transactionManager">

            <refbean="hibernateTransactionManager"/><!-- 为事务代理bean注入事务管理器-->

        </property>

        <propertyname="transactionAttributes"><!-- 设置事务属性 -->

            <props>

            <!--所有的方法,采用required的事务策略 -->

            <propkey="*">PROPAGATION_REQUIRED</prop>

            </props>

        </property>

        <propertyname="target"><!--为事务代理bean设置目标bean -->

            <refbean="userDAOTarger"/>

        </property>

    </bean>

   

    <beanid="userService" class="com.sanqing.service.UserServiceImpl">

        <propertyname="userDAO" ref="userDAO"></property><!--注入DAO层-->

    </bean>

   

   

    <beanid="loginAction" class="com.sanqing.action.LoginAction"scope="prototype" autowire="byName">

        <propertyname="userService" ref="userService"></property><!--注入业务逻辑层-->

    </bean>

   

        <beanid="registerAction"class="com.sanqing.action.RegisterAction"scope="prototype">

       

    </bean>

   

    </beans>

   



http://blog.csdn.net/yaerfeng/article/details/27175679


http://wanglihu.iteye.com/blog/1897718

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值