手动配置SSH框架

来源:互联网 发布:dns 端口号 编辑:程序博客网 时间:2024/06/10 23:47
注:本文使用版本:struts-2.3.4、spring-3.2.1、hibernate-4.1.4

一、框架的下载
1、Struts2:http://struts.apache.org/download 
2、Spring:http://www.springsource.org/download/community
3、Hibernate:http://sourceforge.net/projects/hibernate/files/hibernate4/

二、创建项目,添加jar包
1、创建java web项目testSSH.
2、添加struts包:
aopalliance-1.0.jar、freemarker-2.3.19.jar,ognl-3.0.5.jar,struts2-core-2.3.4.jar,struts2-spring-plugin-2.3.4.jar,xwork-core-2.3.4.jar,commons-fileupload-1.2.2.jar、commons-logging-api-1.1.jar、commons-io-2.0.1.jar、commons-lang-2.4.jar、commons-lang3-3.1.jar、commons-logging-api-1.1.jar。
3、添加spring包:
spring-aop-3.2.1.RELEASE.jar、spring-aspects-3.2.1.RELEASE.jar、spring-beans-3.2.1.RELEASE.jar、spring-context-3.2.1.RELEASE.jar、spring-context-support-3.2.1.RELEASE.jar、spring-core-3.2.1.RELEASE.jar、spring-expression-3.2.1.RELEASE.jar、spring-jdbc-3.2.1.RELEASE.jar、spring-orm-3.2.1.RELEASE.jar、spring-test-3.2.1.RELEASE.jar、spring-tx-3.2.1.RELEASE.jar、spring-web-3.2.1.RELEASE.jar。
4、添加hibernate包:
antlr-2.7.7.jar、dom4j-1.6.1.jar、hibernate-commons-annotations-4.0.1.Final.jar、hibernate-core-4.1.4.Final.jar、hibernate-jpa-2.0-api-1.0.1.Final.jar、javassist-3.15.0-GA.jar、jboss-logging-3.1.0.GA.jar、jboss-transaction-api_1.1_spec-1.0.0.Final.jar、ehcache-core-2.4.3.jar、hibernate-ehcache-4.1.4.Final.jar、slf4j-api-1.6.1.jar、c3p0-0.9.1.jar
5、添加其他包:
ojdbc14.jar 【下载地址 http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html 】aspectjweaver.jar 【下载地址 http://search.maven.org/remotecontent?filepath=org/aspectj/aspectjweaver/1.6.12/aspectjweaver-1.6.12.jar 】
三、配置struts
1、配置struts核心过滤器。
打开web.xml,配置struts核心过滤器和过滤器映射。
web.xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" 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_3_0.xsd"><display-name></display-name><!-- 定义Struts 2的核心控制器 --> <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>*.action</url-pattern></filter-mapping><listener><listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class></listener><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list></web-app>
2、建立BaseAction。
新建包com.hsinghsu.testSSH.action,在其中建立类BaseAction,继承ActionSupport类。
BaseAction.java文件代码如下:
package com.hsinghsu.testSSH.action;import com.opensymphony.xwork2.ActionSupport;public class BaseAction  extends ActionSupport{/** *  */private static final long serialVersionUID = 4565394360208096613L;}
3、编写测试struts的Action。
在包com.hsinghsu.testSSH.action中建立LoginAction类,继承BaseAction,作为简单的struts测试。
LoginAction.java文件代码如下:
package com.hsinghsu.testSSH.action;public class LoginAction extends BaseAction {/** *  */private static final long serialVersionUID = -6144396976094110475L;public String execute() throws Exception {          return "success";      }  }
4、配置action。
在struts.xml文件中,添加对LoginAction的配置。
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.3.dtd"><struts>    <constant name="struts.objectFactory" value="spring" />    <constant name="struts.i18n.encoding" value="UTF-8" />    <constant name="struts.i18n.reload" value="false" />    <constant name="struts.configuration.xml.reload" value="false" />    <constant name="struts.custom.i18n.resources" value="globalMessages" />    <constant name="struts.action.extension" value="action,," />    <constant name="struts.convention.package.locators.basePackage"              value="com.hsinghsu.testSSH.action" />    <constant name="struts.convention.result.path" value="/" />    <constant name="struts.serve.static" value="true" />    <constant name="struts.serve.static.browserCache" value="false" /><package name="com.hsinghsu.testSSH.action.test" extends="struts-default">    <action name="login" class="com.hsinghsu.testSSH.action.LoginAction">    <result name="success">/WEB-INF/jsp/welcome.jsp</result>    </action>    </package>    </struts>
5、建立测试jsp页面
新建测试jsp页面welcome.jsp。
welcome.jsp文件代码如下:
<%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>IWelcome</title></head><body>Welcome HsingHsu</body></html>
6、配置spring
打开applicationContext.xml文件,配置spring,添加action bean。
applicationContext.xml文件代码如下:
<?xml version="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"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd       "> </beans>
7、配置Spring监听器
打开web.xml,添加Spring监听器。
web.xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" 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_3_0.xsd"><display-name></display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!-- ssh 中文过滤 --><filter><filter-name>characterEncoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncoding</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 定义Struts 2的核心控制器 --> <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>*.action</url-pattern></filter-mapping><!-- 对Spring 容器进行实例化 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><listener><listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class></listener><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list></web-app>
8、配置tomcat并启动,在浏览器中输入http://localhost:8686/testSSH/login.action 
   则页面会显示Welcome HsingHsu。

