itheima国家电力系统(10天)
这是一个 基于maven的SSH demo整合项目。
[TOC]
##day01 系统框架的搭建
- 按条件查找的DAO:
要先有BaseQuery、- 用HashMaP<String, Object>() -->buildWhere、
- LinkedHashMap<String, String>() -->buildOrderBy
##day02 运行监控
-
js特效(一):JS控制table数据过长
一个隐藏的 div
.innerHTML -
js特效(二):JS控制文本域或输入字符串的大小
引入一个 LimitedTextarea.js -
js定时器 设置每10分钟刷新一次
Window.onload=function(){
setTimeout('refresh10()',1000*60);
}
function refresh10(){
window.loaction.reload();
}
-
CKEditor+CKFinder文本编辑器
(CkFinder 文件上传) (*!BUG) -
文本编辑器 处理大数据 需进行截串存取
-
js特效(三):JS进度条
(实际是一个table、2个td td1.width每次+10px,td2.width-10px) setTimeout('',100); 0.1s执行一次 -
js特效(四):JS浮动框
-
js特效(五):highslideJs插件
##day03 数据字典 SystemDDL
- Hql投影查询
使用hql语句直接将投影查询的字段放置到对象中,例如
String hql = "SELECT DISTINCT new cn.itcast.elec.domain.ElecSystemDDL(o.keyword) FROM ElecSystemDDL o";
List<ElecSystemDDL> list = this.getHibernateTemplate().find(hql);
-
使用JQuery 进行表格的添加删除tr
-
添加数据类型的JS校验:
- Trim()!="";
- 新增数据类型 不能与已有的一致
- 新增数据类型的itemnames不能重复
-
c3p0连接池
还可将hibernate.cfg.xml完全整合到beans.xml中
VO 栈值对象
PO 持久态对象
Hibernate实体的四种状态:瞬时(VO)、托管(PO)、游离、销毁
-
数据字典 编辑页面那个Form2页面还是有问题!
只能删除第1个itemname 无法删除其他的,Debug了一下 发现jQuery.remove 方法无效 (*!BUG) -
? 当使用数据字典的时候,需要数据的转换,多了很多的sql语句(待优化!)(*!BUG)
打开子窗口 function.js/openWindow(sHref,strWidth,strHeight)
##day04 用户管理(【用户-用户文件】 一对多的操作)
-
jquery的ajax实现二级联动
-
jquery的ajax实现登录名的校验
鼠标失去焦点时 执行checkUser(this)方法:onblur="checkUser(this);" -
jquery对象校验上传的表单 ?(!BUG) 为什么不执行这句话了???
- 用户表单的保存:
- 跳转到 close.jsp
关闭子页面,并刷新父页面
- 跳转到 close.jsp
window.close();
-
文件上传
- 方案一:使用URL存放路径
-
struts2 文件上传
-
fileURL 是文件在服务器上的相对路径
-
/WEB-INF/page/system/error.jsp
errorReason: <s:fielderror></s:fielderror><br> <s:actionerror/><br>
-
改变struts2上次文件的大小
<constant name="struts.multipart.maxSize" value="20971520"></constant>
- 方案二:使用Blob字段 将数据直接存放在数据库中
-
用户编辑
- 表单回显 ${OGNL表达式}??(从栈顶 想读啥 直接写)
- 将userFile按上传时间降序排序:
在user.hbm.xml的userFile那一项 加个order-by="progressTime desc"属性即可
-
添加spring解决hibernate懒加载:
在web.xml的struts2过滤器前 openSessionInViewFilter 这样 一个servlet的生命周期 就可以延长至一个 request到response整个周期了。
延迟了session的关闭时间,,,容易造成*“假死”*现象(一个session未关闭,则另一个session链接就连不上了。) -
文件下载
- 方式一:javaweb 【InputStreame OutputStream】
- 输入流写入输出流: 一个文件从-1开始,-1结束???
for(int b=-1;(b=in.read())!=-1;){ out.write(b); }
-
内容的处理形式:
-
response.setHeader("Content-disposition","inline");
内联方式: 即直接打开 -
response.setHeader("Content-disposition","attachment;filename="+filename):
附件方式:
-
-
处理文件名中的中文
filename = newString(filename.getByte("gbk"), "iso8859-1");
- 方式二:struts2
直接将 InputStream 压入值栈顶 over.
- 方式一:javaweb 【InputStreame OutputStream】
-
用户删除
不仅要删除数据库中的, 还要把服务器上的userFiles.delete;
用户&用户文件-->级联删除: 在user.hbm.xml的userFile那一项 加个cascade="delete"属性 -
查看用户明细
- 在"userEdit.jsp"中加个viewflag属性,
然后 将查看用户页面中一些不需要显示的信息 将其viewflag - Action.edit中 获得viewflag VO对象 并将其转化为PO对象
- 即 实现了 编辑用户 和查看用户页面的通用
- 在"userEdit.jsp"中加个viewflag属性,
11.使用md5的密码加密,处理用户的密码
MD5keyBean.java是个好东西!
##day05角色管理(权限分配)(多对多的操作)
-
-
角色-权限 多对多关系
角色是维护方 -
用户-角色 多对一的关系
用户是维护方 ,
-
-
hibernate主键策略:
1. uuid 32位唯一的uuid
2. increment 自增长
3. assigned 代理主键(hibernate自动生成、一个没有任何含义的唯一主键)
4. 。。。??
-
遍历所有 权限
使用 二级List -
jquery实现 首页权限选择的复选框的联动操作
[attribute^=value] 匹配给定的属性是以某些值开始的元素
[attribute$=value] 匹配给定的属性是以某些值结尾的元素
火狐firedebug jquery函数执行完 返回的那些东西都是什么?
-
使用包含的技术 匹配 角色所具有的权限
(popedomList 中的所有mid->String 然后调用contains()) -
编辑页面的一些JS控制
- 一行jquery 搞定“全选/全不选”
- table的打开/关闭
-
根据角色 查询对应的用户!!
(如果是普通用户、这数量也太大了、、、此处应该放到 用户编辑页面去做) -
再加一个 添加权限的功能!!(!BUG)
-
多对多的删除
- 级联删除 *谨慎使用
##day06 系统登录&权限管理模块
-
struts2校验机制
-
ValidationAware -->
- addActionError(String anErrorMessage);
<s:actionError /> - addFieldError(String fieldName, String errorMessage);
- addActionError(String anErrorMessage);
-
覆盖更改struts标签的样式(struts2-core --> template -->simple --> <s:... />)
在src下 创建一个 template/simple文件夹,然后想覆盖那个 就复制那个标签,然后 直接更改。
-
-
HashMap 与 HashTable的区别:‘
- HashTable是线程安全的, 比如在登陆的时候 存放一些用户的 权限、角色信息
-
hibernate懒加载问题 之四种解决方案(详见 word笔记)
-
验证码 系统生成的imageNumber放到session域中,与request传过来的imageNumber比较
- 正常应该写个LogonUtils的java类,输入图片流!
- 这里用的一个image.jsp嵌套的java代码、、好吧
-
额额额 又发现了一个问题(!BUG)前端向后台传密码 居然是明文传输、、、
(要不要 先在前端用md5加个密,然后 再在后台 将密码二次加密后 再存到数据库中?[[-> _-》] 还是先不给自己找麻烦了]) -
利用客户端的Cookie(保存用户名、密码)“记住我”
- Cookie中 不能存放中文
- 有效时间(生命周期)
- 有效路径
- JSESSIONID 浏览器自动生成 自动存在Cookie中
-
拦截器 -->只能拦截.do(跳转action的操作),不能拦截跳转jsp servlet的操作
此时 需引入过滤器filter:
在跳转index.jsp页面之前 先获取Cookie, 传值的方式给index.jsp
自定义过滤器,放置到web.xml的struts2过滤器的前面 -
el表达式 获取request中的值: ${requestScope.password}
-
jquery的ztree插件的使用(完成动态加载树型结构)
-
HQL :
请不要 尝试封装 in语句, hibernate找不到的。 -
xml中加个 ...无需转义
-
###角色和权限的控制
-
角色控制
- 系统管理员 点击“用户管理” --> /system/userIndex.jsp
- 非系统管理员 点击“用户管理” --> /system/userEdit.jsp
-
权限控制:
- 普通用户(非系统管理员) 没有编辑、保存数据字典的权限
-
使用了大量的 <s:if test="">标签。。。感觉 并不是一个特别好的方法
--> 引入 自定义标签
-
-
###(session级别的)粗颗粒权限控制:
服务器中的session,10分钟不操作,就会被自动清空(web.xml-->
<session-timeout>10</session-timeout>
</session-config>
)
【所以要在**struts过滤器**中 先将操作拦截下来 判断一下此操作的Session是否存在】
- 存在 放行
- 否则 重定向回首页(登陆等 本来就没有Session的操作除外)
- ###自定义struts2拦截器,进行异常处理+日志备份
拦截所有.do结尾查找Action类的URL
try{
//如果没有异常,不会执行catch
String result = 参数.invoke();//指定Action的类,返回Action类的返回值
return result;
}
catch(Exception){
//如果出现异常,执行catch体
//日志备份(log4j技术)
//异常处理
return "errorMsg";
}
- ###细颗粒度权限控制
拦截器 + 自定义注解
##day07
-
webservice框架:
- jdk ws.invoke();
- CKF
- axis2
- xfire
-
hibernate 二级缓存
- 用户首页: 使用数据类型和数据项的编号,获取数据项的值
- 用户新增/编辑页面:使用数据类型,加载对应数据类型下的集合
-
联合查询+标量查询
???hibernate的联合查询与sql联合查询???孰优孰劣
利用反射技术 封装了一个 接口
List<T> findCollectionByConditionNoPageWithSql(Map<String, Object> condition, Map<String, String> orderby, String scalar, ArrayList<String> innerJoin);
然而,,装逼失败。 因为查出来的object与 t的属性顺序不一致。[(´Д⊂ヽ]
// 将List<Object[]>转换成List<ElecUser>
List<T> tList = new ArrayList<T>();
if (list != null && list.size() > 0) {
for (Object[] o : list) {
try {
T t = (T) entityClass.newInstance();
Field[] fields = entityClass.getDeclaredFields();
for (int i = 0; i < o.length; i++) {
Field field = fields[i];
field.setAccessible(true);
field.set(t, this.convert2String(o[i], field));
}
tList.add(t);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return tList;
- 导出设置
##day08 资料图纸管理 & lucene检索
- get请求:只能通过url,http协议
- dataChartAdd.jsp中的各种js校验
- ###lucene
- 如何进行分词?
- 如何计算得分??
##day09
-
用户管理 添加分页功能
-
POI报表导出,JXLexcel文件的导入
-
jfreechart 了解(!BUG) 和 FusionCharts free