jsp学习 EL JSTL C标签

JSP

Java server page    服务器端用来开发动态网页
原因: 替换servlet中显示逻辑的servlet
            (获得作用域中的数据 + 想浏览器显示网页)
            java+HTML   (java代码嵌套html标签)

第一个JSP程序

//显示当前系统时间
1.代码命名: *.JSP
            HTML代码+java代码(html标签嵌套java代码)
2.部署tomcat中
    部署地位相当于html文件。
3.访问JSP
    和HTML访问一样。
注意:
    ① jsp开发无须在web.xml中注册
    ② jsp代码无须程序员编译
    JSP程序执行:
        HTML表签直接输出浏览器
        java代码,执行。如果有执行结果,显示给浏览器.

JSP对比servlet

servlet
    java嵌套HTML
    开发后需要程序员编译
    在web.xml配置
    修改代码需要重新启动tomcat

    
JSP
    HTML嵌套java
    直接部署,无须程序员手动编译
    无需要在web.xml配置
    修改代码无须重新启动tomcat

JSP中java脚本元素

表达式脚本:  将结果输出给浏览器
    表达式?    1+1     a/b     a++     a==b
        <%= java表达式 %>
            * 末尾不能有分号 ;
            * 表达式有执行结果;
普通脚本
    流程控制代码.
    <%  普通java代码 %>
声明脚本
    <%! 声明变量,定义函数的代码%>

注意:
    1. java脚本不能嵌套HTML标签
    2. java脚本不能相互嵌套.

JSP原理

本质上是Servlet程序.
JSP执行原理:
    1. 浏览器请求jsp程序,tomcat将jsp翻译servlet程序(*.java)
    2. 将servlet程序编译成class文件
    3. 调用servlet程序service方法提供响应服务。
*  一次访问jsp
    tomcat将jsp翻译servlet程序(*.java)
*  一旦修改jsp
    tomcat将jsp重新发翻译servlet程序(*.java)

JSP的翻译规则

1.HTML标签部分,翻译成响应输出流方法中内容
    JSP:
        <body>
            <h1></h1>
        </body>
    翻译Servlet:
        pw.println("<body>");
        pw.println("<h1></h1>");
        pw.println("</body>");
2. 表达式脚本
    将表达式翻译输出语句中的代码。
    JSP:
        <%=new java.util.Date() %>
    翻译servlet:
        pw.println(new java.util.Date());
3. 普通脚本
    翻译成service方法内部的代码
4. 声明脚本
    翻译成Servlet的成员变量(成员方法)
jsp翻译规则.png

JSP指令元素

页面指令

<%@page 属性=’值‘%>
导包:
    servlet:    import java.util.*;
    jsp:        <%@page import="java.util.*" %>

设置响应的编码格式:
    servlet:
        resp.setCharacterEncoding("GBK");
        resp.setContentType("text/html");
    JSP:
        contentType='text/html;charset=GBK'
设置jsp文件流编码
    JSP:
        pageEncoding='GBK'
获得session:
    servlet: getSession();
    JSP:      session='true'    当前jsp中可以使用session
            * session='false'   当前jsp中无法使用session
                     翻译后的servlet中没有getSession();
              默认  值  true;

错误页面
    isErrorPage=’false|true‘
        表明当前jsp是否是一个错误页面
        包含隐含exception对象。
    errorPage='url-pattern'
        指明如果当前页面有异常,自动跳转errorPage指向的页面

isELIgnored="false" 表明当前页面是否忽略EL表达式 [了解]

标签库指令

<%@taglib uri='' prefix=''%>
    uri:    引入外部标签库的地址
    prefix: 标签前缀
例如:
    <%@taglib uri='/struts-tags' prefix=’s‘%>       
        <s:if>

包含指令

<%@include file=’被包含的jsp的url-pattern路径‘%>
注意:
    静态包含,源代码包含,注意java变量重复声明的问题。
包含指令.png

动作指令

包含动作

<jsp:include page="被包含的页面的路径 url-pattern"></jsp:include>

