三大框架整合有很多种我只说一种

来源:互联网 发布:反对陈矩阵 编辑:程序博客网 时间:2024/04/30 03:26

==================== 开发环境 ====================
1. Eclipse + Aptana + SpringIde + mysql + tomcat

==================== 搭建 ssh 环境 ====================
1. 加入 struts.
 1). 导入 jar 包: struts-1.3.8/apps/struts-blank-1.3.8/WEB-INF/lib/*.jar, 额外导入 struts-1.3.8/lib/struts-extras-1.3.8.jar 包
 2). 加入 struts-config.xml, validator.xml 配置文件到 conf 目录下.
 3). 复制 struts-1.3.8/apps/struts-blank-1.3.8/WEB-INF/classes/MessageResources.properties 到 conf 目录下
 4). 在 web.xml 文件中加入如下内容:
 
 <!-- Standard Action Servlet Configuration -->
 <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/classes/struts-config.xml</param-value>
  </init-param>
  <load-on-startup>2</load-on-startup>
 </servlet>


 <!-- Standard Action Servlet Mapping -->
 <servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>
 
2. 加入 spring:
 1). 导入 jar 包:
  --> spring-framework-2.5.6.SEC01/dist/spring.jar: 核心
  --> spring-framework-2.5.6.SEC01/dist/modules/spring-webmvc-struts.jar: 集成 struts
  --> spring-framework-2.5.6.SEC01/lib/aspectj/*.jar: 基于接口面向切面
  --> spring-framework-2.5.6.SEC01/lib/cglib/*.jar: 没有接口面向切面
  --> spring-framework-2.5.6.SEC01/lib/jakarta-commons/commons-logging.jar: 日志
  --> ******: spring-framework-2.5.6.SEC01/lib/jakarta-commons/commons-logging.jar 和 struts 导入的 commons-logging-1.0.4.jar 冲突,
                                  删除版本较低的 -- commons-logging-1.0.4.jar.
 
 2). 加入 spring 的配置文件: 在 conf 目录下新建  applicationContext.xml 文件.
 3). 在 web.xml 文件中加入如下内容:
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/classes/applicationContext*.xml</param-value>
  </context-param>
  
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>  
  
 4). spring 集成 struts, 在 struts-config.xml 文件中添加如下内容:
  <controller>
    <set-property property="processorClass"
        value="org.springframework.web.struts.DelegatingRequestProcessor"/>
  </controller>                             
  
3. 加入 hibernate:
 1). 导入 jar 包:
  --> hibernate-distribution-3.3.2.GA/lib/required/*.jar
  --> /hibernate-distribution-3.3.2.GA/hibernate3.jar
  --> slf4j-1.5.8/slf4j-nop-1.5.8.jar
  --> ******: struts 导入的 antlr-2.7.2.jar 和 hibernate 导入的antlr-2.7.6.jar 冲突,
                                  删除版本较低的 -- antlr-2.7.2.jar
  
 2). spring 集成 hibernate 
  ①. 创建 applicationContext-hibernate.xml 配置文件. 在该配置文件中需要完成如下配置: 配置数据库连接池; 配置 hibernate; 配置 spring 的声明式事务
  
  ②. 配置数据库连接池:
   --> 导入 jar 包: c3p0-0.9.1.2/lib/c3p0-0.9.1.2.jar, mysql-connector-java-5.1.7/mysql-connector-java-5.1.7-bin.jar
   --> 把数据库连接池的基本信息(user, password, url, driver) 和 hibernate 的基本信息(dialect) 外置到一个属性文件中: applicationContext.properties
  
4. 在 web.xml 中加入 spring 提供的字符编码过滤器: 使用 org.springframework.web.filter.CharacterEncodingFilter 类.  
  
  
==================== 登录 ====================  
1. 把 jsp 放置到 WEB-INF/pages/ 目录下
2. struts 前端开发的两个基本原则:
 1). 尽可能的在一个模块使用一个 ActionForm 类. 因为服务器端的简单验证需要使用 struts 的 validator 验证框架, 所以需要使用
     org.apache.struts.validator.ValidatorForm 作为 form 的父类
 2). Action 的父类选用 org.apache.struts.actions.MappingDispatchAction. 若选用 org.apache.struts.actions.DispatchAction, 则多个请求只能对应一个
     action 节点, 这也意味着 多个请求只能使用一个 ActionForm, 进而多个请求只能使用一种验证规则, 但这在很多时候不能满足实际需要. 例如: 注册时要求 email
            不能为空, 但在登录时不需要使用 email 字段       
           
3. 登录要求:
 1). 前台验证
  ①: loginname 和 loginpassword 字段除去前后空格不能为空
  ②: loginname 和 loginpassword 字段除去前后空格, 不能少于 6 个字符
  ③: loginname 中不能包含特殊字符, 即以字母开头, 后边还可以包含数字和_  
  
  解决方案:
  ①. 因为前两条要求对于 loginname 字段和 loginpassword 字段时一样的, 所以一起完成
  ②. 第三条验证只针对于 loginname, 所以可以单独完成, 需要使用正则表达式: var reg = /^[a-zA-Z]/w+/w$/ig;
  
 2). 服务器端的简单验证, 由 struts 的 validator 框架完成, 要求同 1)
  使用 struts 的 validator 框架验证时, validator 框架不能自动的去除字段的前后空格. 解决方案:
  ①. 在要验证的字段的 set 方法中手工去除空格
    public void setLoginpassword(String loginpassword) {
     if(loginpassword != null)
      loginpassword = loginpassword.trim();
     this.loginpassword = loginpassword;
    }
    
  ②. 修改 struts validator 框架的源代码: 在本地提供 FieldChecks 类, 修改 validateMinLength 方法.
  ③. 在页面上实现 loginname, loginpassword 错误提示的分开显示, 可以通过 打印
      request.getAttribute("org.apache.struts.action.ERROR")
   得知 validator 框架在 ActionMessages 中的错误信息的 key 为当前字段的名字     
     
   
 3). 若上述两种验证都通过, 则请求到达 Action 的 execute 方法, 查询数据库, 匹配用户的输入信息, 返回页面
  ①: 用户名不存在,  提示信息为: "用户名不存在"
  ②: 用户名存在, 但用户名和密码不匹配, 提示信息为: "用户名和密码不匹配"
  ③: 匹配, 返回请求页面 
  
  解决方案: 使用 struts 提供的声明式异常处理机制完成页面的转发