四、配置hibernate

1、建立数据库与数据表
本文采用oracle数据库,建立T_TEST_USER表,新建列id,name,pwd。插入一条数据,如id:1,name:hsing,pwd:hsu。

2、创建持久层实体类。
创建包com.hsinghsu.testSSH.model,创建User类,添加3个私有成员,对应数据表中3个属性,并一定要添加set和get方法。
User.java文件代码如下:
package com.hsinghsu.testSSH.model;public class User {private Long id;      private String name;      private String pwd;    public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}      }
3、添加映射文件
在com.hsinghsu.testSSH.model包下创建User.hbm.xml,作为User与数据表的映射文件。
User.hbm.xml文件代码如下:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.hsinghsu.testSSH.model.User" table="T_TEST_USER">        <id name="id" type="java.lang.Long">            <column name="ID" />            <generator class="native" />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" length="50">            </column>        </property>        <property name="pwd" type="java.lang.String">            <column name="PWD" length="50">            </column>        </property>    </class></hibernate-mapping>
4、配置spring,添加hibernate支持。
修改applicationContext.xml文件,添加hibernate支持。
applicationContext.xml文件代码如下:
<?xml version="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"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd       ">       <bean id="placeholderConfig"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location"><value>classpath:jdbc.oracle.properties</value></property></bean><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><property name="jdbcUrl" value="${hibernate.connection.url}" /><property name="driverClass" value="${hibernate.connection.driver_class}" /><property name="user" value="${hibernate.connection.username}" /><property name="password" value="${hibernate.connection.password}" /><property name="acquireIncrement" value="${c3p0.acquireIncrement}" /><property name="initialPoolSize" value="${c3p0.initialPoolSize}" /><property name="minPoolSize" value="${c3p0.minPoolSize}" /><property name="maxPoolSize" value="${c3p0.maxPoolSize}" /><property name="maxStatements" value="${c3p0.maxStatements}" /><property name="numHelperThreads" value="${c3p0.numHelperThreads}" /><property name="maxIdleTime" value="${c3p0.maxIdleTime}" /></bean> <bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource"><ref local="dataSource" /></property>        <property name="mappingResources">            <list>                <value>com/hsinghsu/testSSH/model/User.hbm.xml</value>            </list>        </property>          <property name="hibernateProperties"><props><prop key="hibernate.dialect">${hibernate.dialect}</prop><prop key="hibernate.show_sql">${hibernate.show_sql}</prop><prop key="hibernate.generate_statistics">true</prop><prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop><prop key="hibernate.jdbc.batch_versioned_data">${hibernate.jdbc.batch_versioned_data}</prop><prop key="hibernate.batch_size">${hibernate.jdbc.batch_size}</prop><prop key="hibernate.connection.release_mode">auto</prop><prop key="hibernate.autoReconnect">true</prop><prop key="hibernate.use_sql_comments">false</prop><prop key="hibernate.cglib.use_reflection_optimizer">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop><prop key="hibernate.format_sql">${hibernate.format_sql}</prop></props></property></bean><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"p:sessionFactory-ref="sessionFactory" /><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="save*" propagation="REQUIRED" /><tx:method name="add*" propagation="REQUIRED" /><tx:method name="create*" propagation="REQUIRED" /><tx:method name="insert*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="merge*" propagation="REQUIRED" /><tx:method name="del*" propagation="REQUIRED" /><tx:method name="remove*" propagation="REQUIRED" /><tx:method name="put*" propagation="REQUIRED" /><tx:method name="use*" propagation="REQUIRED" /><!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到 --><tx:method name="get*" propagation="REQUIRED" read-only="true" /><tx:method name="count*" propagation="REQUIRED" read-only="true" /><tx:method name="find*" propagation="REQUIRED" read-only="true" /><tx:method name="list*" propagation="REQUIRED" read-only="true" /><tx:method name="*" read-only="true" /></tx:attributes></tx:advice><aop:config proxy-target-class="true"><aop:advisorpointcut="(execution(* com.hsinghsu.testSSH.dao.impl.*.*(..))) OR execution(* com.hsinghsu.testSSH.dao.impl.*.*(..))"advice-ref="txAdvice" /></aop:config> <context:component-scan base-package="com.hsinghsu.testSSH"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /></context:component-scan></beans>
5、配置hibernate数据库连接等配置。
新建jdbc.oracle.properties文件。
jdbc.oracle.properties文件代码如下:
hibernate.query.substitutions yes 'Y', no 'N'hibernate.show_sql truehibernate.dialect  org.hibernate.dialect.Oracle10gDialecthibernate.connection.driver_class oracle.jdbc.driver.OracleDriverhibernate.connection.url jdbc:oracle:thin:@127.0.0.1:1521:ora11ghibernate.connection.username testadmhibernate.connection.password testadmset the maximum depth of the outer join fetch treehibernate.connection.pool_size 1hibernate.proxool.pool_alias pool1hibernate.format_sql falsehibernate.use_sql_comments truehibernate.max_fetch_depth 1hibernate.jdbc.batch_versioned_data truehibernate.jdbc.batch_size 28hibernate.jdbc.use_streams_for_binary truehibernate.testsql=select count(*) from dualhibernate.active = 8hibernate.minidle = 8hibernate.maxidle = 8hibernate.maxwait = -1hibernate.checkAfterUsed=truec3p0.acquireIncrement=3c3p0.idleConnectionTextPeriod=900c3p0.minPoolSize=2c3p0.maxPoolSize=50c3p0.maxStatements=100c3p0.numHelperThreads=10c3p0.maxIdleTime=600c3p0.initialPoolSize=3
五、编写java代码
1、编写DAO接口
新建包com.hsinghsu.testSSH.dao,创建接口UserDao。
UserDao.java文件代码如下:
package com.hsinghsu.testSSH.dao;import com.hsinghsu.testSSH.model.User;public interface UserDao {public User getUserByName(String name); }
2、编写DAO实现
新建包com.hsinghsu.testSSH.dao.impl,创建实现类UserDaoImpl。
UserDaoImpl.java文件代码如下:
package com.hsinghsu.testSSH.dao.impl;import java.util.ArrayList;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.criterion.Restrictions;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import com.hsinghsu.testSSH.dao.UserDao;import com.hsinghsu.testSSH.model.User;@Repository(value = "userDao")public class UserDaoImpl implements UserDao {@Autowiredprivate SessionFactory sessionFactory;public User getUserByName(String name){Session session = sessionFactory.getCurrentSession();List<User> list = new ArrayList<User>(); //通过Hibernate的Criteria查询  Criteria criteria = session.createCriteria(User.class);  if (!(null == name && "".equals(name))) {  criteria.add(Restrictions.eq("name", name));  }  list = criteria.list();      if(list != null && list.size() > 0)     {        return list.get(0);      }    return null;  }}
3、编写SERVICE接口
新建包com.hsinghsu.testSSH.service,创建接口UserService。
UserService.java文件代码如下:
package com.hsinghsu.testSSH.service;public interface UserService {public boolean login(String name, String password);}
4、编写SERVICE实现
新建包com.hsinghsu.testSSH.service.impl,创建类UserServiceImpl。
UserServiceImpl.java文件代码如下:
package com.hsinghsu.testSSH.service.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.hsinghsu.testSSH.dao.UserDao;import com.hsinghsu.testSSH.model.User;import com.hsinghsu.testSSH.service.UserService;@Service(value = "userService")public class UserServiceImpl implements UserService{ @Autowired private UserDao userDao;    public boolean login(String name, String password)  {       User user = userDao.getUserByName(name);            if(user!=null)     {         if(password.equals(user.getPwd()))         {             return true;           }     }     return false;   }   }
5、修改action类
编辑修改LoginAction类。
LoginAction.java文件代码如下:
package com.hsinghsu.testSSH.action;import org.springframework.beans.factory.annotation.Autowired;import com.hsinghsu.testSSH.service.UserService;public class LoginAction extends BaseAction {/** *  */private static final long serialVersionUID = -6144396976094110475L;@Autowiredprivate UserService userService; private String username;  private String password;public String execute() throws Exception {  System.out.println("username:"+username+" password:"+password);if(userService.login(username,password))  {            return "success";  }        return "error";      }public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}  }
6、新建用户登录页面。
添加login.jsp。
login.jsp文件代码如下:
<%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Insert title here</title></head><body><form action="login.action" method="post">          Name:<input type="text" name="username"/><br/>          Password:<input type="password" name="password"/><br/>          <input type="submit" value="Submit"/>       </form></body></html>
7、修改welcome.jsp页面。
welcome.jsp文件代码如下:
<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %>  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>IWelcome</title></head><body>Welcome <s:property value="username"/></body></html>
8、修改struts.xml配置文件
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.3.dtd"><struts>    <constant name="struts.objectFactory" value="spring" />    <constant name="struts.i18n.encoding" value="UTF-8" />    <constant name="struts.i18n.reload" value="false" />    <constant name="struts.configuration.xml.reload" value="false" />    <constant name="struts.custom.i18n.resources" value="globalMessages" />    <constant name="struts.action.extension" value="action,," />    <constant name="struts.convention.package.locators.basePackage"              value="com.hsinghsu.testSSH.action" />    <constant name="struts.convention.result.path" value="/" />    <constant name="struts.serve.static" value="true" />    <constant name="struts.serve.static.browserCache" value="false" /><package name="com.hsinghsu.testSSH.action.test" extends="struts-default">    <action name="loginform">              <result name="success">                  /WEB-INF/jsp/login.jsp              </result>          </action>    <action name="login" class="com.hsinghsu.testSSH.action.LoginAction">              <result name="success">                  /WEB-INF/jsp/welcome.jsp              </result>              <result name="error">                  /WEB-INF/jsp/login.jsp              </result>          </action>      </package>    </struts>
9、运行tomcat,在浏览器中输入http://localhost:8686/testSSH/loginform.action 会显示登录页面,如果成功会显示welcome+UserName。失败则会继续要求登录。


注:i.文件结构为:/src/main/resources,src/main/java,并将其添加到build path中。【Java Build Path - Add Folder】
ii./src/main/resources下文件有:struts.xml、applicationContext.xml、jdbc.oracle.properties
src/main/java下包结构为:com.hsinghsu.testSSH.model、com.hsinghsu.testSSH.dao、com.hsinghsu.testSSH.dao.impl、com.hsinghsu.testSSH.service、com.hsinghsu.testSSH.service.impl、com.hsinghsu.testSSH.action。
iii.修改web的输出目录,Java Build Path - Default output folder:testSSH/WebContent/WEB-INF/classes。
iv.添加jar包时将jar包放在WebContent/WEB-INF/lib文件夹下。



原创粉丝点击