jsp笔记
来源:互联网 发布:ubuntu存储空间不足 编辑:程序博客网 时间:2024/05/22 01:25
jsp=html+java,可以在页面中嵌入java代码
概述:
jsp全称是Java Server Pages ,它和servlet技术一样,都是SUN公司开发的
动态web资源的技术,JSP实际上就是Servlet
html:静态内容
servlet:服务器端的小应用程序。适合编写java逻辑代码,如果编写网页内容(很难受)
jsp:适合编写输出动态内容,但不适合编写java逻辑
jsp原理
jsp内部使用java代码使用<% %>,后台会编译运行java代码,把输出结果放到html中,实现了
动态的网页
1.对于浏览器访问的jsp文件,服务器将jsp文件翻译(转译)为java文件,在编译出class文件
,底层执行class文件,再把数据反馈给浏览器,若已翻译并且转译,则会直接执行class文件
执行速度会更快
2.服务器以流的方式把html标签加载到浏览器执行,java代码直接解析,解析和的结果返回到客服端
3.内置对象:request,response,session,config(ServletConfig),application(ServletContext)
out, pageContext,page,_jspx_out,_jspx_page_context
jsp最佳实践
表单数据的处理,以及分发转向交给servlet,jsp主要负责给用户看的页面
jsp基本语法
1.网页静态内容(html)
2.小脚本
<%java代码%>
3.表达式
<%=文字%>等价于out.print(文字)
4.定义全局变量和方法
<%!int num=10;%>
注:jsp注释不会加载到浏览器,安全且省流量,html注释会加载
jsp的3个指令
jsp指令是为jsp引擎二设计的,他们并不直接产生任何可见输出,而只告诉引擎如何处理jsp页面中的其他部分3大指令:page,include,taglib语法:<%@ 指令名称 属性1=“属性值1” 属性2=“属性值2”......%>//也可以分开写 <%@ 指令名称 属性1=“属性值1”%> <%@ 指令名称 属性2=“属性值2”%>page: 1.lauguage="java" //默认支持java,也只支持java 2.extends="package.class"//默认继承此类,单继承只能继承这个 3.import="..."//导包,和java一样,可以一次写多个包,用逗号隔开 注意:默认导包,lang包,servlet包,http包,jsp包 4.session="true/false"//默认是true,如果是false不创建session 5.buffer="none/8kb/sizekb(自定义)"//默认8kb,不建议修改 6.autoFlush="true/false"//缓冲的刷新清除 7.isThreadSafe="true/false" //false才继承SingleThreadModel接口,一个接口一个 sevlet,线程安全由服务器控制,该接口已过时 8.info="text" 9.errorpage="/???.jsp"//java语句出错时跳转到这个jsp页面,地址开头加/表示当前 web应用的根目录 10.isErrorPage="false/true"//是否创建throwable对象exception。默认为false; 11.isELIgnored:是否支持EL表达式。默认为false,也就是支持(不忽略),EL表达式:${....}相当于out 12.contentType="mimeType[;charset=characterSet]"|"text/html;charset=ISO-8859-1"// 此处的charset是告诉编译器用什么码表来解码 13.pageEncoding="charset"//告诉服务器用什么码表翻译(编码),默认是utf-8 注:开发是主要主要编码方式即可include(包含) 静态包含:把其他资源包含到当前页面中 <%@ include file="/include/header.jsp"%> 动态包含 <jsp:include page="/include/header.jsp"></jsp:include> 区别:翻译时间不同 静态:在翻译时就把两个文件合并,可一个删头,一个删尾,保证代码的不重复 动态:不会合并文件,当代码执行到include时,才包含另一个文件的内容 使用原则:能用静不用动taglib 作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段 <%@ taglib uri="java.sun.com/jsp/jstl/core" prefix="c"%>
6个动作
动态包含
<jsp:forward> 请求转发<jsp:forward page="/7.jsp">等价于request.getRequestDispatcher("/7.jsp").forward(request,response);<jsp:param> 设置请求转发<jsp:param value="123" name="name">//转发的到那个jsp可以用getParameter得到这个值夹在请求转发的标签中<jsp:useBean> 创建一个对象<jsp:useBean id="stu" class="类的位置"></jsp:useBean>等价于Student stu=new Student();<jsp:setProperty> 给指定的对象属性赋值<jsp:setProperty property(属性)="name" name(对象名称)="stu" value(对属性赋的值)="jerry"/>等价于stu.setName("jerry");<jsp:getProperty> 取出指定对象的属性值<jsp:getProperty property="name" name="stu">等价于stu.getName();
9大内置对象
1.request2.response3.session由session="true"开关4.applocationServletContext类的对象,储存主要信息5.exception由isErrorPage="true"开关6.page当前对象的实例,也就是this7.config 读取当前对象的配置信息8.out9.pageContext通过这个对象可以得到其他8个对象,做自定义标签可以操控其他三个域对象setAttribute(String name,Object o,int Scope);Scope:常量PageContext.PAGE_SCOPE//当前页面有效PageContext.REQUEST_SCOPE//一次请求有效,用的比较多,能用request就不要用sessionPageContext.SESSION_SCOPE//一次会话有效,存重要功能PageContext.APPLOCATION_SCOPE//整个应用范围有效,应该少用findAttribute()//在pageContext,request,session,application依次去找,找到就停止
EL表达式
expression language 表达式语言
要简化jsp中的java代码开发
不是一种开发语言,是jsp中获取数据的一种规范
${s} 底层代码等价于 pageContext.findAttribute("s")${s.name} 底层代码等价于 pageContext.findAttribute("s"),getName()实际上找这个对象的name不是通过属性(私有了),而是类似反射,通过getName()方法list集合取值:先将集合添加到request或者session,调用对应名字即可,单独调用集合中某个位置的元素,名字后加[index]map集合取值:先将集合添加到request或者session,调用对应名字即可,单独调用集合中某个元素,名字后面加["键"]
EL运算
${empty str} str本身为空,或者空字符串,或者空集合则返回true注:当碰到null值,会输出空白字符串利用三目运算符可以在EL运算符中使用EL隐式对象: pageContext pageScope requestScope sessionScope applicationScope param ${param.a}==request.getParamemter("userName"); paramValue ${paramValue.a[0]}==request.getParamemterValue("userName"); header ${paramValue["a"]}获得a的请求消息头 headerValues ${paramValue["a"]}获得a的重名请求消息头 initParam cookie ${cookie.a.value}//取到a这个cookie的值
当一个键对应page,request,session,application都有值对应的时候,需要取到对应不同的值的时候可以
可以使用隐式对象和点运算符来取对应的值
JSTL (JavaServerPages Standard Tag Library) JSP标准标签库
使用JSTL实现JSP页面中的逻辑处理。如判断,循环等
使用JSTL
(1).在JSP页面添加taglib指令
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
(2).使用JSTL标签
常用标签介绍
核心标签库
通用标签:set,out,remove
设置变量:<c:set var="num" value=${10+5} scope="page"></c>变量名为num,大小为10,储存在page里面 输出变量:<c:out value="${num } default="aaa""></c:out>输出变量num,若变量不存在,默认输出aaa 删除变量:<c:remove var="num" scope="page"></c:remove>从page中删除变量num 条件标签:if choose <c:if test="${5>3 }">bbbbb</c:if> <c:choose> <c:when test="${num==1 }">11111</c:when> <c:when test="${num==2 }">222</c:when> <c:when test="${num==3 }">3333</c:when> <c:otherwise> fdgfsger </c:otherwise> </c:choose> 注:没有类型else功能的标签 循环标签 <c:forEach var="i" begin="1" end="10" step="1"> ${i }<br/> </c:forEach> //for循环,申请一个i变量,从1开始,每次加1,到10结束 <% List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); request.setAttribute("list",list); %> <c:forEach items="${list }" var="L">${L} <br/></c:forEach> //利用集合的迭代循环输出 <table border="1"> <tr> <th>数据</th> <th>索引</th> <th>计数</th> <th>第一个</th> <th>最后一个</th> <tr> </table>
- jsp笔记
- JSP笔记
- JSP笔记
- jsp笔记
- JSP笔记
- JSP笔记
- jsp笔记
- JSP 笔记
- JSP笔记
- JSP笔记
- jsp笔记
- JSP 笔记
- JSP笔记
- jsp笔记
- jsp笔记
- jsp笔记
- jsp笔记
- JSP 笔记
- SQL数据库完美恢复 SQL数据库损坏修复
- ffmpeg
- C++中串口通信
- 删除delphi编译产生的垃圾文件
- 使用frp通过自定义二级域名访问内网服务器
- jsp笔记
- TotoiseSVN的基本使用方法
- 二叉树各种练习
- java 反射比较两个类型相同的对象 内部的变量是否相等
- Controller向前端传值以及跳转页面
- Java并发编程之CAS
- Spring思维导图,让spring不再难懂(一)
- 如何在前端选择本地图片并上传
- vue-resource post请求的坑