Html
1、属性 align:对齐方式
bgcolor:背景颜色
target:
_blank在新窗口打开 _self默认,在相同的框架打开
_parent在父框架集中打开 _top在整个窗口打开
framename在指定的窗口打开
2、注释 <!-- 注释 -->
3、文件路径 同一目录下:文件名
上级目录:../
下级目录: 从目标文件开始的文件目录
4、表格 tr行、td列、th表头
<table border="1" align="center" width="80%" bordercolor="green" cellspacing="0" cellpadding="10pt"><!—cellpadding代表文字和行之间的距离-->
<caption>学生成绩表</caption>
<tr><th>姓名</th><th>年龄</th><th>成绩</th></tr>
<tr><td>张三</td><td rowspan="2">21</td><td>34</td></tr>
<tr><td>李四</td><td>56</td></tr>
<tr><td colspan="3">王五</td></tr><!—colspan代表列合并,rowspan代表行合并 -->
</table>
5、表单form
表单域input
type:text文本框、password密码、radio单选按钮、checkbox:复选框
是否需要在本书再版时立即通知您:
<input type="radio" checked="true">是
<input type="radio">否
submit提交按钮、reset重置按钮、button普通按钮
<input type="submit" value="提交">
hidden隐藏域(用来传送数据,不安全)
file:文件上传(两个条件:method=”post”、enctype=”multipart/form-data”)
name:表单域的名字
value:表单域的初始值
size:表单元素的长度,只适用于text、password
maxlength:表单元素中可以输入的最大字符数,只适用于text、password
checked:boolean属性,指定按钮是否是被选中的,只适用于radio、checkbox
readonly:只读的,只适用于text,数据能提交到后台
disabled:表示表单域不能用,数据不能提交到后台
多行文本textarea
<textarea cols=”20” rows=”5”></textarea>//表示可以输入5行20列
下拉列表框select
<select name=”city” multiple>//可以选中多项
<option value=”beijing”>北京</option>
<option value=”shanghai”>上海</option>
<option value=”qingdao” selected=”true”>青岛</option>//默认选中
</select>
域容器fieldset
<fieldset style=”width:200”>
<legend align=”left”>小标题</legend>
用户名:<input type=”text”>
密码:<input type=”password”>
</fieldset>
6、框架frame
frameset:分割窗口
rows分割行cols分割列
frameborder:是否显示框架,0不显示、1显示,默认为1
framespacing:框架间的间距
frame:框架
src:指定框架显示的HTML文件的位置
noresize:设置不可以调整窗口的大小
bordercolor:框架边框的颜色
<frameset rows=”10%,80%,*”>
<frame src=”header.html” noresize>
<frameset cols=”20%,*”>
<frame src=”left.html” noresize>
<frame src=”table.html” noresize name=”right”>
</frameset>
<frame src=”footer.html” noresize>
</frameset>
<noframes>
<body>浏览器版本较低,请升级后访问</body>
</noframes>
marginwidth:窗口内的内容与窗口左右边缘的距离
marginheigth:窗口内的内容与窗口上下边缘的距离
scrolling:是否显示滚动条,no-不显示、yes-显示、auto-默认 自动设置
noframes不支持框架的浏览器
注意:<body></body>标签与<frameset></frameset>标签不能同时使用,不过,如果添加包含一段文本的
<noframes>标签,就必须将这一段文字嵌套于<body></body>标签内
JavaScript
1、增强代码可读性
<-- JavaScript代码 //-->
2、语法结构
1)大小写敏感
2)一句话结束最好加;
3)注释 // /**/
4)弱类型
3、变量命名
1)以字母、下划线_或美元符号$开头
2)余下的字符可以是字母、下划线_或美元符号$、数字
3)最长为255个字符
4)不能有空格、大小写敏感
5)不能使用JavaScript中的关键字或者保留字命名
4、JS变量类型
Undefined:未定义的类型、String、Boolean、Null、Number五种
可以使用typeof(object)来获取变量类型
5、声明 var 变量名[=初始值]
var i = 10;
var j;
alert(typeof(i));//判断i的类型 number
docement.write(123);
6、类型转换
字符串>数值>布尔值 低级与高级相加,强制转换成高级的
字符串数值
parseInt()、parseFloat()、Number()
7、运算符
算术运算符 +、-、*、/、%、++、--(前置先自增再运算、后置先运算后自增)
比较运算符 ==、>、>=、<、<=、!=
逻辑运算符 &&、||、!非
赋值运算符 =、+=、-=、*=、/=
8、try{}catch(){}
try{var a=c}catch(e){alert(e);}
9、Array数组
var arr = new Array();//大小不固定
var arr1 = new Array(5);//大小固定
var arr2 = new Array(“abc”,12,23,”aaa”);//直接赋值
//数组遍历for循环
for(var i=0;i<arr2.length;i++){
document.write(arr2[i]);
}
//数组遍历for each循环(注意:i代表的是索引,不是数值)
for(var i in arr2){
document.write(arr2[i]);
}
数组方法:
1) concat()拼接数组
2) reverse()反转数组
3) join(间隔符) 返回字符串,由间隔符将所有元素连接到一起
4) pop()移除数组中的最后一个元素,并返回这个最后元素
5) shift()移除数组中的第一个元素,并返回这个元素
6) push()给数组添加新元素,并返回数组的新长度
7) slice()截取数组,返回一个新数组
8) sort()返回一个排序后的新数组//先排数组再排字母,先排十位再排个位
9) toString()返回逗号分隔的字符串
代码示例:
document.write(arr3.join(":"));// 56:32:10:4:bbb:aaa:3
document.write(arr3.push("zzz"));//8
document.write(arr3.sort().toString());//10,3,32,4,56,aaa,bbb,zzz
10、Date日期,月份是0-11
var date = new Date();//创建当前日期对象
var date = new Date(1970,6,12);//1970年7月12日
var date = new Date(1970,6,12,15,3,23);//1970年7月12日15时3分23秒
var date = new Date(‘1970/6/12’);//1970年6月12日
日期方法:
1) toLocaleString()//将时间格式转换成字符串Monday, March 13, 2017 14:28:35
2) toLocaleDateString()//将时间格式转换成字符串,返回日期Monday, March 13, 2017
3) toLocaleTimeString()//将时间格式转换成字符串,返回时间14:28:35
4) toGMTString()//使用GMT标准时间将Date转换成字符串Mon, 13 Mar 2017 06:28:35 GMT
5) getTime()//返回毫秒数
6) getMonth()//返回当月号数,比实际小1
7) getDate()//返回当日号数
8) getDay()//返回星期几
9) getHours()、getMinutes()、getSeconds()//返回小时、分钟、秒数
10)setYear()、setMonth()...//设置时间
11) Date.parse("2014/12/12")//用日期字符串表示自1970年1月1日以来的毫秒数
12)Date.UTC(1995,11,12,11,23,24)//返回自1970年1月1日以来的毫秒数
11、Math
1)Math.round()//四舍五入
2)Math.ceil()//向上取整
3)Math.floor()//向下取整
4)Math.sqrt()//取平方根
5)Math.random()//[0,1)之间的随机小数
6)with(Math){document.write(round(2.5))};//在with语句体内,任何对变量的引用
12、String字符串
var sname = “string of text”;
var sname = new String(“stirng of text”);
字符串方法:
1) length;//返回字符串长度,不是length()和java不一样
2) charAt(i);//返回指定索引处的字符
3) concat(str);//连接字符串
4) indexOf(str);//返回String对象内第一次出现字符串的字符位置lastIndexOf();
5) replace(str1,str2);//将str1替换成str2
6) slice(start,end);//返回字符串中起始位置为start,结束位置为end(不包括end)的字符串
7) split(separator,limit);//将字符串以separator作为分隔符切割,返回一个数组,有limit参数,则返回数组的limit个元素
8) substr(start,length);//返回一个从指定位置开始的指定长度的字符串
9) substring(start,end);//返回一个指定位置之间的字符串,不包括end
10) toUpperCase();//转换成大写字母
13、window对象
window.moveBy(20,20);//将窗口向右向下移动20像素
window.moveTo(0,0);//将窗口移动到左上角
window.resizeBy(15,20);//将窗口相对增大15,20
window.resizeTo(450,350);//将窗口大小改为450*350
window.open(url,新窗口名字,特性字符串);//打开新窗口
特性字符串:height、width、location=no没有地址栏、status=no状态栏
var winObj = open(“house,jpg”,”house_1”,”width=500,height=300,scrollbars=no”);
14、弹出对话框
1) confirm(“确认删除吗?”);确认对话框,返回布尔值
2) alert();提示框
3) prompt(“请输入您的名字”,“admin初始值”);输入信息对话框,返回值为输入的字符串
15、定时执行
1)setTimeout(函数名,时间间隔,重复次数),多用于递归调用
var timeld = setTimeout(“hello()”,2000);
clearTimeout(timeld);//清除设置的setTimeout函数
2)setInterval(函数名,时间间隔)
var timeld = setInterval(“hello()”,2000);
clearInterval(timeld);
16、history对象
1)history.go(-3);//向后返回三个访问过的页面
2)back();//与history.go(-1)功能相同
3)forward();//与history.go(1)功能相同
17、location对象
location.href = “about:blank”;//清空页面
18、navigator对象
提供用户使用的浏览器及操作系统等信息
navigator.mimeTypes[n].type
19、screen对象获取用户屏幕信息
width、availWidth可用宽度、colorDepth当前颜色设置所用的位数
20、document对象
forms页面中所有表单的集合
document.forms[0].name.value;//获取值
images页面中所有图像的集合
links页面中所有链接的集合
anchors页面中所有锚的集合
document.getElementById(Id)//获得指定Id对象
document.getElementsByName(Name)//获得指定Name对象的集合
21、事件处理
onBlur 当前元素失去焦点时触发
onFouse 当某个元素获得焦点时触发
onClick 鼠标点击时触发
onDbClick 鼠标双击时触发
onMouseDown 按下鼠标时触发
onMouseMove 鼠标移动时触发
onMouseOut 鼠标离开某对象范围时触发
onMouseOver 鼠标移到某对象范围的上方时触发
onKeyPress 键盘上的某个键被按下并且释放时触发
<input type="button" οnclick="myfunction('Hello')" value="Call function">
<script language="javascript">
function myfunction(txt){
alert(txt);
}
</script>
22、表单元素
通用属性:
– form属性----获取该表单域所属的表单
– name属性----获取或设置表单域的名称
– type属性----获取表单域的类型
– value属性----获取和设置表单域的值
通用方法:
– focus方法----让表单域获得焦点
– blur方法----让表单域失去焦点
通用事件:
onfocus,onblur,onclick,onkeydown,onkeyup,onkeypress,onmouseover,onmouseout,onmousedown,onmouseup,onchange
23、表单元素checkbox应用
<input type="checkbox" name="che1" οnclick="checkall(this)">全选
<input type="checkbox" name="che2" οnclick="unckeck()">反选</br>
<input type="checkbox" name="hobby">看书
<input type="checkbox" name="hobby">运动
<input type="checkbox" name="hobby">旅游
<input type="checkbox" name="hobby">发呆
function checkall(cha){
var hobby = document.getElementsByName("hobby");
for(var i=0;i<hobby.length;i++){
hobby[i].checked = cha.checked;
}
}
function unckeck(){
var hobby = document.getElementsByName("hobby");
for(var i=0;i<hobby.length;i++){
if(hobby[i].checked==true){
hobby[i].checked = false;
}else{
hobby[i].checked = true;
}
}
}
24、表单验证
<form name="form1" action="for.html" method="post" οnsubmit="return ckeckForm()">
密码:<input type="password" name="password" οnblur="password()"/><span id="p"></span><br/>
</form>
function password()
{
var password=document.forms[0].password.value;
var p=document.getElementById("p");
if(password==""|| password.length==0){
p.innerHTML="<font color=red>密码不能为空</font>";
return false;
}
if(password.length<6 || password.length>12){
p.innerHTML="<font color=red>密码必须在6---12位之间</font>";
document.forms[0].password.value="";
return false;
}
p.innerHTML="";
return true;
}
25、正则表达式/^ $/
*:0次或者多次
?:0次或者1次
+:1次或者多次
{}:集合[a-z]
|:或者
\d:数字
\w:字母加数字
举例:
验证电子邮箱地址:/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/
验证固定电话:/^\d{3}-\d{8}|d{4}-\d{7}$/
验证身份证号码:/^\d{15}$|^\d{18}$|^\d{17}[xX]$/
验证方式:
search():若找不到返回-1.如果能找到,返回下标索引
email.search(正则表达式)
test():返回布尔值
正则表达式.test(email)
if(/^\d{15}$|^\d{18}$|^\d{17}[xX]$/.test(email)==false){
alert("身份证号码格式不正确,请重新输入");
document.forms[0].email.value="";
return false;
}
servlet在服务器端运行的java程序
1、servlet的生命周期(工作原理)
单实例多线程
1) new :当页面第一次被请求,调用构造方法,产生本Servlet唯一的实例
2) init():初始化Servlet的数据,只调用一次
3) servicer():处理请求并响应,每次请求每次调用,在生命周期调用多次
4) destroy():服务器关机重启,或者项目重新发布,只调用一次
2、Servlet步骤:
1)编写一个Servlet
<servlet>
<servlet-name>helloservlet1</servlet-name>
<servlet-class>servletTest.helloservlet1</servlet-class>//通过servlet找到字节码文件位置
</servlet>
<servlet-mapping>
<servlet-name>helloservlet1</servlet-name>//服务器端通过用户访问路径得到servlet的名字
<url-pattern>/helloservlet1</url-pattern>//用户的访问路径,可以任意写如/aaa
</servlet-mapping>
2)发布到Tomcat服务器
右击servers—Add and Remove—将工程添加
3)用户访问
访问Servlet的URL:http://ip:port/web工程名字/<url-pattern>的值
访问HTML或者JSP页面的URL:http://ip:port/web工程名字/WebContent下的子目录的路径
3、Servlet和CGI的区别:
Servlet:多线程,数据不安全,进程间切换比较快,效率比较高
CGI:多进程,数据安全,进程间切换比较慢,效率比较低
4、HttpServletRequest:
1)获取表单参数
getParameter(表单域的名字),返回表单中value值,String
PrintWriter out=response.getWriter();
String name=request.getParameter("username");
out.println("Welcome "+name);
getParameterValues(表单域的名字)String[]
当表单参数数据不完整:非空判断
String[] hobby=request.getParameterValues("hobby");
if(hobby==null){
out.println("NO HOBBY");
}else{
for(String h:hobby){
out.println(h+"<br/>");
}
2)获取报头Header信息(了解)
Enumeration getHeaderNames()
String getHeader(报头名字)
int getIntHeader(报头名字)
long getDateHeader(报头名字)
Enumeration getHeaders(报头名字)
5、HttpServletResponse(用字节流)
1)浏览器读取文件
response.setContentType(“application/pdf;charset=utf-8”);//浏览器打开文件的方式在tomcat-conf-web.xml中找
FileInputStream fin = new FileInputStream(“C:\\Web\\HTML.pdf”);//浏览器读取文件的路径
ServletOutputStream sos = response.getOutputStream();
byte[] bt = new byte[1024];
int len = 0;
while((len = fin.read(bt))!=-1){
sos.write(bs,0,count);
sos.flush();
}
fin.close();
sos.close();
2)中英文乱码问题
中文格式:
UTF-8(推荐)、GB2312、GBK、GB18030
post方式提交:
request.setCharacterEncoding(“UTF-8”);//写在输出流之前,请求时
response.setContentType(“text/html;charset=utf-8”);//响应时
get方式提交:
//第一种方法:重新构造字符串(推荐)
name = new String(name.getBytes(“ISO-8859-1”),”UTF-8”);
//第二种方法:修改Tomcat-conf-server.xml文件,查找8080
<Connector port=”8888” protocol=”HTTP/1.1” connectionTimeout=”20000”
redirectPort=”8443” URIEncoding=”utf-8”/>
3)设置报头信息
setIntHeader();
response.setIntHeader("Refresh", 2);//页面每2秒钟刷新一次
setHeader();
response.setHeader("Refresh", "2;url=http://www.baidu.com");//页面两秒钟后跳转到百度首页
setDataHeader();
页面无缓存:
response.setHeader("Pragma", "No-cache");//http1.0
response.setHeader("Cache-Control", "no-cache");//http1.1
response.setDateHeader("Expires", 0);//ie
4)页面跳转(重定向和转发的区别)
重定向:多次不同请求,地址栏发生变化,可以跳转到任意web应用下
response.sendRedirect("http://www.baidu.com");//跳转到百度首页
response.sendRedirect("Img");//跳转到相对路径下的Servlet页面
转发:同一请求,地址栏不发生变化,只能在本web应用下跳转
//方式一
RequestDispatcher rd=request.getRequestDispatcher("Img");
rd.forward(request, response);
//方式二,相对于java工程的路径
this.getServletContext().getRequestDispatcher("/Img").forward(request,response);
//方式三
this.getServletContext().getNamedDispatcher("Img").forward(request, response);
6、格式良好的web应用:
WEB-INF:客户端禁止访问,服务器端可以访问,禁止通过URL访问
class目录:字节码文件
lib目录:第三方的jar包
web.xml文件:配置信息
可以转发访问放在WEB-INF下的文件,不可以重定向访问,因为重定向访问经过地址栏,相当于客户端的访问,放在
WEB-INF下的文件只能通过服务器端访问,不能通过客户端访问
RequestDispatcher rd = request.getRequestDispatcher(“WEB-INF/hello.html”);
rd.forward(request,response);
7、配置文件web.xml
<servlet></servlet>中的语句
<load-on-startup>10</load-on-startup>//servlet加载的顺序,数值越小越先加载
举例:
<servlet>
<servlet-name>HelloWordservlet1</servlet-name>
<servlet-class>servletTest.helloservlet1</servlet-class>//通过servlet找到字节码文件位置
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Helloservlet1</servlet-name>
<servlet-class>servletTest.helloservlet1</servlet-class>//通过servlet找到字节码文件位置
<load-on-startup>2</load-on-startup>
</servlet>
servlet-name:Servlet名字
servlet-class:Servlet的完整路径名
url-pattern:用户访问路径
<url-pattern>*.do</url-pattern>//访问路径可以自己设置,说明任意路径+.do及可以访问页面
init-param:初始化参数(了解写在一个<servlet></servlet>中),只能在本Servlet中使用,只能在init方法中调用,通过ServletConfig的getInitParameter()方法获取参数的值
context-param(了解与<servlet></servlet>并列):所有的Servlet均可以使用,任何方法中都可以调用,通过ServletContext的getInitParameter()方法获取参数的值,一般放数据库的参数;
<context-param>
<param-name>driver</param-name>
<param-value>oracle.jdbc.driver.OracleDriver</param-value>
</context-param>
protected void doGet(HttpServletRequest request, HttpServletResponse response){
String driver=this.getServletContext().getInitParameter("driver");
System.out.println("driver:"+driver);
}
错误信息友好页面的处理
<error-page>
<error-code>404</error-code>//错误码404路径错误、500空指针错误
<location>/404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>//错误信息的处理
<location>/exception.jsp</location>
</error-page>
exception.jsp文件中写
<body>
<h1>
Error!
</h1>
</body>
8、打包 .war包
jar –cvf 包名.war*
9、过滤器Filter
过滤器的生命周期
1) new Tomcat服务器一启动的时候产生过滤器对象
2) init()初始化参数数据,只调用一次
3) doFilter()每次请求每次调用
4) destroy()只调用一次,服务器关机重启等之前
过滤器的实现步骤(与在web.xml中的书写顺序有关,请求时123,响应时321)
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>WebXml.Servlet.MyFilter</filter-class>//过滤器路径
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>//过滤的文件类型,过滤所有文件,*.html过滤所有html文件
</filter-mapping>
chain方法必须在doFilter方法中实现
System.out.println("doFilter2...");//请求时执行
chain.doFilter(request, response);//调用下一个过滤器或者资源
System.out.println(2);//响应时执行
过滤器的应用(中英文乱码问题)
在doFilter方法中写下方代码即可
HttpServletRequest request=(HttpServletRequest)req;//转换格式
HttpServletResponse response=(HttpServletResponse)res;
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request, response);
Servlet要是安全的,实现SingleThreadModel接口,该接口已过时,面试时会问
10、Servlet状态管理:
http协议:无状态
客户端状态管理:数据不安全,减轻了服务器的负担
Cookie:最多4kb
永久性cookie:setMaxAge(int seconds)
暂时性cookie(默认):浏览器关闭就消失
隐藏域hidden
查询字符串:get方式提交 ? &
PrintWriter out = response.getWriter();
Cookie[] cooks = request.getCookies();
if(cooks==null){
for(int i=0;i<5;i++){
Cookie cookie = new Cookie("cookieName:"+i,"cookieValue"+i);
cookie.setMaxAge(24*3600);
response.addCookie(cookie);
}
out.println("<h1>Set Cookies OK</h1>");
}else{
out.println("<table border=\"1\" align=\"center\" width=\"80%\" cellspacing=\"0\">");
out.println("<tr><th>cookieName</th><th>cookieValue</th></tr>");
for(int i=0;i<5;i++){ out.println("<tr><td>"+cooks[i].getName()+"</td><td>"+cooks[i].getValue()+"</td></tr>");
}
out.println("</table>");
服务器端状态管理:数据安全,加重了服务器的负担
HttpServletRequest:同一请求范围内有效,转发可以读取,重定向不可以,因为重定向不是同一个request对象
setAttribute(String name,Object obj);//存储数据
getAttribute(String name);//读取数据
removeAttribute(String name);//删除数据
getAttributeNames(String name);
代码举例:
request.setAttribute("username", "admin");//<==>String username="admin" ;
request.getRequestDispatcher("ShowRequestAttribute").forward(request, response);
ShowRequestAttribute文件代码
PrintWriter out = response.getWriter();
String username = (String) request.getAttribute("username");
out.println("<font color=\"pink\">username:"+username+"</font>");
HttpSession同一会话范围内有效
Session工作原理:
客户端发送请求,服务器端为客户创建一个session对象,服务器通过cookie返回一个sessionId给客户端,以后客户端再次发送请求带着sessionId,服务器端根据发送过来的sessionId返回session对象
getSession()与getSession(boolean)的区别:
1)getSession();与getSession(true)相同,如果现在已有session对象,使用已有的session对象,如果没有session对象,则新建一个
2)getSession(boolean); getSession(false) 如果现在已有session对象,使用已有的session对象,如果没有session对象,则返回null
一般通过暂时性cookie将sessionId送到客户端,但是客户端浏览器禁止cookie,则需要通过URL重写
Servlet线程安全:实现SingleThreadModel接口
encodeURL(String url);
encodeRedirectURL(String url);//重定向的重写
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
out.println("<h1>Session Info</h1>");
out.println("isNew:"+session.isNew()+"<br/>");
out.println("SessionId:"+session.getId()+"<br/>");
out.println("CreateTime:"+session.getCreationTime()+"<br/>");
out.println("CreateTime:"+new Date(session.getCreationTime())+"<br/>");
out.println("LastAccessedTime:"+new Date(session.getLastAccessedTime())+"<br/>");
out.println("<br/>");
out.println("<h1>Request Sessioninfo</h1>");
out.println("SessionId:"+request.getRequestedSessionId()+"<br/>");
out.println("FromCookie:"+request.isRequestedSessionIdFromCookie()+"<br/>");
out.println("FromURL:"+request.isRequestedSessionIdFromURL()+"<br/>");
out.println("isValid:"+request.isRequestedSessionIdValid()+"<br/>");
out.println("<a href="+request.getRequestURI()+">test</a><br/>");
out.println("<a href="+response.encodeURL(request.getRequestURI())+">URL</a><br/>");
session的会话时长:
1) setMaxInactiveInterval(int interval)//秒
2) tomcat服务器的web.xml
<session-config>
<session-timeout>30</session-timeout>//分钟
</session-config>
session对象的销毁
1) 会话自然过期
2) invalidate()立即销毁session对象;注销时能用到
3) 关闭浏览器,sessionId马上销毁,但是session对象仍然会在服务器端存活一段时间
session中存储的数据:同一个会话范围内有效
SetAttribute(String name,Object obj);存储数据
getAttribute(String name);读取数据
removeAttribute(String name);删除数据
getAttributeNames();
ServletContext:所有用户共享,并且与web应用有相同的生命周期,做在线人数统计
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
ServletContext application=this.getServletContext();
Integer count=(Integer)application.getAttribute("count");
if(count==null){
application.setAttribute("count", 1);
}else{
count++;
application.setAttribute("count", count);
}
out.println("在线人数为:"+application.getAttribute("count"));
JSP(java Server page)Java服务器页面
1、 Servlet:看做是嵌入HTML标签的类(数据的控制)
JSP:看做是嵌入Java代码的HTML(数据的显示)
2、 JSP的工作原理:
当页面第一次被请求时,把Java代码转换成Servlet,然后响应回去,之后请求,如果页面没有变化,直接响应就可以,如果Servlet发生变化,再请求时,重新转换成Servlet,然后再响应
3、 JSP转换将文件放在Tomcat的work文件下
4、 JSP的经典语法:
注释:<%-- --%>浏览器不可见
<!-- -->查看源文件,浏览器可见
声明:<%! %>声明方法和成员变量
脚本段:<% %>句子和局部变量,如if循环语句
表达式:<%= score %>输出到浏览器,等价于<%out.println();%>
指令:<%@ %>
迭代语句:跨脚本段 遇到Java代码跳入脚本段,遇到HTML标签跳出脚本段
普通语句
<%
int score=12;
if(score==100){
out.println("<h1><font color=\"red\">去公园玩</font></h1>");
}else{
out.println("<h1><font color=\"blue\">在家反省</font></h1>");
}
%>
迭代语句
<%
int score=100;
if(score==100){
%>
<h1><font color="red">去公园玩</font></h1>
<%
}
else{
%>
<h1><font color="blue">在家反省</font></h1>
<%} %>
5、page指令 设置当前页面的信息
language:语言
contentType:设置当前页面的编码格式,默认为ISO-8859-1
pageEncoding:设置当前页面的编码格式,默认为ISO-8859-1
import:导包 可以出现多次,如果写在一个import中,中间用逗号间隔
session:当前页面是否有session对象,默认为true
extends:JSP页面生成的Servlet类的父类
buffer:表示缓冲器大小,默认8kb
autoFlush:默认为true是否自动刷新缓冲区
isThreadSafe:是否是线程安全的,默认为true
isELIgnored:默认为false不忽略,是否忽略EL表达式
isErrorPage:默认为false,页面是否为错误页面
errorPage:后面跟错误页面的URL路径
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" buffer="1kb" import="java.sql.Connection" autoFlush="false" isELIgnored="false"%>
6、include指令
include指令(静态包含)与include动作(动态包含)的区别
include指令:只转换成一个Servlet,转换成Servlet时就包含进来,不可以使用表达式
<%@include file=”header.jsp”%>
include动作:转换成多个Servlet,响应时包含进来,可以使用表达式
<jsp:include page=”<%=header.jsp%>”></jsp:include>
7、taglib指令JSP三个指令:page、include、taglib
8、JNDI:数据库连接池
在web应用下的META-INF下新建context.xml配置文件
<?xml version=”1.0” encoding=”UTF-8”?>//告诉我们是一个xml文件
<Context>
<Resourse name=”jdbc/mysourse”
auth=”Container”
type=”javax.sql.DataSourse”
driverClassName=”oracle.jdbc.driver.OracleDriver”
url=” jdbc:oracle:thin:@YLMF123-3131857:1521:orcl”
username=”scott”
password=”tiger”
maxActive=”30”
maxIdle=”5”
maxWait=”10000”
/>
</Context>
//name表示Resourse资源的JNDI的名字
//auth表示这个资源的管理者Application(web应用创建和管理Resourse)、Container(容器创建和管理Resourse)
//type表示Resourse所属的Java类
//maxActive数据库在此服务器上打开的最大连接数
//maxIdle数据库在此服务器上打开的最小连接数
//maxWait最大的等待时间,毫秒
使用:
Context context=new InitialContext();
DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/mysource");
conn=ds.getConnection();
9、jsp下的转发
<jsp:forword></ jsp:forword>
10、jsp的9个内置对象
1)request HttpServletRequest
request.getAttribute(“”);
request.getParameter(“”);
2)response HttpServletResponse
response.sendRedirect(“”);
response.encodeURL(“”);
response.getWriter();
3)session HttpSession
session.setAttribute(“”);
4)application ServletContext
application.setAttribute(“”,””);
application.getAttribute(“”);
5)config ServletConfig
config.getInitParameter(“”);
6)out 默认值为null JspWriter
7)page 默认值为this,指的是当前Servlet Object
8)exception Throwable是一个类,与exception是继承关系
9)pageContext PageContext
pageContext:
1) 产生其他内置对象
2) 存储page作用域范围内的数据,以及其他作用域(request、session、application)范围内的数据
10、JSP四个领域范围(作用域范围)
1)page:当前页面有效
2)request:同一请求范围内有效
3)session:同一会话范围内有效
4)application:web应用范围内有效
11、JavaBean:是一种规范,是一种可移植的组件
12、成为JavaBean的规范
1)必须是公开类
2)必须是无参的构造方法
3)属性xxx必须是getXxx或者SetXxx命名
4)实现Serializable接口
5)该bean放在某个包中(前三个条件必须满足)
程序如下:
public class Users implements Serializable{
private int id;
private String username123;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username123;
}
public void setUsername(String username) {
this.username123 = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
13、用jsp对bean进行赋值和输出
<jsp:useBean>相当于new一个对象
<jsp:setProperty>赋值
<jsp:getProperty>取值
程序如下:
<body>
<jsp:useBean id="u" class="com.neusoft.bean.Users" scope="session"></jsp:useBean>
<jsp:setProperty property="*" name="u" />
//属性的名字应与表单域中的name相同,可以用*通配符
//否则用以下代码
<jsp:setProperty property="id" name="u" param="id"/>//相当于u.setId(12);
<jsp:setProperty property="username" name="u" param="name"/>
<jsp:setProperty property="password" name="u" param="pwd"/>
Id:<jsp:getProperty property="id" name="u"/><br/><!-- u.getId() -->
Name:<jsp:getProperty property="username" name="u"/><br>
Password:<jsp:getProperty property="password" name="u"/>
</body>
14、EL表达式:通常与JSTL一起使用
1)语法:${} 花括号里面可以使用.或者[]
如:${requestScope.user.id }
2)有些情况必须使用[]:数组、List集合、Map集合、变量中有特殊字符(如na$me需要用[“na$me”])
数组:${requestScope.arr[1] }<br>
List集合:${requestScope.list[0].username }<br>
Map集合:${requestScope.map["m2"].password}
3)el的隐含语法:
<%=request.getParameter("name") %>//取表单域的值
${param.name }//取表单域的值
${header.host }//获得报头信息,主机名字
${cookie }//获得cookie
4)运算符:+、-、*、/(div)、%(mod)
${18 div 10} //输出1
${2==4} //false
${2<4 && 5>3} //true
15、JSTL(JSP Standard Tag Library)标签库
1)导包:
在WEB-INF的lib导入standard-1.1.2.jar包(现成的)
在jar包下的META-INF的c.tld找到uid路径,复制粘贴到
<%@taglib uri=”复制” prefix=”c”%>
2)out 标签 输出
<body>
<jsp:useBean id="user" class="com.neusoft.el.User" scope="request"></jsp:useBean>
<jsp:setProperty property="id" name="user" value="12"/>
<jsp:setProperty property="username" name="user" value="abc"/>
<jsp:setProperty property="password" name="user" value="123"/>
<!-- out标签 -->
<c:out value="admin"></c:out>
EL表达式:${requestScope.user.password }
out标签:<c:out value="${requestScope.user.password }"></c:out>
default属性:<c:out value="${name}" default="qqq"></c:out>
//value对象存在,即输出,不存在即返回default设置的默认值
<%
String str="<address>";//xml标签
request.setAttribute("str", str);
%>
//是否屏蔽xml标签,默认值为true,即屏蔽
escapeXml标签:<c:out value="${str }" escapeXml="false"></c:out>
</body>
3)set标签 声明变量
<c:set var=”u” value=”guest” scope=”session”></c:set>
Set标签:${sessionScope.u}//输出guest
//针对JavaBean的属性,target指的是JavaBean的id
<c:set target=”${user}” property=”username” value=”John”></c:set>
${user.username}
4)remove标签 删除
<c:remove var=”u”>
5)if标签 判断,只能放一条if语句
<c:set var=”age” value=”2300” scope=”request”></c:set>
<c:if test=”{${age<0 || age>200}”>年龄不合法</c:if>
6)choose标签 多条件判断
<c:choose>
<c:when test=”${age<0 || age>250}”>年龄不合法</c:when>
<c:when test=”${age<50 || age>250}”>中年人</c:when>
<c:otherwise>老年人</c:otherwise>
</c:choose>
7)forEach标签 遍历数组、集合
//item:集合的名字
//var:遍历集合是所遍历到的元素的名字
//begin=“1” end=“4”部分遍历
//step 步长值 默认为1
//varStatus 状态值变量 index下标 count第几个元素
<!—遍历数组 -->
<c:forEach items=”${arr}” var=”item” varStatus=”aa”>
${item}||${aa.index}||${aa.count}||${aa.first}||${aa.last}
</c:forEach>
<!-- 遍历List集合 -->
<c:forEach items=”${list}” var=”item”>
${item.id}||${item.username}//list集合里面是user对象
</c:forEach>
<!-- 遍历Map集合 -->
<c:forEach>
${item.key}||${item.value.username}//value是user对象
</c:forEach>
16、MVC架构模式(可重用性、可维护性)
发送请求,Servlet(属于控制层)负责处理请求,jsp只负责显示(属于View视图层),JavaBean负责逻辑部分
M(JavaBean):数据的逻辑,与数据库的交互逻辑(dao层和service层)
V(jsp):数据的显示
C(Servlet):数据的控制
a. 处理请求
b. 根据请求,找到某个业务逻辑处理
c. 根据业务逻辑的结果,找到某个视图响应回去
Ajax(Asynchronous JavaScript And XML)
1、步骤
var xmlhttp;
function val{ 1)获取表单数据
var username = document.getElementsByName(“username”)[0];//得到一个数组
2)创建XMLHttpRequest对象
if(window.XMLHttpRequest){//除了ie7以下版本,浏览器中都有XMLHttpRequest对象,如火狐、搜狗等
xmlhttp = new XMLHeepRequest();
}else if(window.ActiveXObject){//ie6,ie6.5
xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
}
3)建立与服务器的连接
if(xmlhttp){//判断是否创建成功
xmlhttp.onreadystatechange = callback;//注意后面不加括号,设置状态变化时调用callback方法
xmlhttp.open(“GET”,”GetServlet?,true);
//method:提交方式,URL:提交到的目标页面,async:是否异步(true表示异步)
//POST方式提交
xmlhttp.open(“POST”,”POSTServlet”,true);
xmlhttp.setRequestHeader(“Content-Type”);
xmlhttp.send(“username=”+username.value);
4)发送请求
xmlhttp.send(null);
}
}
5)编写回调函数,用于存储服务器响应回来的数据
function callback(){
if(xmlhttp.readystate==4){
if(xmlhttp.status==200){
var text = xmlhttp.responseText;//获取服务器的数据
var s = document.getElementById(“s”);
s.innerHTML = “<font color=red>”+text+”</font>”;
}
}
}
2、XML可扩展的标记性语言
格式良好的XML文件
1) 大小写敏感
2) 标签要求正确嵌套
3) 属性值必须被“”修饰
4) 标签必须成对出现
5) 必须要有根元素<?xml version=”1.0”?>
3、DOM(Document Object Model):文档对象模型
标签:Javaweb,javaEE,request,基础知识,String,var,Servlet,response,out From: https://blog.51cto.com/u_12187435/7495470