jsp学习笔记

  • Servlet不支持HTML语法,生成网页需要通过response输出流输出,导致生成页面的代码非常复杂.JSP支持HTML语法,生成HTML页面比较简单
  • JSP和Servlet的区别和关系?
    • JSP和Servle都是用来动态生成网页的
    • Servlet不支持HTML语法,生成网页麻烦
    • JSP支持HTML语法,生成网页比较简单
    • JSP运行时会被翻译成Servlet再执行.所以JSP就是Servlet

jsp脚本元素

  • JSP中的脚本元素
    • 声明
      • 代码 : <%! %>
      • 作用 : 声明的内容会被翻译成Servlet的成员变量, 方法和类 !
    • 表达式
      • 代码 : <%= %>
      • 作用 : 用于向页面输出内容,等价于out.print(). 不能在内容后面添加";"分号
    • 代码块
      • 代码 : <% %>
      • 作用 : 在其中书写任意Java代码.代码块可以和html嵌套使用

jsp注释

  • jsp注释:jsp的注释只存在于jsp的源文件里面,在翻译成servlet的时候就消失了

    <%-- 这是jsp的注释 --%>
    
  • jsp中的java注释:和java一样不解释
  • html注释:语法 :
    • 不能阻止java代码和jsp的运行

jsp指令

  • page指令

    import:用来导入包的

    contentType:相当于response.setContentType();jsp页面相依的MIME类型

    pageEncoding:设置的是保存时采用指定的字符编码集

    errorPage:指定当前的页面发生错误的时候跳转到指定的页面

    iserrorPage:设置某个页面是错误页面,设置为true以后,就可以通过exception过去错误信息

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
  • include指令(静态包含)

    file指定的是要包裹进来的文件,会生成一个java文件

    <%@ include file="index.jsp"  %>
    
  • taglib指令

    导入标签库

    uri:命名空间,prefix:命名空间的名字

    <%@ taglib url="" prefix="" %>
    

jsp内置对象

  • request

    类型:HttpServletRequest 请求对象

  • response

    类型:HttpServletResponse 响应对象

  • session

    HttpSession 回话对象

  • application

    ServletContext web应用全局唯一对象

  • config

    ServletConfig 初始化数据

  • page

    Object 当前jsp生成的servlet对象

    如果一定要使用,需要强制转换成HttpServlet对象

    Servlet有三种数据范围:request,session,servletcontext ,JSP在serlvet三种数据范围基础上,新增了page数据范围

  • pageContext

    • PageContext 当前jsp上下文
  • 可以向page范围存取数据

    • findAttribute方法会依次在page 、request 、session 、 application 四个数据范围进行数据查找.如果找到了就不会往下查找
    • 如果在EL表达式中直接使用 ${name}会调用findAttribute方法在四个范围中依次查找数据
  • 可以获得其它八个隐含对象

    • pageContext封装八个隐含对象的作用:框架编写,得到PageContext对象 相当于得到 JSP九个内置对象
  • exception

    Throwable 当页面是一个错误页面,可以获取的对象

  • out

    JspWriter 向输出流输出内容

jsp动作标签

  • jsp中6个动作标签

    <jsp:useBean>:用于在page范围内查找指定名称的javaBean,如果找不到会创建一个User对象, 然后把这个对象赋值为zhangsan;

    scope:定义那一个数据范围获取一个JavaBean;

    class:全类名,包名+类名;

    id:声明的变量名;

    <jsp:useBean id="zhangsan" class="com.luoluo.User" scope="page" />
    

    <jsp:setProperty>:用于在jsp页面中设置一个JavaBean属性 相当于调用了某属性的get方法

    name:声明的变量的名字

    value:属性值

    property:属性名

    <jsp:setProperty property="age" name="zhangsan" value="10" />
    

    <jsp:getproperty>:用于在jsp页面中获取一个JavaBean属性 相当于调用了某属性的set方法

    <jsp:getproperty property="age" name="zhangsan">
    

    <jsp:include>等价于request.getRequestDispatcher().include() 动态包含

    jsp:include和@include的区别

    • @include是JSP指令,属于静态包含.在jsp翻译为Servlet时完成包含动作,包含的内容是目标页面翻译为Servlet时的源代码,最终只会生成一个Servlet
    • jsp:include是JSP标签,属于动态包含.在servlet执行时完成包含动作,包含的内容是目标jsp翻译为Servlet生成的HTML页面,每个被包含的JSP都会生成一个单独的Servlet,所以最终会生成多个Servlet

    <jsp:forward>等价于request.getRequestDispatcher.forward()

EL表达式

  • 从数组中获取数据

    ${arr[0]}

  • 从集合中获取数据

    ${list[0]}

  • 从map集合中获取数据

    1. ${map["key"]} 得的值是value
    2. ${map.key} 得的值是value
  • empty运算符

    可以用来判断一个对象是否为null,还可以判断是否为空

    ${empty list} //当list为null或size为0的时候,得出的结果都是true

  • 三元运算符

    ${list == null ? " ": " "}

