myEclipse整合SSH步骤(基于操作和配置文件

一、准备工作:

  1. JDK -> jdk1.6.0_17 安装(环境变量配置):

  JAVA_HOME = C:\ jdk1.6.0_17;

  PATH = %JAVA_HOME%\bin; %JAVA_HOME%\jre\bin;

  CLASSPATH = .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar ;

  在Cmd -> java –version 查看JDK的版本是否与刚配好的版本一致。

  2. apache-tomcat-6.0.24:解压即可;

  3. myEclipse 8.5:安装(略):

  最高可提供:

  框架:Java EE 5

  Spring 3.0

  Hibernate 3.3

  Struts 2.1

  4. DB:以MySQL 5.1为例。

  二、打开myEclipse先配置好Tomcat服务器和JDK 操作好下图所示:

  1. Window -> Preferences -> Java: Installed JREs

  在这里可以不使用myEclipse自带的JDK,得Add…自己安装好的JDK:

  001jdk.JPG

  2. Window -> Preferences -> MyEclipse -> Servers: Tomcat 6.x

  在这里配置Tomcat服务器,我们这里是选择6.x。Browse…自己将Tomcat解压放的目

  录,再选择Enable,将它启用,然后Apply应用一下就Ok了。

  00102.JPG

  3. Window -> Preferences: Tomcat 6.x -> JDK 选择前面我们配好的JDK版本。

  00103.JPG

  4. 现在我们来启动Tomcat服务器,打开内部的浏览器测试Tomcat有没有配置成功,

  如下图所示:则表示Tomcat服务器配置成功。

  s.JPG

  5. Window -> Preferences -> Java -> Build Path: User Libraries 在这里配置用户自己

  要用jar包的Libraries。<说明> 这一步可以到后面需要添加自己的jar包时,再做也可以的。

  00104.JPG

  6. Window -> Preferences -> Java Build Path:在这里将自己上面配置好的Libraries添加到

  编译请求的路径里。<说明> 这一步可以到后面需要添加自己的jar包时,再做也可以的。

  00105.JPG

  三、创建好Web项目,最先Add Spring如下图所示:

  1. 选择项目名,右击 ->MyEclipse ->Add Spring Capabilities…

  000.JPG

  2. 勾选好Spring3.0 的五个核心Libraries,注意将它们Copy到/WebRoot/WEB-INF/lib目

  录下,再点击Next > :

  002.JPG

  003.JPG

  3. 完成后,项目中将会出现Spring添加的东西,有时候可能会出现不名的错误,现在

  暂时不需管它(推荐刷新项目),有些原因是因为Spring的Xml配置文件里引入的东西有冲突。

  004.JPG

  四、创建数据源,切换到MyEclipse Database Explorer 窗口,如下图所示:

  005.JPG

  1. 在左边DB Browser的窗口里,右击选择New…新建一个数据源,出如下图所示的窗口:

  根据自己项目所建的数据库来选择配置,引入连接驱动JARs包。

  006.JPG

  2. 配好后,点击Test Driver来测试配置连接是否成功。下图所示则表示成功了,再进行下一

  步操作。

  007.JPG

  3. Schema Details选择连接映射的数据库,没必要将全部的数据库连接进来。

  008.JPG

  4. 配置好以后,然后选择它将它Open connection…打开看一看,能否将数据连接过来:

  009.JPG

  五、再将窗口切换回来,现在添加Hibernate 3.3

  1. 选择项目名,右击 ->MyEclipse ->Add Hibernate Capabilities…,这里可以选择支持

  Annotations注解方式来进行SSH的集成。注意将Library Copy到/WebRoot/WEB-INF/lib目录下:

  010.JPG

  2. 在对话框中选择Spring configuration file,表示我们希望将Hibernate托管给Spring

  进行管理,这是将Hibernate与Spring进行整合的基础。然后点击Next:

  011.JPG

  3. 在出现的对话框中选择Existing Spring configuration file。因为我们已经添加了Spring

  的配置文件,所以这里选择的是已存在的配置文件。MyEclipse会自动找到存在的那个文件。

  然后在SessionFactory ID中输入Hibernate的SessionFactory在Spring配置文件中的Bean ID

  的名字,这里我们输入sessionFactory即可。然后点击Next:

  012.JPG 4. 在出现的对话框中的Bean Id里面输入数据源在Spring中的Bean ID的名字,这里我

  们输入dataSource。然后在DB Driver里面选择我们刚刚配置好的ssh,MyEclipse会将其余

  的信息自动填写到表格里面。然后点击Next

  013.JPG

  5. 在出现的对话框中取消Create SessionFactory class。点击Finish即可。

  014.JPG

  六、最后再Add Struts Capabilities: Struts2.1

  1. 选择Struts 2.x之后配置窗口会变成下图所示,导入Struts2.1的Jars不可选入到

  /WebRoot/WEB-INF/lib目录下。(以后我们再讲怎自己手动Add Struts整合)

  2. 下一步再根据自己的情况另勾选Struts集成的应用包,Finish 一下就好了。

  002.JPG

  第二种: 自己手动添加Struts整合:找到自己收录的Struts 2.x架包,手动将Jars Ctrl+C

  再Ctrl+V到/WebRoot/WEB-INF/lib目录下, 再将主要的xml配置文件struts.xml拷

  贝到~/src/目录下即可。

  到这里,我们整个项目的框架就算初步成形了,下面我们可以到MyEclipse Java Enterprise

  视图下查看一下整个项目的结构,再进行后续操作。如下图所示:

  七、Hibernate Reverse Engineering反向生成Pojo类,自动生成映射关系:

  1. 再进入到MyEclipse Database Explorer视图,全选中所有的表,右击选择Hibernate

  Reverse Engineering…操作,如下图所示:

  003.JPG

  2. Java src folder: 选项Browse…到自己新建好的包下面,我这里是放到Model(或者

  DTO)层,如下图所示:

  004.JPG

  3. 再选择*.hbm.xml和POJO映射,注意我们不需选择:□Create abstract class,再Next:

  005.JPG

  4. 下一步再选择Id Generator的生成策略,我们选native,再点Next>,如下图所示:

  006.JPG

  5. 接下来,默认选项,直接点击Finish完成这项操作,如下图所示:

  007.JPG

  6. 最后回到MyEclipse Java Enterprise视图,查看是否已成功生成映射文件,如下图所示:

  008.JPG

  到这里我们就将SSH整合的所有操作都做好了,接下来就是进行编码工作,修改相应的

  XML配置文件,最后到完成项目,发布web项目, 启动web服务器,运行测试项目。祝君

  马到成功!~

  ************************************************** *****************************

  八、添加在Web.xml文件里的配置:

  1. Spring和Struts集成的配置,加载Spring容器:(Struts.x的方式: servlet、plug-in):

  <!-- 配置FilterDispatcher过滤器,以便加Spring容器 -->

  <filter>

  <filter-name>FilterDispatcher</filter-name>

  <filter-class>

  org.apache.struts2.dispatcher.FilterDispatcher

  </filter-class>

  </filter>

  <filter-mapping>

  <filter-name>FilterDispatcher</filter-name>

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

  </filter-mapping>

  <!-- 配置Spring容器:指定Spring文件的路径,让spring知道事务管理的bean所在-->

  <context-param>

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

  <!-- /WEB-INF/applicationContext-*.xml,classpath*:appli cationContext-*.xml

  -->

  <param-value>/WEB-INF/applicationContext.xml</param-v alue>

  </context-param>

  <!-- 在Struts2感知下,Spring容器的加载 -->

  <listener>

  <listener-class>

  org.springframework.web.context.ContextLoaderListe ner

  </listener-class>

  </listener>

  2. 添加连接池的配置,这里以Proxool为例:

  <!-- 添加读连接池配置文件的servlet节点 -->

  <servlet>

  <servlet-name>proxoolServletConfigurator</servlet-nam e>

  <servlet-class>

  org.logicalcobwebs.proxool.configuration.ServletCo nfigurator

  </servlet-class> <init-param> <param-name>xmlFile</param-name> <param-value>/WEB-INF/ProxoolConf.xml</param-value> </init-param> <!-- 由于proxool要先加载,所以启动优先级要比spring高,否则在spring加载

  时会报错 -->

  <load-on-startup>0</load-on-startup>

  </servlet>

  3. 添加事务配置Hibernate使用Session的关闭与开启由spring 来管理,针对Hivernate

  懒加载;把一个Hibernate Session和一次完整的请求过程对应的线程相绑定:

  <!--配置 OpenSessionInViewFilter或OpenSessionInViewInterceptor -->

  <filter>

  <filter-name>hibernateFilter</filter-name>

  <filter-class>

  org.springframework.orm.hibernate3.support.OpenSes sionInViewFilter

  </filter-class>

  <!-- singleSession默认为true,若设为false则等于没用OpenSessionInView -->

  <init-param>

  <param-name>singleSession</param-name>

  <param-value>true</param-value>

  <init-param>

  </filter>

  <filter-mapping>

  <filter-name>hibernateFilter</filter-name>

  <url-pattern>*.do(/*)</url-pattern>

  </filter-mapping>

  4. 添加字符编码过滤器:

  <!-- Character Encoding 配置 -->

  <filter>

  <filter-name>Spring character encoding filter</filter-name>

  <filter-class>

  org.springframework.web.filter.CharacterEncodingFi lter

  </filter-class>

  <init-param>

  <param-name>encoding</param-name>

  <param-value>GBK</param-value>

  </init-param>

  </filter>

  <filter-mapping>

  <filter-name>Spring character encoding filter</filter-name>

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

  </filter-mapping>

  5. 引入DWR框架,做Ajax应用:

  <!-- 引入DWR框架 -->

  <servlet>

  <servlet-name>DWRServlet</servlet-name>

  <servlet-class>org.directwebremoting.servlet.DwrServ let

  </servlet-class>

  <init-param>

  <param-name>debug</param-name>

  <param-value>true</param-value>

  </init-param>

  <load-on-startup>2</load-on-startup>

  </servlet>

  <servlet-mapping>

  <servlet-name>DWRServlet</servlet-name>

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

  </servlet-mapping>

  另外附加2.连接池配置 :DBCP、月付美国空间Proxool、C3P0、JNDI方式

  1. 导入连接池Jar包:Copy到~/WEB-INF/lib目录下;

  修改好连接池的配置文件并将它Copy到~/WEB-INF/目录下。

  2. 在applicationContext.xml中改dataSource节点(后续会讲)。

  九、添加在Spring的 applicationContext.xml文件里的配置:

  1. 连接池dataSource的配置:

  <!-- 连接池 dataSource的配置 -->

  <bean id="dataSource"

  class="org.springframework.jdbc.datasource.DriverM anagerDataSource">

  <property name="driverClassName" value="org.logicalcobwebs.proxool.ProxoolDriver"> </property> <property name="url" value="proxool.DBPool"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSes sionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </prop> <!-- Show SQL语句设置 -->

  <prop key="hibernate.show_sql">true</prop>

  <prop key="hibernate.format_sql">true</prop>

  </props>

  </property>

  <property name="mappingResources">

  <list>

  <value>com/.../DTO/SysUser.hbm.xml</value>

  <value>com/.../DTO/SysRole.hbm.xml</value>

  <value>com/.../DTO/SysRight.hbm.xml</value>

  ... ...

  </list>

  </property>

  </bean>

  2. 添加处理业务逻辑的Beans,可以是DAOImpl、_Interceptor、导入xml文件等:

  <!—- 处理整个用户业务操作的DAO一个Bean -->

  <bean id="userDAO" class="com.Java7Group4CRM.DAOImp.SysUserDAOImp">

  <property name="sessionFactory" ref="sessionFactory"></property>

  </bean>

  <!-- 处理用户登录的Action -->

  <bean id="loginAction"

  class="com.***.Actions.LoginAction" scope="prototype">

  <property name="userDAo" ref="userDAO"></property>

  </bean>

  <!-- 验证用户权限的全局拦截器 -->

  <bean id="action2ActionInterceptor"

  class="com.***.interceptor.Action2ActionIntercepto r">

  </bean>

  3. 配置事务管理.相当于Spring AOP面向切面的配置:

  A. 配置spring提供的事务管理的bean: HibernateTransactionManager对象.

  <!-- spring提供的事务管理的bean -->

  <bean id="transactionManager"

  class="org.springframework.orm.hibernate3.Hibernat eTransactionManager">

  <property name="sessionFactory" ref="sessionFactory"></property>

  </bean>

  B. 配置spring提供的将事务管理作为切面的作用于目标对象的代理bean:

  TransactionProxyFactoryBean对象.

  <!-- spring提供的 将事务管理 作为切面 作用于目标对象的代理 bean -->

  <bean id="proxyObj"

  class="org.springframework.transaction.interceptor .TransactionProxyFactoryBean" abstract="true"> <!—这是一个抽象类,只供类(target对象)继承 -->

  <property name="transactionManager" ref="transactionManager" />

  <property name="transactionAttributes">

  <!--下面是配置出管理事务对应的(Dao的)方法 -->

  <props>

  <prop key="up*">PROPAGATION_REQUIRED</prop>

  </props>

  </property>

  </bean>

  C.现在可以配置target目标对象(Dao).[这里与普通的Dao配置不同]

  <bean id="accountDao" parent="proxyObj"><!—这里指明其父类为以上代理bean -->

  <property name="target">

  <!--下面用匿名bean用作它本身的属性作为目标对象 -->

  <bean class="com.***.daoimp.AccountDaoImp">

  <property name="sessionFactory" ref="sessionFactory"></property>

  </bean>

  </property>

  </bean>

  <!-- 导入其他模块的配置文件 -->

  <import resource="applicationContext_basd.xml"/>

  十、添加在Struts2.x中struts.xml文件的配置:

  1. 在主struts.xml配置文件里,可以引入其他模块的struts_*.xml文件和处理乱码的配置:

  <!-- 导入其他模块的Actions配置文件 -->

  <include file="struts_right.xml"/> <!-- 处理编码乱码的问题 -->

  <constant name="struts.i18n.encoding" value="gbk"/>

  2. 模块化的struts_*.xml配置文件:添加Spring代理:

  <!-- 作国际化用的全局的资源文件的配置 -->

  <!--<constant name="struts.custom.i18n.resources" value="resourceFile"

  />-->

  <!--通过url来匹配action是由spring来生成action,

  须在struts.xml中这里配置一个相当于Spring的代理

  添加StrutsSpringObjectFactory所在的架包struts2-spring-plugin.jar

  到”~/WEB-INF/lib”下-->

  <constant name="struts.objectFactory"

  value="org.apache.struts2.spring.StrutsSpringObjec tFactory" />

  <!-- CRM~数据字典模块:分模块以<package>标签分开 -->

  <package name="CRM_Basd" extends="struts-default">

  <interceptors>

  <!-- 功能模块的拦截器的声明 -->

  <interceptor name="isAction2Action"

  class="action2ActionInterceptor"/>

  <interceptor name="rightInterceptor" class="rightInterceptor"/>

  <!-- 声明一个作局部的权限拦截器椎栈 -->

  <interceptor-stack name="rightStack">

  <interceptor-ref name="rightInterceptor" />

  <interceptor-ref name="defaultStack" />

  </interceptor-stack>

  <!-- 作全局拦截器椎栈区分Action跳转到Action -->

  <interceptor-stack name="globalStack">

  <interceptor-ref name="isAction2Action" />

  <interceptor-ref name="defaultStack" />

  </interceptor-stack>

  </interceptors>

  <!-- 应用全局的拦截器椎栈 -->

  <default-interceptor-ref name="globalStack" />

  <global-results>

  <result name="none">/html/rightError.jsp</result>

  </global-results>

  <!-- ========\\\\ 数据字典业务处理的Action ////======== -->

  <!-- 加载数据字典条目BasDict并分页使用的Action -->

  <action name="loadBasDictAction" class="basDictAction"

  method="loadBasDict">

  <!-- 加入局部权限拦截 -->

  <interceptor-ref name="rightStack"></interceptor-ref>

  <result name="success">/html/~basd/dict.jsp</result>

  <result name="input">/html/~basd/dict.jsp</result>

  </action>

  <action name="basDictLinkAction1" class="basDictAction"

  method="link1Pages">

  <!-- 未加入局部拦截器,全局拦截器将起效 -->

  <result name="success">/html/~basd/dict.jsp</result>

  <result name="input">/html/~basd/dict.jsp</result>

  </action>

  </package>

  <!-- CRM~数据字典模块结束,下面可接其他模快的<package> -->

  十一、组织编写代码:

  1. DAO接口实现层对象的核心代码:

  //成员化HibernateTemplate对象:

  private HibernateTemplate hibernateTemplate;

  //提供注入HibernateTemplate对象的setSessionFactory()方法

  public void setSessionFactory(SessionFactory sessionFactory) {

  this.hibernateTemplate = new HibernateTemplate(sessionFactory);

  } //用户登录方法

  public List loginUser(final SysUser user) throws Exception{

  List loginUser = (List) hibernateTemplate.execute(new

  HibernateCallback(){

  public Object doInHibernate(Session session)

  throws HibernateException, SQLException {

  Query q = session.createQuery("from SysUser u where u.usrName=www.03723.com?

  and u.usrPassword=?");

  q.setParameter(0, user.getUsrName());

  q.setParameter(1, user.getUsrPassword());

  return q.list();

  }});

  return loginUser;

  }

  /**@用户登录后:获取TA的角色*/

  public SysRole getUserRole(SysUser loginUser) throws Exception{

  SysRole role = null;

  String hql = "from SysRole sr where

  sr.roleId="+loginUser.getSysRole().getRoleId().toS tring().trim();

  role = (SysRole)hibernateTemplate.find(hql).get(0);

  return role;

  }

  2. Action的核心代码:

  public class LoginAction extends ActionSupport implements ServletRequestAware {

  //IoC注入一个Request和DAO

  private HttpServletRequest request;

  private SysUserDAOImp userDAo;

  public void setServletRequest(HttpServletRequest request) {

  this.request = request;

  }

  public void setUserDAo(SysUserDAOImp userDAo) {

  this.userDAo = userDAo;

  }

  private String usrName; //表单字段

  private String usrPassword;

  ... ...

  public String login() throws Exception {

  System.out.println("usrName: "+usrName);

  Map session = null;

  SysUser user = new SysUser();

  user.setUsrName(usrName);

  user.setUsrPassword(usrPassword);

  List list = userDAo.loginUser(user);

  //排除验证完成后未查到符合的数据行时,调用get(0)索引溢出异常

  if(list.size()!=0){

  // 使用作用域对象容器ActionContext

  SysUser loginUser = (SysUser)list.get(0);

  session = ActionContext.getContext().getSession();

  session.put("logId", loginUser.getUsrId());

  session.put("logName", loginUser.getUsrName());

  /**登录成功以后,再获取用户的角色*/

  SysRole loginRole = userDAo.getUserRole(loginUser);

  String roleName = loginRole.getRoleName();

  session.put("roleName", roleName);

  /**得到用户登录的角色以后,再获取用户所拥有的权限集合(操作节点集合) * 并将它保存到Session作用域中,以做权限校验*/

  List rights = userDAo.getUserRight(loginRole);

  session.put("rightList", rights);

  System.out.println("logId:" + loginUser.getUsrId());

  return SUCCESS;

  }else{

  return INPUT;

  }

  }

  public void validateLogin() { //表单验证

  if(this.usrName==null||"".equals(this.usrName)){

  addFieldError("usrName", "用户名不能为空");

  }

  if(usrPassword==null||"".equals(usrPassword)){

  addFieldError("usrPassword", "登录密码不能为空");

  }

  }

  //作用域对象传值:

  request.setAttribute("productPageDB", pageDB);

  request.getSession(false).getAttribute("logId")

  Map session = ActionContext.getContext().getSession();

  session.put("logId", loginUser.getUsrId());

  3. JSP页面代码:

  A. 引入CSS和JS:

  <link href="/***/html/css/style.css" rel="stylesheet" type="text/css">

  <script src="/***/html/script/common.js"></script>

  B. Form标签: <form action="loginAction.action" method="post" name="loginForm">

  C. Struts2标签:

  引入标签库:<%@ taglib uri="/struts-tags" prefix="s" %>

  代码变化: <s:actionerror/> <s:form action="loginAction"></s:form>

  D. JSTL标签:

  引入JSTL库: <%@ taglib uri="java.sun/jsp/jstl/core" prefix="c" %>

  引入Bean: <%@ page import="com.***.Pagination.PaginationSupport" %>

  遍历标签:<table class="data_list_table">

  <tr><th>编号</th><th>名称</th>...<th>备注</th></tr>

  <% PaginationSupport pageDB = null;

  List productList = null;

  if(request.getAttribute("productPageDB")!=null){

  pageDB =

  (PaginationSupport)request.getAttribute("productPa geDB");

  pageContext.setAttribute("pageDB",pageDB);

  productList = pageDB.getItems();

  System.out.println("productList.size():"+productLi st.size());

  pageContext.setAttribute("productsList",productLis t);

  }

  if(productList.size()!=0){%>

  <c:forEach var="product" items="${productsList}">

  <tr><td class="list_data_number">${product.prodId}</td>

  <td class="list_data_ltext">${product.prodName}</td>...

  <td class="list_data_ltext">${product.prodMemo}</td> </tr>

  </c:forEach>

  <%}%>

  <tr><th colspan="100" class="pager">分页操作按钮</th>

  </tr>

  </table>

转自http://hi.baidu.com/edoseqc032/blog/item/83563531fd8b084035a80ff3.html

你可能感兴趣的:(MyEclipse)