*   输出包含,动态包含。不会存在java变量冲突的 问题.
动态包含.png

JSP 9大内置(隐含)对象

什么叫内置对象:
    可以直接在java脚本中使用。不能在声明脚本中使用
    是service方法局部变量.
exception   
request     HttpServletRequest
session     HttpSession
application ServletContext

response    HttpServletResponse
page        this    Object  
out         JspWriter   面向浏览器的输出流
config      ServletConfig
            web.xml ------ ServletContext
            filter标签------FilterConfig
            servlet标签------ServletConfig
            
pageContext【重点】
    1. 作用域:存储命名属性
        pageContext.setAttribute("name",值);
        pageContext.getAttribute("name");
        生命周期: 仅限当前jsp页面。
    2. 管理其他所有的作用域:
        pageContext
        request
        session
        servletContext(application)
        获得作用域中的值:
            pageContext.getAttribute(arg0, arg1)
                参数1: 获得的命名属性的名字
                参数2:    指定的作用域 是一个int类型的数字  作用域对应的常量
                        pageContext     1       PageContext.PAGE_SCOPE
                        request         2       PageContext.REQUEST_SCOPE
                        session         3       PageContext.SESSION_SCOPE
                        servletContext  4       PageContext.APPLICATION_SCOPE
            
        向作用域中存储值
            pageContext.setAttribute(name, Value,作用域对应的常量)
    3.  管理其他所有jsp内置对象。
            获得request对象
                pageContext.getRequest();
            获得session对象
                pageContext.getSession();
            获得application对象(ServletContext)
                pageContext.getServletContext();
        案例:
            动态获得  "/项目名"
                HttpServletRequest
                使用request:
                request.getContextPath();
                使用pageContext:
                ((HttpServletRequest)pageContext.getRequest()).getContextPath()

栗子

jsp翻译规则.png
:
导入PersonSystemServlet项目,改名字;
左边---右键---import--general--Existing projects in workspace
---brows---项目目录---勾选 copy projects into workspace
该项目名:
项目名--右键--refacter---rename
项目名--右键--properties--搜 web--修改 web context root(改为项目名一致)
1.将通讯录展示所有联系人的页面
该JSP实现。
旧: showAllPersonAction --------->showAllPersonView
调用service获得list 获得request作用域list
list存入request作用域 显示成一个table
forward
新: showAllPersonAction --------->showAllPersonView.jsp
调用service获得list 获得request作用域list
<%request.getAttribute%>
list存入request作用域 显示成一个table
forward html嵌套java脚本.

2.完成显示所有商品功能
    showAllProductAction            showAllProductView.jsp
        调用service获得list             获得request作用域list
        list存入request作用域            显示成一个table
        forward 
    ProductService:
        public List<Product> getAllProducts();
    ProductDAO
        public List<Product> selectAllProducts();
    实体Product:
    添加JDBCUtil  配置文件     jar包
    建表
    创建web项目

批量删除

批量删除.png

EL

expression language 表达式语言
特点: 结果输出给浏览器

语法:
    java表达式脚本:  <%= java表达式,调用方法%>
    EL:             ${java表达式}
        访问语法:   []      .

语法介绍

1.  数学运算符   +   -   *   /   %
        注意: ${10/3}         3.33333333
2.  逻辑运算符   >   <   >=  <=  !=  ==
                &&  ||  !
3.  三目运算符   booleab表达式?值1:值2

4.  访问作用域中的值
    访问pageContext作用域
        ${pageScope.命名属性的name}
    获得request作用域中的命名属性
        ${requestScope.命名属性的name}               不是 <%=request%>
    获得session作用域中的值
        ${sessionScope.命名属性的name}
    获得servletContext作用域中的值
        ${applicationScope.命名属性的name}
5.  访问对象的属性
        ${对象.属性名}
            * 原理 调用对象.get属性();
            例如:
                ${person.username}
                person.getUsername()                
    获得  /项目名
    java:   <%=request.getContextPath()%>
            <%=((HttpServletRequest)pageContext.getRequest()).getContextPath()%>
    EL:     ${pageContext.request.contextPath}  【重要】