EL内置对象的使用

  • 获取四个数据范围中的数据
    • pageScope
    • requestScope
    • sessionScope
    • applicationScope
  • pageContext : 代表当前jsp上下文.通过该对象可以获取当前应用的路径${pageContext.request.contextPath },等价于<%=request.getContextPath() %>
  • ${param.name} 等价于 request.getParameter("name")
  • ${paramValues.hobby} 等价于 request.getParameterValues("hobby")
  • ${header.referer} 等价于 request.getHeader("referer")
  • ${headerValues["Accept-Encoding"]} 等价于 request.getHeaders("Accept-Encoding")
  • ${initParam.name} 等价于 getServletContext().getInitParamter("name")
  • cookie隐含对象写法
    • ${cookie.address.value } : 等于从所有Cookie中找出name为address的Cookie,并将其中的值取出来JSTL标签库

核心标签库:

  • c:set

    • 保存数据到四个数据范围
    <%
      session.setAttribute("address","shenzhen");
    %>
    <!-- scope用于指定数据范围 var:存数据的时候对应的key vlaue:存数据的时候对应的值-->
    <!-- 实现了和上面的一样的效果,往session里面存值 -->
    <c:set scope="session" var="address" value="shenzhen" />
    
    • 修改四个数据范围中已存在对象的属性值
    <%
      User user = new User();
      user.setAge(16);
      pageContext.setAttribute("usr",user);
    %>
    <!-- target表示指定的对象 property:要修改的对象的属性-->
    <c:set target="${usr}" property="age" value="10" />
    
  • c:if

    • 取代页面if条件判断
    <%
      int a= 8;
    %>
    
    <c:if test="${a>10}">
      a是大于10的
    </c:if>
    <!-- 如果是else的业务逻辑,就用not关键字,里面的条件要用()括起来 -->
    <!-- var就是把判断语句的结果存到一个对象中,对象的名字就是var值,scope就是数据存储的范围 -->
    <c:if test="${not (a>10)}" var="result" scope="page">
      a是小于10的
    </c:if>
    <!-- 这样就可以取出if里面存储的值 -->
    ${result}
    
  • c:url

    • 完成URL重写
    • 结合从c:param进行中文的编码
    <!-- context:当前应用的路径 下面的实例的路径相当于去找 /JSP/jstl/if.jsp 文件 -->
    
    <c:url context="/JSP" scope="" value="/jstl/if.jsp" var="encodeURL">
          <!-- 在客户端禁用cookie的时候,可以重写URL的资源的路径,可以对中文进行转译 -->
      <c:param name="address">深圳</c:param>
    </c:url>
    <a href="encodeURL">这里会跳转到上面的URL指定的路径 </a>
    
  • c:foreach

    • 遍历数组和集合
    <%
      pageContext.setAttribute("arr",new int[]{1,2,3});
    %>
    <!-- items:指定要遍历的对象 -->
    <!-- var:遍历的每一个元素 -->
    <c:foreach items="${arr}" var="a">
      ${a}
    </c:foreach>
    
    • 遍历map
    <%
      Map map = new HashMap();
      map.put("a","aaa");
      map.put("b","bbb");
      map.put("c","ccc");
      pageContext.setAttribute("map",map)
    %>
    
    <c:foreach items="${map}" var="m">
      ${m.key}==>${m.value}
    </c:foreach>
    
    • foreach特殊的用法
    <!-- 求1到100的和 -->
    
    <!--定义一个初始变量,初始值为0-->
    <c:set var="result" value="0" scope="page" />
    <!--求和-->
    <!-- step:递增的时候每递增多少,默认值是1 -->
    <!-- varStatus:获取当前迭代的状态 -->
    <c:foreach begin="1" end="100" var="current" >
      <c:set var="result" value="${result+current}" scope="page"></c:set>
    </c:foreach>
    <!--打印值-->
    ${result}
    
  • c:redirect

    <!--context是项目名 value是文件路径名-->
    <c:redirect context="/JSP" value="/demo1.jsp" ></c:redirect>
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,405评论 0 13
  • 1.学习内容 JSP技术入门和常用指令 JSP的内置对象&标签介绍 EL表达式&EL的内置对象 2.JSP技术入门...
    WendyVIV阅读 2,116评论 1 18
  • JSP页面元素的构成:静态内容,注释,声明,小脚本,表达式,指令。 JSP指令 page指令:通常位于jsp页面的...
    dev_winner阅读 622评论 0 0
  • 一、JSP基础 1.1什么是JSP JSP(Java ServerPage)是Java服务器端动态页面技术。是su...
    晨星资源阅读 1,137评论 0 6
  • 一、jsp介绍 jsp作用jsp全称java server pages(java服务器页面),本质是一个servl...
    圣贤与无赖阅读 1,238评论 0 14