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>