1 使用mysql ,检查是否安装mysql
2 启动mysql
3 myeclipse 连接mysql,配置信息以及驱动文件导入
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