Skip to content
/ Elec Public
forked from nibnait/Elec

这是一个 基于maven的SSH整合 demo项目

Notifications You must be signed in to change notification settings

AymanDF/Elec

This branch is 20 commits behind nibnait/Elec:master.

Folders and files

NameName
Last commit message
Last commit date
Apr 19, 2016
Apr 28, 2016
Apr 27, 2016
Jun 15, 2016
Apr 28, 2016
Apr 28, 2016
Apr 19, 2016
Apr 21, 2016
Apr 25, 2016
Apr 29, 2016
Apr 27, 2016

Repository files navigation

Elec 总结一下 每天学到的技术点

itheima国家电力系统(10天)
这是一个 基于maven的SSH demo整合项目。

[TOC]

##day01 系统框架的搭建

  1. 按条件查找的DAO:
    要先有BaseQuery、
    • 用HashMaP<String, Object>() -->buildWhere、
    • LinkedHashMap<String, String>() -->buildOrderBy

##day02 运行监控

  1. js特效(一):JS控制table数据过长
    一个隐藏的 div
    .innerHTML

  2. js特效(二):JS控制文本域或输入字符串的大小
    引入一个 LimitedTextarea.js

  3. js定时器 设置每10分钟刷新一次

	Window.onload=function(){
		setTimeout('refresh10()',1000*60);
	}
	function refresh10(){
		window.loaction.reload();
	}
  1. CKEditor+CKFinder文本编辑器
    (CkFinder 文件上传) (*!BUG)

  2. 文本编辑器 处理大数据 需进行截串存取

  3. js特效(三):JS进度条
    (实际是一个table、2个td td1.width每次+10px,td2.width-10px) setTimeout('',100); 0.1s执行一次

  4. js特效(四):JS浮动框

  5. js特效(五):highslideJs插件

##day03 数据字典 SystemDDL

  1. Hql投影查询
    使用hql语句直接将投影查询的字段放置到对象中,例如
String hql = "SELECT DISTINCT new cn.itcast.elec.domain.ElecSystemDDL(o.keyword) FROM ElecSystemDDL o";  
List<ElecSystemDDL> list = this.getHibernateTemplate().find(hql);
  1. 使用JQuery 进行表格的添加删除tr

  2. 添加数据类型的JS校验:

    • Trim()!="";
    • 新增数据类型 不能与已有的一致
    • 新增数据类型的itemnames不能重复
  3. c3p0连接池
    还可将hibernate.cfg.xml完全整合到beans.xml中

VO 栈值对象
PO 持久态对象
Hibernate实体的四种状态:瞬时(VO)、托管(PO)、游离、销毁

  1. 数据字典 编辑页面那个Form2页面还是有问题!
    只能删除第1个itemname 无法删除其他的,Debug了一下 发现jQuery.remove 方法无效 (*!BUG)

  2. ? 当使用数据字典的时候,需要数据的转换,多了很多的sql语句(待优化!)(*!BUG)
    打开子窗口 function.js/openWindow(sHref,strWidth,strHeight)

##day04 用户管理(【用户-用户文件】 一对多的操作)

  1. jquery的ajax实现二级联动

  2. jquery的ajax实现登录名的校验
    鼠标失去焦点时 执行checkUser(this)方法:onblur="checkUser(this);"

  3. jquery对象校验上传的表单 ?(!BUG) 为什么不执行这句话了???

  1. 用户表单的保存:
    • 跳转到 close.jsp
      关闭子页面,并刷新父页面
    window.close();  
  1. 文件上传

    1. 方案一:使用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>
      
    1. 方案二:使用Blob字段 将数据直接存放在数据库中
  2. 用户编辑

    1. 表单回显 ${OGNL表达式}??(从栈顶 想读啥 直接写)
    2. 将userFile按上传时间降序排序:
      在user.hbm.xml的userFile那一项 加个order-by="progressTime desc"属性即可
  3. 添加spring解决hibernate懒加载:

    在web.xml的struts2过滤器前 openSessionInViewFilter 这样 一个servlet的生命周期 就可以延长至一个 request到response整个周期了。
    延迟了session的关闭时间,,,容易造成*“假死”*现象(一个session未关闭,则另一个session链接就连不上了。)

  4. 文件下载

    • 方式一: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.
  5. 用户删除

    不仅要删除数据库中的, 还要把服务器上的userFiles.delete;
    用户&用户文件-->级联删除: 在user.hbm.xml的userFile那一项 加个cascade="delete"属性

  6. 查看用户明细

    1. 在"userEdit.jsp"中加个viewflag属性,
      然后 将查看用户页面中一些不需要显示的信息 将其viewflag
    2. Action.edit中 获得viewflag VO对象 并将其转化为PO对象
    3. 即 实现了 编辑用户 和查看用户页面的通用

11.使用md5的密码加密,处理用户的密码
MD5keyBean.java是个好东西!

##day05角色管理(权限分配)(多对多的操作)

    • 角色-权限 多对多关系
      角色是维护方

    • 用户-角色 多对一的关系
      用户是维护方 ,

  1. hibernate主键策略:

