快捷键
1.内容提示快捷键
alt+/
密钥配置
rsa 私钥和 rsa.pub 公钥:
一、git的学习
1.专业术语
branch(分支)
remote tracking branch(远程跟踪分支)
tag(里程碑)
HEAD(当前所在分支的引用)
2.特点
1.git每次提交记录的是快照(snapshot),即文件的全部内容。每次提交都会有一个唯一的版本号(commit id);
2.所有操作都是在本地执行的,因为本地存储着当前项目的所有更新。
3.git可以知道文件或者目录被修改,保证文件的完整性。
4.高可靠性,一旦提交快照之后就不用担心数据丢失。
3.理解git的模型 directory structure
4.对象object
一个对象对应着一个40位的十六进制哈希值。将这个哈希值看作指针;对象和对象之间可以通过指针进行一些关联的操作。
git的四种基本对象类型
1.提交(commit)
每次提交的时候都会产生一个新的commit对象。包含了指向tree对象的指针,指向前一次commit对象的指针,还包含了commit的时间,注释,作者等信息;
2.文件内容(blob)
存储文件内容
3.目录树(tree)
存储目录里的文件名
4.里程碑(tag)
指向一个commit而不是一个tree。提供开发者记忆的名字。
5.引用ref
指向某个commit的指针
6.索引index 暂存区 staging area
索引是一个二进制文件。
每次commit的时候提交的是暂存区的内容。
7.git数据迁移示意图
对于任何一个文件,git只有三个状态:已修改,已提交,已暂存
8.git工作区与版本库
版本库:工作区根目录下的一个.git目录
工作区:除了.git目录外的其他目录
git命令
1.创建带工作区的版本库
git init demo
2.创建裸版本库 (裸版本库的命名通常在后面带个.git,例如demo.git)
git init --bare demo.git
9.辅助目录
10.detached HEAD(分离头指针状态)
11.里程碑(tag)
12.non-fast-forward
13.空目录
git中不存在空目录。如果一个目录中的文件全部被删除,那么这个目录会被自动删除。
14.远程仓库
15.git的常用命令
git add files 把当前文件放入暂存区域
git commit 给暂存区域生成快照并提交
git reset --files 用来撤销最后一次git add files 可以使用git reset 撤销所有暂存区域文件
git checkout --files 把文件从暂存区域复制到工作目录,用来丢弃本地修改
git commit -a 相当于运行 git add + git commit
16.个人理解Revert Commit 和 Reset>Soft的区别
使用Revert Commit的时候是已经将错误push带远程服务器的时候,使用Revert commit,然后将产生的新纪录提交到远程服务器即可。
使用Reset>Soft的时候是错误没有提交到远程服务器,使用Reset>Soft可以回到最后一次提交之前;可以根据情况来判断是否回滚暂存区的代码;
17.在切换到远程分支的时候会出现提示目前的状态处于detached HEAD状态(分离头头指针),这个时候是不能在切过去的远程分支上工 作的,需要在本地创建一个分支,然后把这个远程分支合并到本地分支上。
18.获取远程仓库的更新(fetch)
在进行fetch操作时并不是将远程仓库的东西复制到本目录下,而是复制到别的目录空间下。举例:如果远程库名为origin,那么会将远程库的文件复制到目录(.\git\ref\remotes\origin).避免了在本地文件的覆盖。
fetch 默认获取远程库的所有分支。
19.删除分支
本地分支的删除
远程分支的删除
1.在git repositories 视图中删除分支只是删除从远程仓库下载到本地分支的一个引用。
并不会真正的删除远程分支,可以通过fetch操作重新获取。
2.删除远程分支对应的命令:推送空分支就相当于删除了远程分支;
git push origin --delete test
20.merge操作("差异比较")
分支合并
COmmit和Squash的区别:
21.rebase操作 ("过程重演")
不要衍合已经已经推送到公共仓库的更新。
merge和rebase操作的结果都是将不同分支的代码合并到一起;使用原理和过程不同
具体可看:https://blog.csdn.net/triples_x/article/details/79066757 笔记本:8.20
区别:merge出现conflict的时候只需要修改一次,但是rebase出现conflict的时候需要修改多次
具体可见公司内网:http://172.21.200.13:8090/devwiki/pages/viewpage.action?pageId=8880400#id-3Git%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C%E8%AF%B4%E6%98%8E-merge%E5%92%8Crebase%E5%8C%BA%E5%88%AB
22.cherry-pick(拣选提交指令)
理解为将某一次提交(commit id)应用(应用可以理解为提交即commit)到当前分支上
相当于一次重新提交(commit id 会改变)
23.git常用命令
1. git checkout 切换分支;创建分支并切换
举例:git checkout master 切换到master分支上
git checkout -b mybranch master 基于master分支创建mybranch分支,并且切换到mybranch分支上
2.
24.fetch操作是将远程库的代码同步到Remote Teaching上
25.切换分支之前,需要将已经修改的代码提交(commit)添加到index也不行,因为会将修改的代码带到新切换的分支上。
26.revert commit 可以退回错误提交(但是会生成一个新的commit id,这个内容和错误的commit之前的commit内容一样)
27.reset 个人理解为回滚到某一个提交(commit id)的状态。
二、CheckStyle插件
1.Java编程规范
注释规范
单行注释应该与其后面的代码有同样的缩进层级;
代码规范
在一条代码换行的时候应该缩进一个tab键
操作符两端应该各空一个字符以增加可读性
声明规范
在类中的方法的声明顺序
构造方法
静态公共方法
静态私有方法
公共方法
受保护方法
私有方法
继承自Object的方法(toString()、equals()、hashCode()、colone()等方法)
字段声明
尽量将所有的字段都声明为私有,通过get和set方法来进行获取和设置。
注意:
// 数组的声明,应该使用下面的方式。
Integer[] aj = new Integer(3);
// 返回整型数组,应该使用下面的形式
public int[] getIndex(){
return null;
}
一行代码应该只声明一个变量;
语句规范
所有的 if 语句都应该使用{}括起来,即便只有一行
判断语句不要使用"==true"来判断为真
异常处理
在捕获异常后如果不进行处理,就应该记录日志;
抛出异常的代码
throw new MyException("在此处进行异常描述!异常发生时Data:"+data.toString());
其他规范
1.申请的资源,必须要释放(例如数据库操作、IO操作)
2.避免使用不易理解的数字,可以使用静态变量或者枚举来代替
例子:
private static final int STATE_OK = 0;
private static final int STATE_ERROR = 1;
// 使用静态变量来判断状态
if (state = STATE_OK){
// program code
}else if(state = STATE_ERROR){
// program code
}
3.在处理可变String的时候,尽量使用StringBuffer类
4.aux,com1,com2,prn,con.nul等为Windows的系统保留关键字。因此创建包名的时候要注意不要使用这些关键字。因为Windows不能建立对应的文件夹。
2.JS编程规范
1.文件与目录必须小写,英文,使用-或者_进行连接;只能出现数字,英文,连字符,不能出现中文。
2.私有变量 ,属性,方法以下划线开头。
3.js中,单行字符串使用单引号
HTML中的Element属性,使用双引号;
例如:var x = '<a href="https://www.baidu.com"/>'
3.代码注释规范
4.代码提交注意
1.确保提交的内容仅为当前修改的部分。
2.一次提交最好体现一个问题的修改。
3.注意编码格式。
4.不能提交测试代码,例如JS中的debug或者Java中的System.out.print...
5.文件名不能包括中文.
5.开发技巧
1.Eclipse快捷键
Alt+ / 代码提示
Alt+ 上下键 当前行上下移动
三、Maven使用说明
1.依赖管理
1.maven坐标
2.本地仓库
3.依赖管理
如果其他jar包也间接依赖了activation.jar,但是使用的是高版本的,于是就会出现冲突,那么需要使用<exclusion>标签将低版本的activation.jar排除掉,写法如下。只需指明groupId和artifactId即可,不写version。
四、Junit单元测试方法
五、util工程下的常用工具类
重点注意的类:StrFunc、StmFunc、XmlFunc、FileFunc、StringMap
1.StrFunc 一个对字符串操作的类,全为静态
1. isNull(s) 判断指定字符串是否为空
2. compareStr(s1,s2) 比较两个字符串是否一致 equals
3. str2Text(s) 将指定字符串的不可见字符转换为可见字符(例如:空格等转换为\\u20 tab键转换为\\t )
4. text2Str(s)
5. data2Str 将日期对象格式化为字符串
6. double2Str
7. ensureEndWith 确保以XX结尾
8. parseBoolean 将字符串解析为boolean值 parse 音标: /pɑrs/ n,v:解析
parseInt
9. null2blank 空对象转换为长度为0的字符串
用处:在进行地址传参的时候如果一个对象为空,那么在拼写的时候
就会转为null的字符串,就可能出错,因此需要使用null2blan
方法进行转换。
null2default
10. format2HtmlStr 代码安全
11. isNumber
2.FileFunc 文件或者目录操作类
1. includepathSeparator 确保路径末尾带文件分隔符
举例:文件路径拼写的时候需要在末尾加 \
2. createTempDir 创建一个当前不存在的临时文件夹
暂时存放文件
3. listFiles
4. ensureExists 确保文件或者文件夹存在
流输出的时候
5. extractFileName 返回指定文件路径的文件名 extract 音标/ˈɛksˌtrækt/ v.提取 n.摘录
6. dirExists
7. copyDir 拷贝目录
8. file2buf 将文件内容转换成byte数组返回
file2str 需要指定该编码
9. formatFileName 将给定的文件名格式化成一个合法的文件名
3.StrFunc 对流进行读写的操作
1. writeLine 向流里输出指定字符串
注意:是以回车换行结尾的
2. stmTryCopyFrom 输入流拷贝至输出流
3. stm2Str 将流的信息以字符串的形式返回
4. reader2str
5. stm2bytes
六、JDBC学习
1.jdbc (java data base connevtivity)
2.esensoft jdbc结构
3.屏蔽数据差异性
建立与数据库的连接
创建语句对象
执行查询并返回结果集对象
处理结果集对象
关闭结果集和语句对象
关闭与数据库的连接
4.新加一个数据库支持
资源的关闭问题
1.谁申请的谁关闭。即当方法申请资源后,需要由这个方法来释放这个资源。外部传递进来的资源,需要有方法外部来进行关闭.
2.在申请资源后,请先写释放资源的代码,避免忘记.
3.释放资源代码的位置(个人理解为在申请资源的下一try-catch-finally的finally语句块中)
例子:
Connection conn = getConn();
try{
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace(); // 输出错误
} finally {
conn.close();
}
1.资源泄露 unreleased resource (数据库和文件流的资源)
2.获取连接的异常应该向外抛出(throws),如果不能抛出,例如线程的run方法,应该使用try-catch
3.不要先赋空值,,关闭的时候再来判断是否为空;不美观,也容易被扫空指针异常
4.sql异常,无特殊情况直接抛出
第二周
1.ORM(对象关系映射)
0.考核重点(创建表,修改表,对象添加、修改、删除、查询、单例模式,工厂模式)
单例模式:
工厂模式:
1.SessionFactory维护着所有连接对象,已经连接对象的分配和销毁。
2.Session表示应用程序和数据库的一次交互。
3.quertExe.query(new Expression("name=?"),id=false,new String[]{"id","name"},name);
第一个参数:new Expression("name=?") 表示where后面的条件
第二个参数:id=false 表示根据id来进行
第三个参数:需要查询的字段
第四个参数:第一个参数的?号的值
4.Class.getResource
getResource("") 获取的是当前类所在包的路径 D:\esendev\gitrepos4.8\abistudy\target\classes\com\esen\study
getResource("/") 获取的是 classpath 根路径 D:\esendev\gitrepos4.8\abistudy\target\classes
5.Action的注意事项
1.action实现的两种方式(execute方法负责跳转,jsexecute方法负责处理前台的js请求)
1.继承Action类,重写execute方法
2.继承Action_Js类,重写execute方法和jsexecute方法
2.action中主要负责处理以下事务
1.接受前台传递过来的参数
2.校验权限
3.安全编码检查
4.将参数传递给底层处理,获得返回值
5.记录日志
6.发集群消息
7.处理异常
8.跳转前台页面
9.将返回值发送给前台
3.注意事项
1.一个模块下的所有操作写一个action文件
2.Spring扫描action的路径可在servletContext.xml中配置
3.@RequestMapping注解是这个类的访问路径(xxxx.do),大部分和类的名字后半本分保持一致,这样方便根据路径找文件(视图解析器ViewResolver)
2.SpringMVC
0.Java中的Action、Service、model和dao层的功能区分
action:控制器
service:业务逻辑处理
model:对应数据库表的实体类
dao:数据持久化(连接数据库、操作数据库)
1.SpringMVC的过程
2.example
// value="请求的实际地址" params={"cmd=login"} 指定request请求中必须包含某些参数值,才让该方法处理
@RequestMapping(value="/login",params={"cmd=login"})
// value="cmd" 请求参数的参数名,作为参数映射名称 required=true 必填
public void login(HttpServletRequest request,
@RequestParam(value="cmd",required=true) String cmd, HttpServletResponse response)
3.集成SpringMVC
1.配置web.xml
2.配置servletContext.xml
3.编写一个Action
3.freemarker
(模板文件) (Java对象) freemarker
template file + Java objects ----------------> Output
0.$ # @(宏)
1.语法
1.文本:直接输出的部分
2.注释:<#-- 注释 --> 不是<!-- X -->
3.插值:${...} 或者#{...}
4.FTL指令:
2.FTL指令的规则
3.插值规则
1.通用插值${expr}
1. 插值结果为字符串值:直接输出表达式结果
2. 插值结果为数字值
3. 插值结果为日期值
4. 插值结果为布尔值
2.数字格式化插值#{expr} 或 #{expr;format}
mX:小数部分最小X位
MX:小数部分最大X位
3.表达式
${}
1.直接指定值
1.字符串
1.有特殊字符需要转义
2.在指定字符串内容的引号前增加r标记,在r标记后的文件将会直接输出.
例子:${r"C:\foo\bar"} 会直接输出: C:\foo\bar
${r"${foo}"} 输出 ${foo}
2.数值
3.布尔值
4.集合
4.常用指令
1.if指令
<#if (a>60)>
老年人
<#elseif (age>40)>
中年人
<#elseif (age>20)>
青年人
<#else>
少年人
</#if>
2.switch、case、default、break指令
<#switch value>
<#case refValue>
。。。
<#break>
<#case refValue>
。。。
<#break>
<#default>
。。。
<#switch>
3.list、break指令、map遍历
1.list
item_index:当前变量的索引值
item_has_next:是否存在下一个变量
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
${x_index + 1}.${x}
<#if x_has_next>
,
</#if>
<#if x="星期四">
<#break>
</#if>
</#list>
<#include>和<#import>
<#assign name=value>
空值问题
${user.name!} 或 ${user.name!"null"}
表达式
${表达式}
内建函数
${x?string("0.xxx")} 来格式化输出字符串
4.XSS (Cross-site Scripting) 跨站脚本
利用网页开发时的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
· 通常页面中包含的用户输入内容都在固定的容器或者属性内,以文本的形式展示。
· 攻击者利用这些页面的用户输入片段,凭借特殊格式的字符串,突破原有位置的限制,形成了代码片段
· 攻击者通过在目标网站上注入脚本,使之在用户的浏览器上运行,从而引发潜在风险
· 通过HTML转义,可以防止XSS攻击
但是还可以使用javascript:alert("XSS")来进行XSS攻击-----》使用白名单来解决这个问题
白名单的方法
// 根据项目情况开进行过滤,
allowSchemes=["http","https","javascript"];
// 判断输入的时候有不合法的字符
valid = isValid(getParameter("redirect_to"), allowSchemes);
// 处理
if(valid){
// 跳转正常页面
} else {
// 跳转至404
}
· 做了HTML转义,并不等于高枕无忧
· 对于链接跳转,如<a href="XXX">或者 location.href="xxx",要检验其内容,禁止以javascript:开头的链接,和其他非法的scheme
5.AppScan常见漏洞处理
1.跨站点脚本(XSS)编制
1.<script></script>中的参数
2.jsp页面的控件中赋值的参数
解决办法:
增加SecurityFunc。checkXSSparam(String param)验证
用StrFunc.format2HtmlStr进行转义
2.存储的XSS编制
6.SQL注入
解决方案
1.黑名单验证
黑名单验证也可以使用,但是局限性很大。例如对“or”进行黑名单验证,
如果攻击者使用chr(111)+chr(114)替换or则验证会通过,任然可以产生攻击效果。
2.白名单验证,验证输入
String colname=request.getParameter("colname");
if(colname.marches("^[a-zA-Z][0-9a-zA-Z_]*$")){
String sql="select * from item"+"order by"+colname...;
}
3.变量绑定(预编译)
使用PreparedStatement
4.使用存储过程替代sql语句
不仅后期维护方便,性能高,也有效的避免了sql注入攻击
同样,选择哪种方式处理sql injection问题,也是根据实际场景而定,比如项目框架,项目阶段。
总结:黑名单不完美,白名单不现实,在编码时尽量使用方法3--变量绑定(预编译)
7.国际化
1.多层架构web应用
Presentation Tier ·展现层:包括用户界面元素、出错信息、提示信息等。
Business Tier ·业务逻辑层:主要包括领域对象、常量、抛出的异常信息等
Data Tier ·数据层:系统主数据,或一些动态生成的数据
2.文本信息资源化(理解为所有在界面上显示的文字)
1.资 源化Java文件中的字符串
1.throw Exception 抛出的异常的字符串常量
2.代码中返回字符串的函数中可能显示到界面上字符串常量
3. 代码中的将输出到界面的字符串常量
2.资源化js文件中的字符串
1.界面控件中的文本信息
2.消息框中的文本信息
3.资源化jsp中的字符串
1. 嵌在HTML代码中的文本信息
2. JSP中嵌在js代码中的文本信息
4.资源化XUI xml文件
5.资源化图片
3.资源名称约定
1.每个过程都应该有各自的资源文件。 在工程下建立com.esen.i18n包目录,资源文件名扩展名为properties
2.资源标识符约定
1.资源文件本质上就是properties格式的文件。
文件中的条目是"键-值"对的形式,
我们约定键名作为资源项的唯一标识符,不可重复
2.Java源代码中用的资源标识符
包名.类名.键名 = 值
为了减少记忆负担, = 号前面的组成部分一律小写
3.Jsp和Js代码中用的资源标识符
路径.文件名.键名=值
路径中的 / 用 . 代替,小写
4.国际化实现思路
0.基础
1.检测用户当前环境语言
浏览器js脚本(navugator)、服务器端Java代码(request)
1.1 基于session的展现层国际化框架
8.Spring
1.SpringBean
使用spring来获得对象
a.使用容器来获得
Phone ip4=ApplicationCOntext.getBean("apple.iphone",Phone);
b.使用注解
@Atuowired
2.对象生命周期@Scope
singleton:单例,系统默认(多次获取的对象为同一个对象)
prototype:多例
request:每次HTTP请求中,一个bean定义对应一个实例
session:在一个session上下文中,一个bean对应一个实例
global session:在一个全局的HTTPsession中,一个bean对应一个实例
9.SpringMVC
1.result风格
@RequestMapping("/{userid}")
public ModelAndView showDetail(@PathVariable("userid")String userid){
// do something...
}
VFS学习
1.jdbc.util中提供的功能
2.VFS(虚拟文件系统)
第三周:JS学习
1.js是一种无类型的语言,即变量没有一个明确的类型。
2.导入
3.执行顺序
1.按照顺序调用
4.DOM(Document Object Model)对象
Node:所有的东西都看作是一个节点
节点类型:noteType
节点属性
getAttribute(name);
setAtrribute(name,value);
set一个不存在的name,相当于添加一个Attribute
removeAttribute(name);
访问DOM对象
1.根据id获取对象
getElementById("id");
2.根据标签名获取
getElementsByTagName("name")
3.根据name获取节点对象
getElementsByName(name);
4.根据class获取
getElementsByClassName(name);
5.子节点
childNodes(子节点)
6.第一个子节点
firstChild(第一个子节点)
7.lastChild(最后一个子节点)
创建DOM对象
修改DOM对象
克隆DOM对 象
文档流
内联元素
块级元素
块级元素和内联元素互换
display:inline/block
布局和定位
position
static
relative
absolute
fixed
定位位置:
left
right
top
bottom
zIndex:层叠顺序
overflow
auto 自动显示
visible 不剪切
hidden 不显示
scroll 总是显示
display(隐藏时不占空间)
block/none
visibility(隐藏时占空间)
visible/hidden
float
left/right
盒子模型
margin:上右下左
border:宽度 线性 颜色
padding:上右下左
基本事件处理
什么是事件?
事件分类
输入事件
用户界面事件
状态变化事件
特定API事件
事件绑定方式
标签属性绑定
对象绑定
监听器绑定
event对象
event代表事件的状态,专门负责对事件的处理。
event对象只在事件发送的过程中才有效。
浏览器事件模型
事件流
***冒泡型事件
取消冒泡
var evt = evt||event;
if( window.event){
evt.cancelBubble = true;
} else {
evt.stopPropagation();
}
捕获型事件
事件传递模式
事件监听器
面向对象编程
对象和属性
所有变量都是对象,除了null和underfined
js的对象可以作为哈希表使用,主要保存命名的键与值的对应关系。
访问属性
点操作符
foo.name;
方括号操作符
foo['name'];
删除属性
delete操作符
delete obj.baz;
将属性设置为undefined或者null(不是真正删除)
obj.baz=null;
obj.baz=undefined;
创建对象
var dog=new Object();
dog.name="";
dog.color="";
dog.run=function(){
console.log("run...");
}
对象直接量
var dog={
name:"";
color:"";
run:function(){
console.log("run...");
}
}
对象封装
function cat(name,color){
return {
name:name,
color:color
}
}
// 生成对象
var cat1=cat("大黄","黄色");
// 构造函数模式(可能会重复占用内存)
function cat(name,color){
this.name=name;
this.color=color;
}
// 创建对象
var cat2=new cat("小黑","黑色");
//判断变量的类型
// instanceof constructor
// prototype模式(不会重复占用内存)
function cat(name,color){
this.name=name;
this.color=color;
}
cat.prototype.type="猫科动物";
cat.prototype.eat=function(){
alert("吃老鼠。。。");
};
isPrototypeOf();//判断原型对象和实例间的关系
hasOwnProperty();//判断是实例属性(true)还是对象属性(false)
in 运算符 //判断实例是否含有某个属性
in 还可以遍历某个对象的所有属性
for(var p in cat1){
alert(cat1[p]);
}
继承
把父对象的构造方法函数绑定在子对象上
异步编程
js单线程
UI线程(单线程)工作原理(队列--依次执行)
按钮UI更新
JavaScript handleClick();
UI更新
在某一时刻只能执行一项队列队伍
异步编程模式
js定时器工作原理
定时器API
var id = setTimeout(fn,delay);(执行一次)
var id = setInterval(fn.delay);(循环执行)
使用clearInterval(id);clearTimeout(id)清除计时器
Ajax编程
使用脚本操作HTTP
异 步
数据传输格式是文本
JSON
AJAX核心是XMLHttpRequest对象
// 兼容的XMLHttpRequest对象
var xhr = function(){
if(window.ActiveXObject){ // IE < 8
return new ActiveXObject("Microsoft.XMLHTTP");
} else if(window.XMLHttpRequest){
return new XMLHttpRequest(); //W3C
} else{
return null;
}
}
// 发送请求
open();和send();
xhr.open("POST","myAction.do",true);
xhr.send("id=XXX&name=yyy");
open(method,url,async);
send(string);
// 添加HTTP头
// 回调函数
// 状态改变时调用
xhr.onreadystatechange=function(){
if(chr.readyState==4&xhr.status==200){
// do something
}
}
readyState 0:请求未初始化
1:服务器连接建立
2:请求已接收
3:请求处理中
4:请求已完成,且响应已就绪
status 200:"OK"
404:未找到页面
其它异步编程技术
JavaScript组件设计
1.组件
组件是具有可复用功能的模块代码‘
组件可以有UI界面也可以没有
有UI界面的叫控件
2.流程
设计UI
接口设计
交互行为
--------------------------------------------
1.js基础概念,window,document,this,bind,call
window对象 :指当前的浏览器窗口。
window对象的属性
window.name:表示当前浏览器窗口的名字,一般配合超链接和表单的target属性使用。
window.closed:返回一个布尔值,表示窗口是否关闭.
window.opener:当前窗口的父窗口
window.self和window.window都指向窗口本身
window.frames:返回一个类似数组的对象,成员为页面内所有的框架(iframe元素)内容。可以使用索引或者框架的name来引用
window.length:返回当前页面的frame和iframe的个数
window.frameElement
window.status
// 位置大小属性
window.screenX window.screenY // 浏览器窗口的左上角相对于屏幕左上角的X、Y轴的距离
window.innerHelight window.innerWidth // 浏览器窗口的宽高
// 组件属性 visibale属性是一个布尔值,表示 这些组件是否可见
window.locationbar:地址栏对象
window.menubar:菜单栏对象
。。。
// 全局对象属性
window.document:指向document对象
window.location:当前窗口的URL信息
window.navigator:用于获取环境对象
window.history:历史记录
window.console:控制台
window.screen:屏幕信息
window.isSecureContext //布尔值 表示当前窗口是否处于加密状态(HTTPS 就是true)
Screen对象(window.screen)
属性:height、width。。。
Navigator对象(window.navigator)
属性:userAgent(浏览器信息)、platform(操作系统信息)
// window对象的方法
// 弹窗
// 这三个方法都具有堵塞效应,一旦弹出对话框,整个页面就是暂停执行,等待用户做出反应。
alert();
prompt();
confirm();
//
open();
close();
stop();
// 事件
load:加载完毕
onload:
error:
onerror:
// 出错代码行
window.onerror = function (message, filename, lineno, colno, error) {
console.log("出错了!--> %s", error.stack);
};
call方法
指定函数内部this的指向(即作用域),可以接收多个参数,第一个参数为this所指的对象,后面的就是函数调用所需要的参数。
call方法的一个应用是调用对象的原生方法。
bind方法
bind方法用于将函数体内的this绑定到某个对象,然后返回一个新函数。
2.浏览器兼容性问题
3.js封装成对象,对象的销毁问题,前台内存泄露
// 严格模式
在构造函 数的第一行添加'use strict';
在创建对象的时候如果忘记使用new,就会报错
// new命令原理
http://javascript.ruanyifeng.com/oop/basic.html#toc4
构造函数里的this指的是一个新生成的空对象
当构造函数中有return语句时,并且return后接着一个对象,则构造函数返回这个return接着的对象,否则返回this对象
对一个内部没有this关键字的函数,使用new命令,那么会返回一个空对象
// this关键字 this总是返回一个对象
简单的说,this就是属性或者方法“当前”所在的对象。
this可以用在构造函数之中,表示实例对象
如果对象的方法里面包含this,this的指向就是方法运行时所在的对象。该方法赋值给另一个对象,就会改变this的指向。
4.对象的继承
国际化(i18n)
JAVA
1. 通过throw Exception抛出的异常中的字符串常量
2. 代码中返回字符串的函数中可能显示到界面上字符串常量
3. 代码中的将输出到界面的字符串常量
JS
1. 界面控件中的文本信息
2. 消息框中的文本信息
JSP
1. 嵌在HTML代码中的文本信息
2. JSP中嵌在js代码中的文本信息
在每个工程下面建立com.esen.i18n
1.检测用户当前环境语言
浏览器
var lang = navigator.userLanguage||navigator.language;
alert(lang);
服务器
String lang = request.getHeader("Accept-Language");
System.out.println(lang);
//或者
Locale locale = request.getLocale();
System.out.println(locale);
获取ResourceBundle:
ObjectFactory objFactory = ObjectFactoryBuilderDefault.getInstance().
createObjectFactory(
"ResourceBundleFactory", "com.esen.xxx.XxxResourceBundleFactory");
ResourceBundleFactory resFac = (ResourceBundleFactory)objFactory;
ResourceBundle res = resFac.createResourceBundle();
String msg = res.getString(xxx);
System.out.println(msg);