属性:
src:图片的路径
alt:图片显示不出来的时候,给的文字提示信息
title:鼠标悬浮提示
属性type:circle/square/disc
属性type:1/a/A/i/I
属性:
href:跳转到哪
target:在哪显示新页面 _self/_blank/framename
框架标签,是用来切分页面的。切分谁,就用frameset把谁替换掉
属性:
rows:分行。比如rows=”200,*”分成了两行,第一行高200px,第二行占剩余全部
cols:分列。用法和rows完全一样
frameset里分了几部分,就必须有几个frame标签
属性:
src:要嵌套进来的页面的路径
name:框架的名称,主要是给超链接标签使用的
method: 表单的提交方式get/post
action:表单提交路径
text:文本框。使用value属性设置默认值
password:密码框。使用value设置默认值
radio:单选按钮。name相同的radio属于同一组,同组radio互斥。
在需要默认选中的选项上增加属性:checked=”checked”
checkbox:复选框。name相同的checkbox属于同一组,目的仅仅是方便后台接收参数:request.getParameterValues();
在需要默认选中的选项上增加属性:checked=”checked”
button:普通按钮
submit:提交按钮
reset:重置控制
image:图片提交按钮,功能和submit完全一样,只是用图片作为按钮
file:文件选择框,默认提交的是文件名称
hidden:隐藏域
如果表单项的数据需要提交,就必须有name属性
text/password:value是默认值
radio/checkbox:value表示某一个选项的值,选中哪个选项就提交哪个选项的value值
button/submit/reset:value表示按钮上的提示信息
image:value没有实际意义
file:value是无效的
hidden:value表示隐藏域的值
name属性:如果下拉框的数据要提交就必须有name属性
multiple属性:固定值multiple,表示下拉框可以多选
value属性:表示一个下拉选项的值,选中哪个下拉选项,就提交哪个选项的value值
如果默认的下拉模式,默认选中第一个选项。
手动设置默认值:在下拉选项上添加属性:selected=”selected”
name属性:如果数据要提交就必须有name属性
cols属性:文本域的宽
rows属性:文本域的高
文本域的默认值设置:直接写在textarea标签体里边。
在head标签里增加子标签style,把样式写在style标签体里
选择器{
样式名:值;…
样式名:值;
}
在head标签里使用link标签来引入外部的css文件
优先级:id选择器 > class选择器 > 标签选择器
多个选择器之间使用空格隔开,表示下级选择器。
空格表示后代,而不是父子关系
div span{样式….}
选择器[属性名=’值’]{样式…}
js的作用:用来操作浏览器或者操作html文档的
使用script标签,把jsp代码写在script标签体里
alert();
使用script标签引入外部的js文件
js代码在html内部任意位置都可以运行,有一个原则:在不影响页面显示效果的前提下,js越晚加载越好
定义数组:
var arr = new Array();
var arr = new Array(3);
var arr = new Array(“a”, “b”);
var arr = [“a”, “b”];
属性:
length:用来获取数组的长度,或者设置数组的长度
方法:
join(分隔符):把数组拼接成字符串
arr3.concat(arr1, arr2):把多个数组合并成一个
Math.PI
Math.abs():绝对值
Math.ceil():向上取整
Math.floor():向下取整
Math.round():四舍五入
Math.random():取随机数
定义日期对象:var date = new Date();
常用方法:
toLocaleString();:转换成本地日期字符串
getTime():获取毫秒值
setTime():设置毫秒值
定义正则表达式:
var reg = new RegExp(“表达式”);
var reg = /表达式/;
常用方法:
reg.test(字符串):校验字符串格式,返回boolean值
==只比较值,值相同就是true
===比较值和类型,都相同才是true
js里进行boolean类型的逻辑运算,只有&&和||,没有&和|
+:如果有字符串,是拼接字符串。如果全部都是数据,是加法运算
-*/:如果有字符串,会尝试转换成数据再运算。如果转换不成功,结果NaN
if判断和Java的if判断不同。
if判断时,参数类型:
boolean:
number:0是false,非0是true
string:””是false,非””是true
null:始终是false
undefined:始终是false
function add(a, b){
return a+b
}
add(3, 5);
var fn = function(a, b){
return a+b;
}
匿名函数应用方式1:fn(3, 5);
匿名函数应用方式2:把匿名函数作为另外一个函数的实参传递进去
setTimeout(function(){}, 2000);
onclick/onload/onsubmit/onchange
document.getElementById(“btn1”).οnclick=function(){
alert();
}
普通弹窗alert()
确认弹窗confirm()
输入弹窗prompt()
执行多次的定时器:
var timer = setInterval(函数对象, 间隔毫秒值);
clearInterval(timer);
执行一次的定时器(延时器)
var timer = setTimeout(函数对象, 延迟毫秒值)
clearTimeout(timer);
parseInt():转换成整数
parseFloat():转换成小数
eval():把字符串作为js代码来执行
encodeURI():编码字符串
decodeURI():解码字符串
var url = location.href;
location.href = “网址”;//在当前窗口打开页面
window.open(“网址”);//在新窗口打开页面
前进一步:forward()
后退一步:back();
切换n步:go(n); n是正数前进n步;n是负数后退n步
document.getElementById
document.getElementsByName
document.getElementsByTagName
document.getElementsByClassName
var divElement = document.createElement(“div”);
父标签对象.appendChild(子标签对象);
获取标签体:标签对象.innerHTML
设置标签体:标签对象.innerHTML = “标签体的内容”
var value = 标签对象.属性名;
var value = 标签对象.getAttribute(“属性名”);
标签对象.属性名 = 值;
标签对象.setAttribute(“属性名”, 值);
jQuery是一个js框架,用来简化js代码的。提供了更简单的dom,event, animate, ajax的简易操作。
祖孙选择器$(“a b”)
父子选择器$(“a>b”)
兄弟选择器$(“a+b”)
弟弟选择器$(“a~b”)
$(“a[attr]”):包含attr属性的所有a元素
$(“a[attr=’v’]”):attr属性值是v的a元素
$(“a[attr^=’v’]”):attr属性值以v开头的a元素
$(“a[attr$=’v’]”):attr属性值以v结尾的a元素
$(“a[attr*=’v’]”):attr属性值中包含v的a元素
$(“a[attr!=’v’]”):attr属性值不等于v的a元素
$(“a[attr=’v’][attr1]”):复合属性选择器
:first 第一个
:last 最后 一个
:even 索引为偶数的
:odd 索引为奇数的
:not(.cls) 排除掉selector的结果
:eq(n) 索引为n的
:gt(n) 索引大于n的
:lt(n) 索引小于n的
:animated 获取动起来的动画
:header 获取所有标题h1~h6
:enabled 获取可用 的表单项
:disabled 获取不可用的表单项
:selected 针对下拉选项option的,获取被选中的option标签
:checked 针对radio和checkbox的,获取被选中的单选或多选项
操作标签体:html();
操作文件:text()
操作值:val()
$(“div”).css(“color”,”red”);
$(“#div1”).css(“color”);
attr(“属性名”,属性值);/attr(“属性名”)/removeAttr(“属性名“)
prop(“属性名”,属性值);/ prop (“属性名”)/removeProp(“属性名“)
如果是操作selected和checked属性,必须使用prop相关方法。其它属性优先使用attr,如果不行再用prop
添加class:addClass()
删除class:removeClass()
切换class:toggleClass()
$(“
插入到内部最后:append
插入到内部最前:prepend
插入到前边:before
插入到后边:after
上边四个有反向插入的方法
appendTo
prependTo
insertBefore
insertAfter
$(“#btn1”).click(function(){
alert();
});
$.each(被循环遍历的对象, function(index, element){
//index 是当前对象的索引
//element 是当前对象
//this 是当前对象
});
jQuery对象.each(function(index, element){
//index 是当前对象的索引
//element 是当前对象
//this 是当前对象
});
jQuery表单对象.validate({
rules:{
表单项的name:{
校验规则名称:规则的值,…
校验规则名称:规则的值
}
},
messages:{
表单项的name:{
校验规则名称:提示信息,…
校验规则名称:提示信息
}
}
});
$.validator.addMethod(“规则名称”,function(value, element, params){
//value:要校验的值
//element:要校验的表单项标签对象
//params:校验规则的值
return true表示校验通过;
}, “默认提示信息”);
css/fonts/js
页面上引入的文件:
bootstrap.css/jQuery.js/bootstrap.js
用来做页面布局,本质仍然是div+css。在应用上更接近于table表格布局
container:宽度随设备类型而改变
lg:大型设备
md:中型设备
sm:小型设备
xs:超小型设备
container-fluid:始终宽100%
一行分成12份
第一个*:设备类型
第二个*:单元格占几份
Http协议包括两部分:请求和响应。没有请求就没有响应。
请求方式 请求资源 协议版本
POST /web/login.html HTTP/1.1
格式: key:value 一个键值对是一个请求头,一次请求有n多个请求头。
格式: name=value&name=value…
提交的post表单参数。并不是任何时候请求体都有数据:
post提交,并且有参数的时候。
格式: 协议版本 响应状态码 响应状态描述
比如 HTTP/1.1 200 OK
格式: key:value 一个键值对是一个响应头,一次响应可以有n多个响应头
响应的正文内容。浏览器请求什么,就响应什么。
静态资源:html,js,css, gif
动态资源:一个资源不同人访问,不同时候访问结果不同。jsp,Servlet
Servlet被创建时调用。
参数:ServletConfig是Servlet的配置信息对象(了解)
业务处理方法,每次调用Servlet都必定会执行这个方法。
参数:
代表http请求的request对象
代表http响应的response对象
何时创建:默认第一次访问时,服务器软件创建,创建时必定会执行init,一个Servlet类只有一个对象存在。
何时销毁:服务器关闭,服务器软件执行destory方法
每次访问必定会执行的方法是:service方法
param-name:参数名称
param-value:参数值
值是自然数。
0:表示默认,默认第一次访问时创建
正整数:表示服务器一启动就创建Servlet对象,数值越小优先级越高
继承体系:
LoginServlet extends HttpServlet
HttpServlet extends GenericServlet
GenericServlet implements Servlet
代表整个web应用的对象,服务器软件在启动服务时为每个web应用创建一个ServletContext对象。
ServletContext context = this.getServletContext();
String value = context.getInitParameter(String name);
String realPath = context.getRealPath(服务端路径);
setAttribute
getAttribute
removeAttribute
何时创建:服务器启动时
何时销毁:服务器关闭时
作用范围:整个web应用
代表http响应,主要是用来由服务端向客户端发送数据
设置响应状态码:
response.setStatus(int code);
设置错误状态码:
response.sendError(int code);
设置响应头:
response.setHeader(String name, String value);
response.setIntHeader(String name, int value);
response.setDateHeader(String name, long value);
追加响应头:
response.addHeader(String name, String value);
response.addIntHeader(String name, int value);
response.addDateHeader(String name, long value);
response.setHeader(“refresh”, “秒数;url=客户端地址”);
response.sendRedirect(String 客户端路径);
PrintWriter writer = response.getWriter();
中文字符型响应体乱码:
原因:response缓冲区默认iso-8859-1,要求缓冲区编码和客户端解码方式一致
解决:
response.setContentType(“text/html;charset=utf-8”);
ServletOutputStream os = response.getOutputStream();
response.setHeader(“Content-Disposition”,”attachment;filename=另存主的文件名称”);
response.setContentType(context.getMimeType(filename));
下载文件时,另存为的文件名称,中文乱码:
原因:通过响应头告诉客户端的文件名称,但是响应头只支持iso-889-1
解决:
先对文件名称进行编码,按照浏览器的解码方式进行编码。
/**
* 自动根据不同浏览器对文件名称进行编码,避免文件下载时中文文件名称乱码
*
*/
public String encodeFilename(HttpServletRequest request, String filename){
try{
String agent = request.getHeader("User-Agent");
if (agent.contains("MSIE")) {
// IE浏览器
filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filename = "=?utf-8?B?"+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {
// 其它浏览器
filename = URLEncoder.encode(filename, "utf-8");
}
}catch(Exception e){
e.printStackTrace();
}
return filename;
}
代表http请求的request对象,主要是用来接收客户端传递过来的数据
获取请求方式 :request.getMethod()
获取请求资源:
request.getRequestURL()
request.getRequestURI()
获取web应用的名称:request.getContextPath();
String value = request.getHeader(String name);
Enumeration values = request.getHeaders(String name);
获取单值参数:String value = request.getParameter(String name);
获取多值参数:String[] values = request.getParameterValues(String name)
获取参数map:Map
获取中文参数乱码:
request.setCharacterEncoding(“utf-8”);
String value = request.getParameter(String name);
value = new String(value.getBytes(“iso-8859-1”), “utf-8”);
必定有三个方法:setAttribute/getAttribute/removeAttribute
生命周期:
何时创建:一次请求开始
何时销毁:一次请求结束
作用范围:一次请求转发链中
request.getRequestDispatcher(服务端路径).forward(request, response);
用来保存某一个客户端和服务端之间,会话数据的技术。
把会话数据保存在客户端
Cookie cookie = new Cookie(String name, String value);
默认有效期:一次会话期间
手动设置有效期:
cookie.setMaxAge(int seconds);
默认有效路径:生成Cookie的资源所在的路径是有效路径,只有浏览器在访问有效路径内的资源时,才会携带Cookie。
手动设置有效路径:
cookie.setPath(有效路径);
response.addCookie(cookie);
Cookie[] cookies = request.getCookies();
创建一个同name,同path,同domain的Cookie,设置有效期为0,发送到客户端覆盖已有的Cookie。
把会话数据保存在服务端,sessionid使用Cookie保存:session依赖于Cookie
HttpSession session = request.getSession();
什么时候获取原有的session:客户端的JSESSIONID和服务端的session对应的上的时候
什么时候创建新的session:客户端的JSESSIONID和服务端的session对应不上的时候。
必定有三个方法:setAttribute/getAttribute/removeAttribute
生命周期:
何时创建:request.getSession(),客户端的JSESSIONID和服务端的session对应不上
何时销毁:服务器非正常关闭/会话超时/手动销毁session.invalidtae()
作用范围:一次会话期间
购物车
登录状态
验证码
JSP文件不能直接运行,必须部署到服务器里。
jsp文件-->翻译-->java文件(Servlet)-->编译-->class文件-->加载并运行class
会被转换成Servlet的service方法里:out.write(Java表达式)
会被原封不动的拷贝到Servlet的service方法里
会被原封不动的拷贝成为Servlet的成员内容
作用在翻译期间,指导服务器软件怎样去翻译jsp
<%@ 指令名称 属性=“值” 属性=“值” %>
指导服务器软件翻译jsp文件。写在jsp第一行
常用属性:
language:jsp支持的脚本语言,仅支持java
contentType:等价于response.setContentType()
pageEncoding:jsp文件实体的编码
import:等价于Java类里的import,是page指令里唯一一个可以出现多次的属性
session:true|false,jsp是否内置session对象。默认true
errorPage:错误页面路径。如果jsp出现异常,会显示错误页面的内容
isErrorPage:true|false,给错误页面使用的。如果为true,jsp会内置exception对象
用来把另外一个页面包含到当前页面中。
<%@ include file=”子页面的服务端路径”%>
用来引入外部标签库
<%@ taglib uri=”” prefix=”” %>
request
response
sessoin
application
pageContext
page
config
out
exception
用来向页面输出内容的,指向自己的缓冲区。当服务器响应时会flush到response缓冲区。
何时创建:JSP对应的Servlet被调用时
何时销毁:JSP对应的servlet被调用完成时
作用范围:当前jsp页面中
用来把另外一个页面包含到当前页面中
EL表达式主要是用来代替JSP中<%=Java表达式%>
基本语法:${requestScope.key} 或者 ${requestScope[“key”]}
${key} 等价于 <%=pageContext.findAttribute(“key”) %>
从小到大开始获取,如果pageScope没有则向上一层域对象里面寻找
${number+1}
使用关键字:gt, lt, ge, le, eq, ne, and, or
使用运算符:>, <, >=, <=, ==, !=, &&, ||
v_null: true
v_number: false
v_empty_string: true
v_notEmpty_string: false
v_bean: false
v_empty_list: true
v_notEmpty_list: false
v_empty_map: true
v_notEmpty_map: false
${age>18?”成年”:”未成年”}
pageScope, requestScope, sessionScope,applicationScope
param
paramValues
header
headerValues
${pageContext.request.contextPath} 获取web应用名称
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
JSTL本身不具备获取数据,数据运算的能力,需要借助于EL表达式
判断为true时,这里的内容会显示
属性:
test:使用EL表达式进行判断
${i}
属性:
var:循环遍历的变量,变量的值是被保存到了pageScope域中
begin:从几开始循环
end:循环到几结束
step:每次循环加几
数据是:${item}
是否每一次循环:${vs.first}
是否最后一次:${vs.last}
当前第几次(序号):${vs.count}
属性:
items:被循环遍历的对象,通常是使用EL从域中取出来的
var:循环遍历的变量,变量的值被保存到了pageScope域中
varStatus:循环状态对象,里边保存了当前循环第几次,是否第一次,是否最后一次
M:Model模型层,通常指JavaBean
V:View 视图层,通常指页面
C:Controller控制层,通常指Servlet
web层:web包
service层:service包
dao层:dao包
domain包:放JavaBean
utils包:放工具类