A. SSH框架配置问题
虽然说你已经加了包,但报错是缺少ContextLoaderListener类。
所以 给你一个官方网站 跟着上面的操作,应该不会出错。
http://struts.apache.org/2.x/docs/spring-plugin.html
B. JAVA SSH框架搭建流程
首先,明确spring,struts,hibernate在环境中各自的作用。
struts:
用来响应用户的action,对应到相应的类进行处理。需要struts对应的包。
hibernate:
用来把实体类对应到数据库。提供增删改查的基本操作实现。需要hibernate对应的包以及mysql的jdbc驱动包。
spring:
管理struts:在xml配置文件中为struts的action进行值注入。
管理hibernate:在xml配置文件中配置hibernate的配置信息(dataSource,sessionFactory),即不需要原来的hibernate的xml文件。为hibernate的操作注入sessionfactory属性值。
需要提供spring对应的包,除此以外,还需要提供一个整合spring与struts的包:truts2-spring-plugin-2.0.11.1.jar
下面就搭建步骤进行详细说明:
1、新建一个web project,导入包,需要的包放在文件夹sshlib中。
2、修改web.xml的配置信息,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="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 ">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 下面的listener,是spring提供的,它会在创建时自动查找WEB-INF下的applicationContext.xml文件 ,从而创建spring容器-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 下面的配置作用是:在MyEclipse中,系统会自动到WEB-INF下寻找 applicationContext.xml文件,而系统
会自动将applicationContext.xml放置到WEB-INF下的classes下,所以会产生找不到applicationContext.xml的错误,需要指明applicationContext.xml
的放置位置。这就是下面的信息作用。在Eclipse中也许不需要此配置信息。-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value>
</context-param>
<!-- 下面的配置信息,用来配置说明使用struts过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<!--
下面的配置信息用来说明:程序中运行的action放置在哪个包下面,对于list.action的请求,它会自动在这个包下面寻找ListAction.class的类
如果没有这句话,那么所有的action请求只能在struts.xml中进行配置。
-->
<init-param>
<param-name>actionPackages</param-name>
<param-value>
com.action
</param-value>
</init-param>
</filter>
<!--
下面的配置表示对于所有请求都交给struts来处理。
-->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3、接下来用来配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd ">
<struts>
<!-- 指定Web应用的默认编码集。该属性对于处理中文请求参数非常有用,对于获取中文请求参数值,应该将该属性值设置为GBK或者GB2312 当设置该参数为GBK时,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<!-- 定义拦截器 -->
<interceptor name="crudInterceptor"
class="com.action.CrudInterceptor" />
<interceptor-stack name="appStack">
<interceptor-ref name="crudInterceptor" />
<!-- 下面一行自带的拦截器必须加上,否则出错 -->
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 使用默认拦截器配置Action都需要拦截器堆栈
即所有struts请求都自动先交给拦截器处理。关于拦截器的具体规则在拦截器对应类(com.action.CrudInterceptor)中进行了解释。
-->
<default-interceptor-ref name="appStack"></default-interceptor-ref>
</package>
</struts>
4、接下来配置applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans "
xmlns:aop="http://www.springframework.org/schema/aop "
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.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">
<!-- 数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/user" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<!-- sessionFactory配置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>com/ssh/User.hbm.xml</value>
</list>
</property>
<!-- 定义sessionFactory的属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQL5InnoDBDialect
</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<!-- hibernate的类名,属性名和数据库之间的对应关系的自定义 com.ynstudio.tools.LocalNamingStrategy -->
<bean id="namingStrategy"
class="org.hibernate.cfg.ImprovedNamingStrategy">
</bean>
<!-- 定义DAO的bean -->
<bean id="userDao"
class="com.ssh.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--
下面的代码用来向Action类注入属性值
-->
<bean id="crudAction" class="com.action.CrudAction">
<property name="userDao" ref="userDao"></property>
</bean>
</beans>
5、上述配置文件完成后,就开始业务逻辑部分。
首先完成hibernate的curd操作部分内容。
设计一个User实体类。包含数据库中User表的字段。
新建一个User.hbm.xml文件,实现实体类与数据库的关联。内容如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">
<hibernate-mapping>
<class name="com.ssh.User" table="user">
<id name="id" column="id">
<generator class="increment" />
</id>
<property name="username" column="username" />
<property name="password" column="password" />
<property name="birthday" column="birthday" />
<property name="email" column="email" />
</class>
</hibernate-mapping>
接下来需要实现操作。
设计一个类继承了HibernateDaoSupport类。关于HibernateDaoSupport类,请参考相关文档。
6、完成hibernate的设计后,接下来设计struts的拦截器和struts的action。
struts的拦截器:
package com.action;
import java.lang.reflect.Method;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* 这个类的是拦截器。
* 对于如下URL:
* http://xxxxx:xxxx//xxx/hello.action?method:list
* actionInvocation.invoke()方法会自动调用名称了HelloAction类的list方法。
* 在action中根据该方法的返回值决定页面显示或跳转位置。
* result值除了可以再action类中定义,还可以在struts.xml中配置。
* 配置时可采用如下语句:
* <action name="hello" class="crudAction">
* <result name="list">/list.jsp</result>
* <result name="modify">/modify.jsp</result>
* </action>
* 此处需要格外注意的是:class属性的值,此值是applicationContext.xml中的id。
* 该bean中注入了action类中属性userDao的值。
* 所以,如果需要使用struts.xml中的action配置,需要使用该id,否则,系统不会给其注入值,最终导致空指针异常。
* @author HeXiaoXing
*
*/
public class CrudInterceptor extends AbstractInterceptor{
public String intercept(ActionInvocation actionInvocation) throws Exception {
/*
*下面代码演示了获取请求的类名与方法名的一半方式,但本例中不涉及。 全部注释掉。
*/
// Object action = actionInvocation.getAction();
// Class actionClass = action.getClass();
// String actionClassName = actionClass.getSimpleName();
// String methodName = actionInvocation.getProxy().getMethod();
return actionInvocation.invoke();
}
}
struts的action,关于此action的全部内容,请参考源程序CrudAction。
7、完成了类设计后,就是页面的设计,关于页面的设计,不再一一叙述,给粗源文件,请自行参考。
需要提出的是,在转向时,url的格式必须是method:方法名。这是约定的,不可以写成method=方法名。
C. ssh部署到weblogic中时web.xml怎么配置
在web.xml同目录下创建weblogic.xml
内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<container-descriptor>
//优先加载项目lib中的jar包
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
<context-root>/</context-root>
</weblogic-web-app>
D. java web ssh框架下的applicationContext.xml的配置文件,求解释
<bean id="systemDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<!--<value>jdbc:mysql://119.188.6.228:3306/xmad?useUnicode=true&characterEncoding=utf-8</value>-->
<value>jdbc:mysql://localhost:3306/xmad?useUnicode=true&characterEncoding=utf-8</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<!--<value>x5m2a1d</value>-->
<value>123456</value>
</property>
<!--连接池中保留的最小连接数。 -->
<property name="minPoolSize">
<value>10</value>
</property>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize">
<value>50</value>
</property>
<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize">
<value>10</value>
</property>
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime">
<value>300</value>
</property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement">
<value>5</value>
</property>
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
<property name="maxStatements">
<value>0</value>
</property>
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod">
<value>60</value>
</property>
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts">
<value>3</value>
</property>
<!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
获取连接失败后该数据源将申明已断开并永久关闭。Default: false -->
<property name="breakAfterAcquireFailure">
<value>true</value>
</property>
<property name="automaticTestTable">
<value>Test</value>
</property>
<!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。Default: false -->
<property name="testConnectionOnCheckout">
<value>false</value>
</property>
</bean>
E. 我在用SSH2开发时,在web.xml里配置时
首先要说明一下Open Session in View的作用,就是允许在每次的整个request的过程中使用同一个hibernate session,可以在这个request任
何时期lazy loading数据。
如果是singleSession=false的话,就不会在每次的整个request的过程中使用同一个hibernate session,而是每个数据访问都会产生各自的seesion,等于没有Open Session in View.
OpenSessionInViewFilter默认是不会对session 进行flush的,并且flush mode 是 never
代码:
protected Session getSession(SessionFactory sessionFactory) throws {
Session session = SessionFactoryUtils.getSession(sessionFactory, true);
session.setFlushMode(FlushMode.NEVER);
return session;
}
看getSession的方式就知道,把flush mode 设为FlushMode.NEVER,这样就算是commit的时候也不会session flush,
如果想在完成request过程中更新数据的话, 那就需要先把flush model设为FlushMode.AUTO,再在更新完数据后flush.
.
OpenSessionInView默认的FlushMode为
代码:
FlushMode.NEVER
F. java里我用hss框架,谁能和我解释下web.xml里面的配置呢filter什么的啥意思
java里的ssh框架,web.xml主要是struct2框架的配置文件,里面可以配置filter过滤器,可以做一些请求的拦截,比如防止用户不从登陆界面进入主界面。还有一些提交的参数校验
G. 如何搭建SSH框架,myeclipse搭建SSH框架详解
搭建struts应用
2.1 引入需要的jar包
commons-fileupload-1.2.1.jar 文件上传
commons-logging-1.0.4.jar 日志包
freemarker-2.3.13.jar Sturts2的所有UI标记
ognl-2.6.11.jar OGNL表达式相关
struts2-core-2.1.6.jar Struts2的核心包
xwork-2.1.2.jar XWork2 库。Struts2核心包,做为底层存在
2.2 加入配置文件 struts.xml, struts.properties
2.3 将struts加入到web.xml的配置中,将请求交由struts来处理
2.4 编写Action类,无需继承任何类和实现任何接口
2.5 在struts.xml中加入对action的配置
搭建spring的框架
2.1 加入jar包
SPRING_HOME/dist/spring.jar
SPRING_HOME/lib/log4j/log4j.jar
SPRING_HOME/jakarta-commons/commons-logging.jar
2.2 加入配置文件
SPRING_HOME/samples/jpetstore/war/WEB-INF/log4j.properties
SPRING_HOME/samples/jpetstore/war/WEB-INF/applicationContext.xml
2.3 将写好的类加入到spring的管理(配置到xml中)
2.4 通过来加载spring的配置文件生成BeanFactory工厂对象,通过工厂对象来创建所需要的bean
hibernate框架搭建
1.1 加入jar包
HIBERNATE_HOME/hibernate3.jar -- hibernate核心包
HIBERNATE_HOME/lib/required/*.jar
(在hibernate官网下载的包中却少一个必须包slf4j-nop-1.5.2.jar,需要自己在网上下载)
数据库的jar包
1.2 hibernate.cfg.xml配置文件
HIBERNATE_HOME/project/etc/hibernate.cfg.xml
对应属性在HIBERNATE_HOME/project/etc/hibernate.properties中寻找
hibernate.connection.url --- 访问数据库的url地址
hibernate.connection.username --- 访问数据库的用户名
hibernate.connection.password --- 访问数据库的密码
hibernate.connection.driver_calss --- 访问数据库所需的驱动包
hibernate.dialect --- 访问数据库的方言
1.3 Xxxx.hbm.xml 映射文件
HIBERNATE_HOME/project/tutorials/eg/src/main/java/org/hibernate/auction/Xxxx.hbm.xml
将该文件以需要映射的类的类名.hbm.xml命名放在跟映射类同包中
H. 在ssh框架中web.xml怎么配置hibernate4
不需要配置hibernate4 只需要配置Struts 和Spring就好啦 hibernate只需要在Spring中配置就行啦
I. IDEA中怎样配置SSH框架(具体点,最好图文并茂)
声明:以下方法集成SSH,绝对简单易懂,别看字多,但是操作起来非常快,代码写得很少,熟练点也就5到10分钟左右。
1.new一个web项目,new完后,去找myeclipse的数据源,新建一个数据源,写上数据源名称,连接数据库的url,账户密码,并添加连接数据库的jar包,保存,并且测试一下。2.右击项目名,找到下面的Myeclipse,鼠标放上去,会出来一另一个列表,找到add struts Capab,点击,选择 struts2.1,选择/*,点击next,这时候开始添加jar包,第一个struts core Libra核心包自动点上了,不管,再下去找到一个struts 2 Spring Libra包,钩上。然后完成。3.然后根据第二步,找到add spring Capab,选择spring2.5 , 勾选前三个包,然后再去下面找一个 spring2.5 web Libra,钩选,然后在下面的JAR Library Installation 下面选择第二个单选按钮 Copy.....,点next, 再点完成。4.再根据第二部,找到add Hibernate Capab,选择hibernate3.1,勾选下面第1,和第2个jar包。然后在下面的JAR Library Installation 下面选择第二个单选按钮 Copy。。。,点next,依旧是点第二个单选按钮即spring config..,点next,继续点第二个单选按钮即Existing....,点next,这时候进入选择数据源,找到DB Driver 下拉框,选择你刚才自己新建的数据源。选择好后,会自动填充所有的连接数据库信息。点next,进入创建sessionfacorty,找到第一个文本框,java package,点右边的new,写上包名com..hib.util。点击完成。5.这时候SSH集成已经完成了一大半。第四步点完成后,只要上面的步骤正确完成,这时候在你的工程里面就会出来一个applicationContext,xml文件,而且绝对是报错的。放心。接下来点开这个文件,找到报错的那一行,这里我用简单的方法教你解决报错。报错的一行是class="org.apache.commons.dbcp.BasicDataSource">,把引号里面的话全部删掉,在引号里面写上driver然后Alt+\感知,找到第6个是以 jdbc.datasource结尾的,点这个。然后自动生成class="org.springframework.jdbc.datasource.DriverManagerDataSource">。这样就不会报错了。6.接下来去找到项目的WebRot文件夹下面的WEB-INFI下面的web.xml 文件,自己写上 <context-param>
<param-name>
<context-param>
<param-name>
contextConfigLocation
</param-name>
<param-value>
classpath:applicationContext.xmls
</param-value>
</context-param>
</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>这段话,注:<>尖括号的都是感知出来的,不用自己手写,但是contextConfigLocation,和classpath:applicationContext.xml得自己写。然后在这段话后面加上,<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>这段话,同样尖括号的都是感知,这句话org.springframework.web.context.ContextLoaderListener
其实不用自己写,只要找到spring-web.jar包下面的这个包org.springframework.web.context加上点,再加上下面的ContextLoaderListener.class同时去掉点class即可。如果你找不到,就自己手写吧。OK.简单的SSH集成就完成了。
后面还有一些比如实体类的创建,数据访问层的实现类DaoImpl,以及里面的方法查询,数据库中的一张表的最基本的增删改和根据实体类中某个字段的查询方法都是可以自动生成的,只要改下类名和包名就可以了。这个以后有空再说吧。用我这个方法,不用去查API到里面拷贝代码,简单高效。10分钟内可以集成完毕。对于一张表而言,本人增删改查加分页40分钟就全部能写完。
下面我再简单说一下MVC的设计模式的所有包名类名。
数据访问层-到业务逻辑层-显示层这是MVC最基本的。先说数据访问层,通常以Dao结尾。第一个包叫做com.,下面的类是放数据访问层接口,比如你的实体类叫User,接口名就叫做UserDao.然后再一个包叫做com,.impl.这个包是放数据访问层的实现方法。下面的类名就可以叫做UserDaoImpl,这个类实现上面的UserDaoImpl接口。再说业务逻辑层,通常以service命名。也是第一个包叫做com.service,下面放的也是业务逻辑层的接口,UserService.再一个包就叫做com.service.impl,下面放的类名叫做UserServiceImpl,实现UserServiceImpl接口。再说控制层,就是通常Action。建个包名叫做com.web.action。下面就放action类,名字就叫做UserAction。这就是最基本MVC的命名了。不过记得要去struts.xml写一下action的配置信息。还有不懂的问我就是了。
J. SSH整合后,web.xml配置的问题导致无法读取页面一直404
地址错了
你把 classpath:applicationContext.xml换成/applicationContext.xml
不行的话就把这个xml文件建在 web-inf目录下
然后 classpath:applicationContext.xml换成/web-inf/applicationContext.xml