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):文档对象模型
转载请注明原文地址: https://www.6miu.com/read-19446.html