今天,我们开始了佟老师的教育办公系统的旅程:我做了简单的笔记:
1. 搭建 SSH 环境
1). 加入 Struts:
①. 加入 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
②. 加入配置文件: 注意: 不能直接复制 struts-1.3.8/apps/struts-blank-1.3.8/WEB-INF/web.xml 文件到 WEB-INF 下, 因为这样会导致 el 不可用
2). 加入 Hibernate:
①. 加入 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 相比版本较低, 应该删除.
③. 配置文件: 和 Spring 集成, 使用 Spring 来替代 Hibernate.cfg.xml 文件
3). 加入 Spring:
①. 加入 jar 包: /spring-framework-2.5.6.SEC01/dist/spring.jar, spring-framework-2.5.6.SEC01/dist/modules/spring-webmvc-struts.jar,
/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 新导入的 commons-logging.jar 和 Struts 中的 commons-logging-1.0.4.jar 相比版本较高, 应把 commons-logging-1.0.4.jar 删除
③. 配置文件:
*在 web 应用中加入 spring
*集成 struts:
*集成 hibernate:
>加入 C3P0 数据源:
>配置 SessionFactory 对象
4). 加入 Hibernate 的二级缓存:
①. 在 applicationContext.xml 文件的 sessionFactory 中加入相关配置.
②. 到 jar 文件
③. 加入 ehcache.xml
④. 在每一个 hbm 文件中配置使用缓存的策略
5). 配置 spring 提供的字符编码过滤器
①. 参考 spring API 的 org.springframework.web.filter.CharacterEncodingFilter
②. 在 web.xml 中添加过滤器
6). 在 spring 的配置文件中配置 spring 的声明式事务
2. 复制的文件夹:
1). common: 存放公共 jsp 文件
2). css: 存放项目 css 文件
3). images: 存放项目使用的图图片
4). script: 存放 jQuery 及其插件
3. 登录:
1). ActionForm: 在一个模块中, 尽可能的使用一个 ActionForm 类. 因为需要使用 struts 的 validator 验证框架,
所以 FormBean 继承 org.apache.struts.validator.ValidatorForm
2). 若使用 DispatchAction, 则意味着多个请求对应一个 <action> 节点的配置, 即多个请求对应一个 ActionForm Bean, 即多个请求使用一种验证规则,
则在很多时候是不合适的. 例如: 员工模块的登录和注册使用的可能就是不同的验证规则. 使用 MappingDispatchAction
3). 前台 js 验证
①: loginname 和 loginpassword 字段除去前后空格不能为空
②: loginname 和 loginpassword 字段除去前后空格, 不能少于 6 个字符
③: loginname 中不能包含特殊字符, 即以字母开头, 后边还可以包含数字和_
①, ②解决方法: 使用 jQuery 的 $.trim() 方法和 length 属性.
③解决方案: 使用正则表达式验证 "以字母开头, 后边还可以包含数字和_ ":
var reg = /^[a-zA-Z]/w+/w$/gi;
使用 js 正则表达式的 test() 方法判断是否符合该正则表达式
另外的, 使用 js 正则去除前后空格: var reg = /^/s*|/s*/g;
str = str.replace(reg, "");
4). 使用 struts 的 validation 框架进行服务器端简单验证, 验证要求同 3).
①. 在 struts-config.xml 文件中配置 struts 的 validation 框架
②. 通过在页面使用 <%= request.getAttribute("org.apache.struts.action.ERROR") %>, 得知 validation 框架验证失败时放入 ActionMessages 中的 key,
该 key 即为需要验证的字段的名字
③. 但是使用 validation 验证不能自动的去除前后空格!!
*在 ActionForm 中对字段进行赋值时, 事先去除前后空格
*修改 struts 源代码: 在本地的 src 目录下新建 org.apache.struts.validator 包, 在 org.apache.struts.validator 包下新建 FieldChecks 类,
修改该类的 validateMinLength 方法, 在其中添加如下代码:
if(value != null)
value = value.trim();
try {
PropertyUtils.setProperty(bean, field.getProperty(), value);
} catch (Exception e1) {
e1.printStackTrace();
}
5). 若上述两种验证都通过, 则请求到达 Action 的方法, 查询数据库, 匹配用户的输入信息, 返回页面
①: 用户名不存在, 提示信息为: "用户名不存在"
②: 用户名存在, 但用户名和密码不匹配, 提示信息为: "用户名和密码不匹配"
③: 匹配, 返回请求页面
方案:
使用 struts 的声明式异常来转发页面和显示提示信息.
解决:
由 EmployeeService 的方法抛出异常, Action 不进行处理, 而由 struts 框架根据当前的 action 节点配置来进行相应的处理:
如果出现对应的异常, 会利用当前 excpeption 配置节点的 key 生成对应的 ActionMessage 对象, 再放入 ActionMessages 中,
把页面派发到 input 对应的页面中, 在前台页面利用 <html:errors property="key"> 进行显示
今天学的知识就是这些了,希望明天有更好的状态学习。