6.  访问请求参数
    ${param.请求参数的name}
7.  访问cookie
    ${cookie.cookie的name}
    ${cookie.cookie的name.value} //获得cookie得到value
8.  访问数组和List集合
    ${集合[下标]}
9.  访问Map
    ${map.key}  //通过map的key获得value

总结EL中可以使用的内置对象

pageScope requestScope sessionScope applicationScope
pageContext param   cookie
*重点记住:
    1. 不要再JSP写java代码
    2. 
        获得request作用域中的命名属性
            ${requestScope.命名属性的name}               
        获得session作用域中的值
            ${sessionScope.命名属性的name}

JSTL part I

jsp标签库。
作用: 条件判断,流程控制,循环。 url生成。
使用:
    1. 导入jstl的jar包
    
    2. 导入jstl
        <%@taglib uri='http://java.sun.com/jsp/jstl/core' prefix=‘c’%>

if: 单条件判断
    使用:
        <c:if test='boolean表达式结果'>
            条件成立执行。
        </c:if>

choose: 多条件分支
    when
    otherwise
    使用:
        <c:choose>
            <c:when test='条件1'>
                条件1成立
            </c:when>   
            <c:when test='条件2'>
                条件1不成立,条件2成立
            </c:when>
            <c:when test='条件3'>
                条件1,2都不成立,条件3成立
            </c:when>
            <c:otherwise>
                else,条件都不成立
            </c:otherwise>
        </c:choose>

forEach 遍历集合
    <c:forEach items='list' var='p'>
        ${p}
    </c:forEach>
        var:每次循环得到的当前元素对象。
        items:被遍历的集合。
        
        begin:遍历集合的起始下标
        end:遍历集合的结束下标
        step:下标渐变值。步长.
        varStatus:
            varStatus='aa'
                aa.index    下标
                aa.count    被遍历出来的元素个数(序号)

JSTL问题

1. jstl标签属性中,使用EL表达式,el表达式外不能写空格.

总结:

JSP开发
    显示逻辑代码
    EL+JSTL(不要出现java代码)
    EL: ${requestScope}
            ${sessionScope}
            ${对象.属性名}
    JSTL:
            choose
            forEach

JSTL part II

formatDate:
    使用:
        ① 导入    <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" 
            prefix="fmt" %>
        ② <fmt:formatDate value="" pattern=""/>
            value: 要格式化的日期
            pattern: 日期格式
                    年   yyyy
                    月   MM
                    日   dd
remove
    使用:
        <c:remove var='' scope='' />
        删除作用域中的值
            var:要删除的命名属性的name
            scope:删除的作用域哪个
                    page        pageContext作用域
                    request     request作用域
                    session     session作用域
                    application ServletContext作用域

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

推荐阅读更多精彩内容

  • 一、JSP基础 1.1什么是JSP JSP(Java ServerPage)是Java服务器端动态页面技术。是su...
    晨星资源阅读 1,137评论 0 6
  • 1.学习内容 JSP技术入门和常用指令 JSP的内置对象&标签介绍 EL表达式&EL的内置对象 2.JSP技术入门...
    WendyVIV阅读 2,116评论 1 18
  • 1课程回顾 Jsp基础 1)Jsp的执行过程 tomcat服务器完成:jsp文件->翻译成java文件->编译成c...
    守亭翁阅读 322评论 0 0
  • JSP 基本结构JSP 页面组成:模板文本(HTML,XML,纯文本),JSP 元素;JSP 元素:脚本元素,指令...
    jslancer阅读 829评论 0 11
  • 月华静淌 长廊深处茗烟清浅 难奈人走茶凉 梨花飘远 曲巷幽径寒风萧瑟 怎奈春意阑珊 凡尘若烟 我举杯对月空饮 欲揽...
    夏默xl阅读 594评论 0 9