1. uuid		32位唯一的uuid
2. increment	自增长
3. assigned	代理主键(hibernate自动生成、一个没有任何含义的唯一主键)
4. 。。。??
  1. 遍历所有 权限
    使用 二级List

  2. jquery实现 首页权限选择的复选框的联动操作

[attribute^=value] 匹配给定的属性是以某些值开始的元素

[attribute$=value] 匹配给定的属性是以某些值结尾的元素

火狐firedebug jquery函数执行完 返回的那些东西都是什么?

  1. 使用包含的技术 匹配 角色所具有的权限
    (popedomList 中的所有mid->String 然后调用contains())

  2. 编辑页面的一些JS控制

    1. 一行jquery 搞定“全选/全不选”
    2. table的打开/关闭
  3. 根据角色 查询对应的用户!!
    (如果是普通用户、这数量也太大了、、、此处应该放到 用户编辑页面去做)

  4. 再加一个 添加权限的功能!!(!BUG)

  5. 多对多的删除

    • 级联删除 *谨慎使用

##day06 系统登录&权限管理模块

  1. struts2校验机制

    • ValidationAware -->

      • addActionError(String anErrorMessage);
        <s:actionError />
      • addFieldError(String fieldName, String errorMessage);
    • 覆盖更改struts标签的样式(struts2-core --> template -->simple --> <s:... />)
      在src下 创建一个 template/simple文件夹,然后想覆盖那个 就复制那个标签,然后 直接更改。

  2. HashMap 与 HashTable的区别:‘

    1. HashTable是线程安全的, 比如在登陆的时候 存放一些用户的 权限、角色信息
  3. hibernate懒加载问题 之四种解决方案(详见 word笔记)

  4. 验证码 系统生成的imageNumber放到session域中,与request传过来的imageNumber比较

    1. 正常应该写个LogonUtils的java类,输入图片流!
    2. 这里用的一个image.jsp嵌套的java代码、、好吧
  5. 额额额 又发现了一个问题(!BUG)前端向后台传密码 居然是明文传输、、、
    (要不要 先在前端用md5加个密,然后 再在后台 将密码二次加密后 再存到数据库中?[[-> _-》] 还是先不给自己找麻烦了])

  6. 利用客户端的Cookie(保存用户名、密码)“记住我”

    1. Cookie中 不能存放中文
    2. 有效时间(生命周期)
    3. 有效路径
    4. JSESSIONID 浏览器自动生成 自动存在Cookie中
  7. 拦截器 -->只能拦截.do(跳转action的操作),不能拦截跳转jsp servlet的操作
    此时 需引入过滤器filter:
    在跳转index.jsp页面之前 先获取Cookie, 传值的方式给index.jsp
    自定义过滤器,放置到web.xml的struts2过滤器的前面

  8. el表达式 获取request中的值: ${requestScope.password}

  9. jquery的ztree插件的使用(完成动态加载树型结构)

  10. HQL :
    请不要 尝试封装 in语句, hibernate找不到的。

  11. xml中加个 ...无需转义

  12. ###角色和权限的控制

    • 角色控制

      • 系统管理员 点击“用户管理” --> /system/userIndex.jsp
      • 非系统管理员 点击“用户管理” --> /system/userEdit.jsp
    • 权限控制:

      • 普通用户(非系统管理员) 没有编辑、保存数据字典的权限
    • 使用了大量的 <s:if test="">标签。。。感觉 并不是一个特别好的方法
      --> 引入 自定义标签

  13. ###(session级别的)粗颗粒权限控制:
    服务器中的session,10分钟不操作,就会被自动清空(web.xml-->

	<session-timeout>10</session-timeout>
</session-config>  
)

【所以要在**struts过滤器**中 先将操作拦截下来 判断一下此操作的Session是否存在】  
 - 存在 放行
 - 否则 重定向回首页(登陆等 本来就没有Session的操作除外)
  1. ###自定义struts2拦截器,进行异常处理+日志备份
    拦截所有.do结尾查找Action类的URL
	try{
		//如果没有异常,不会执行catch
		String result =  参数.invoke();//指定Action的类,返回Action类的返回值
		return result;
	}
	catch(Exception){
		//如果出现异常,执行catch体
		//日志备份(log4j技术)
		//异常处理
		return "errorMsg";
	}
  1. ###细颗粒度权限控制
    拦截器 + 自定义注解

##day07

  1. webservice框架:

    1. jdk ws.invoke();
    2. CKF
    3. axis2
    4. xfire
  2. hibernate 二级缓存

    1. 用户首页: 使用数据类型和数据项的编号,获取数据项的值
    2. 用户新增/编辑页面:使用数据类型,加载对应数据类型下的集合
  3. 联合查询+标量查询

    ???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;
  1. 导出设置

##day08 资料图纸管理 & lucene检索

  1. get请求:只能通过url,http协议
  2. dataChartAdd.jsp中的各种js校验
  3. ###lucene
    1. 如何进行分词?
    2. 如何计算得分??

##day09

  1. 用户管理 添加分页功能

  2. POI报表导出,JXLexcel文件的导入

  3. jfreechart 了解(!BUG) 和 FusionCharts free

About

这是一个 基于maven的SSH整合 demo项目

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 48.5%
  • JavaScript 47.9%
  • CSS 2.6%
  • Other 1.0%