美文网首页java基础
java基础-day43-JSP

java基础-day43-JSP

作者: 触手不可及 | 来源:发表于2021-07-02 09:05 被阅读0次

    JSP

    1. JSP

    1.1 JSP概述
    全称:
        Java Server Pages Java服务器页面,和Servlet一样,都是Sun公司提供的动态资源开发技术。兼容HTML,CSS,JavaScript,还可以运行Java代码
        可以同时在设计完成前端页面,优化美化,情况下做Java后台逻辑代码实现。
        
    
    1.2 为什么要用JSP
    1. JSP目前在没有了解过前端解析数据方式情况下,和Java后台的融合性更好
    2. JSP最终编译的结果就是一个Servlet程序
    3. JSP兼容性还可以!!!性能还不错!!!
    4. 可以让Servlet摆脱内嵌HTML页面的情况
    5. JSP是一个动态资源,和HTML页面不一样。
    
    1.3 JSP语法
    1.3.1 JSP语法格式
    JSP页面中可以包含任意的Java代码,变量,语句和方法
    格式:
        <% Java代码 %>
    声明局部变量:
        <% int i = 10; %>
    声明全局变量:
        <%! int i = 10; %>
    输出变量:
        <%=2 + 3%> 输出语句没有分号结尾
    JSP注释【重点】
        <%-- JSP注释 --> 安全,省流量
        <!-- 网页注释 --> 不安全,耗流量
    
    <%--
      Created by IntelliJ IDEA.
      User: MI
      Date: 2020/4/3
      Time: 10:10
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>01-第一个行JSP代码</title>
    </head>
    <body>
    <%-- JSP注释 --%>
    <!-- HTML注释 -->
    <%
        System.out.println("你好 JSP!!!");
    %>
    <%-- JSP前端输出 --%>
    <%=2 + 3%>
    
    <%-- 声明了一个变量 --%>
    <%! int c = 10;%>
    
    <%-- 前端页面输出 --%>
    <h1><%=c%></h1>
    
    <%-- 声明了一个方法 --%>
    <%! public void show() {
        System.out.println("骚磊 JSP");
    }%>
    
    <%-- 这里可以调用 --%>
    <%show();%>
    
    </body>
    </html>
    
    1.3.2 JSP指令
    Page指令
    
    JSP指令格式
        <%@ page 属性名="属性值" 属性名="属性值"%>
    
    需要了解的属性:
        import 
            导包,和Java中操作一致,导入当前JSP页面所需的资源
        contentType="text/html;charset=UTF-8" 
            设置页面的响应内容
        language="java" 
            解析当前JSP页面使用的语言
        pageEncoding="utf-8" 
            当前页面的编码集
        buffer="8kb" 
            JSP页面的默认缓冲大小 8KB
        session="true" 
            session默认开启,如果选择不开启session 属性值为false
        isELIgnored="true" 
            JSP页面是否支持EL表达式,默认支持,不支持属性值为false
        isErrorPage="false" 
            当前JSP页面是是否为错误页面,默认不是,需要需要设置为错误页面,属性值、
            true
        errorPage="url" 
            指定当前JSP页面发送错误之后,跳转到哪一个错误页面
    
    include 指令
    
    包含其他的JSP页面,可以是静态包含,也可以是动态包含
    静态包含:
        <%@ include file="XXX.jsp"%>
    
    动态包含:
        <jsp:include page="XXX.jsp"></jsp:include>
    
        静态包含其他JSP页面。是将两个JSP页面编译时合并
        动态包含是当前JSP页面运行到jsp:include时才会加载对应的JSP资源,并不会合并两个JSP页面
        
    
    <%@ include file="header.jsp"%>
    content 内容
    <%@ include file="bottom.jsp"%>
    
    taglib 指令
    作用:
        导入其他标签库,今天会降到JSTL表达式来替换Java代码
        <%@ taglib uri="路径" prefix="c" %>
    
    1.3.3 JSP动作
    这里可以使用一部分的JSP标签来表示一定的Java代码
        jsp:include 动态包含
        jsp:forword 转发
        jsp:param 请求设置参数
        jsp:useBean 创建一个对象
        jsp:setProperty 给指定的对象对应属性赋值
        jsp:getProperty 从指定的对象对应属性取值
    
    1.4 JSP内置对象【重点】
    对象名 类型 说明
    request javax.servlet.http.HttpServletRequest 用户请求对象
    response javax.servlet.http.HttpServletResponse 服务器对应用户的请求
    session javax.servlet.http.HttpSession Session会话控制对象
    application javax.servlet.ServletContext 整个项目的上下文对象
    exception java.lang.Throwable 异常,isErrorPage="true"
    page java.lang.Object==>this对象 JSP==> Servlet this对象
    config javax.servlet.ServletConfig servlet配置对象
    out javax.servlet.jsp.JspWriter 类似于resp.getWriter
    pageContext javax.servlet.jsp.PageContext 当前页面对象上下文
    <%--  Created by IntelliJ IDEA.  User: MI  Date: 2020/4/3  Time: 11:19  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java"%><html><head>    <title>04-内置对象</title></head><body><%    // 内置对象可以直接调用,PageContext页面上下文对象    pageContext.setAttribute("msg", "PageContext Message");    // pageContext可以通过方法呼气其他内置对象    pageContext.getException();    pageContext.getOut();    pageContext.getRequest();    pageContext.getResponse();    pageContext.getServletContext();    pageContext.getServletConfig();    pageContext.getPage();    pageContext.getSession();%><h1><%=pageContext.getAttribute("msg")%></h1><%    // response 和 out    response.getWriter().append("<h2>hello</h2>");    out.print("<h2>Out對象</h2>");    out.write("<h2>Out對象</h2>");%><%    String name = request.getParameter("name");    System.out.println(name);    application.setAttribute("info", "测试!!!");%></body></html>
    
    1.5 域对象【重点】
    域对象都可以操作一下三个方法  setAttribute(String name, Object value) Object getAttribute(String name);       void removeAttribute(String name);  可以利用域对象的特征,设置一定的属性放入到域对象内在JSP中使用的四个域对象    pageContext     request    session    applicationpageContext存在一定的特权,通过pageContext可以操作其他域对象    setAttribute(String name, Object value, int scope)  Object getAttribute(String name, int scope);        void removeAttribute(String name, int scope);   scope是域对象标记,这里使用了一个常量域对象表示是一个常量,存在于PageContext类内    PageContext.PAGE_SCOPE; PageContext.REQUEST_SCOPE;      PageContext.SESSION_SCOPE;      PageContext.APPLICATION_SCOPE;        DEFAULT_CAPACITY MAX_ARRAY_SIZE<%-- 请问这个msg是谁 EL表达式    数据的检索顺序是从 Page > Request > Session > Application --%><h1>${msg}</h1
    

    2. EL表达式

    2.1 EL表达式概述
        表达式语言(Expression Language),或称EL表达式,简称EL,是Java中的一种特殊的通用编程语言,借鉴于JavaScript和XPath。主要作用是在Java Web应用程序嵌入到网页(如JSP)中,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。
    
    2.2 EL表达式的使用案例
    <%-- JSP页面解析域对象中的类对象 --%><%@ page import="com.qfedu.a.Student" %><%--  Created by IntelliJ IDEA.  User: MI  Date: 2020/4/3  Time: 14:37  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>01-el</title></head><body><%    Student stu = new Student(1, "航海中路彭于晏", 16);    // 存储当前Student对象到一个域对象中    session.setAttribute("stu", stu);%><table width="200px" align="center" border="1px">    <tr>        <th>ID</th>        <th>姓名</th>        <th>年龄</th>    </tr>    <tr>        <td>${stu.id}</td>        <td>${stu.name}</td>        <td>${stu.age}</td>    </tr></table></body></html>
    
    <%-- JSP页面解析域对象中存储的集合性质数据 --%><%@ page import="java.util.ArrayList" %><%@ page import="com.qfedu.a.Student" %><%@ page import="java.util.HashMap" %><%--  Created by IntelliJ IDEA.  User: MI  Date: 2020/4/3  Time: 14:42  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>02-el</title></head><body><%    ArrayList<Student> list = new ArrayList<>();    list.add(new Student(1, "航海中路彭于晏", 16));    list.add(new Student(2, "骚磊", 16));    list.add(new Student(3, "骚杰", 60));    request.setAttribute("list", list);    HashMap<String, String> map = new HashMap<>();    map.put("骚磊", "航海中路彭于晏");    map.put("老黑", "航海中路黑无常");    map.put("老付", "航海中路UI扛把子");    application.setAttribute("map", map);%><table width="400px" align="center" border="1px">    <tr>        <th>ID</th>        <th>Name</th>        <th>Age</th>    </tr>    <tr>        <td>${list[0].id}</td>        <td>${list[0].name}</td>        <td>${list[0].age}</td>    </tr>    <tr>        <td>${list[1].id}</td>        <td>${list[1].name}</td>        <td>${list[1].age}</td>    </tr>    <tr>        <td>${list[2].id}</td>        <td>${list[2].name}</td>        <td>${list[2].age}</td>    </tr></table><hr><h1>${map.骚磊}</h1><h1>${map.老黑}</h1><h1>${map.老付}</h1><hr><h1>${map['骚磊']}</h1><h1>${map['老黑']}</h1><h1>${map['老付']}</h1></body></html>
    
        empty 判断和not empty判断可以判断null,同时可以判断集合形式数据中是否存在元素,可以用于在条件解析中使用
    
    <%-- JSP EL表达式empty使用 --%><%@ page import="com.qfedu.a.Student" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" %><%--  Created by IntelliJ IDEA.  User: MI  Date: 2020/4/3  Time: 14:58  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>04-el</title></head><body><%    Student stu = null;    request.setAttribute("stu", stu);    request.setAttribute("list", new ArrayList<Student>());    List<Student> list1 = null;    request.setAttribute("list1", list1);%><h3>${empty stu}</h3><%-- list.size() == 0 --%><h3>${empty list}</h3><h3>${empty list1}</h3></body></html>
    

    3. JSTL

    3.1 JSTL概述
        JSP标准标签库(JSP Standard Tag Library)是Java EE网络应用程序开发平台的组成部分。它在JSP规范的基础上,扩充了一个JSP的标签库来完成一些通用任务。    使用时需要导包     jstl-impl.jar   在JSP页面中我们可以使用JSTL表示完成数据的判断,分支结构,循环在使用JSTL表达式之前,需要在JSP页面中加入: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
    3.2 JSTL使用
    3.2.1c: if
    <%@ page import="com.qfedu.a.Student" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" %><%--  Created by IntelliJ IDEA.  User: MI  Date: 2020/4/3  Time: 15:16  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head>    <title>Title</title></head><body><%-- 条件判断 --%><%-- c:if 判断标签中 test属性是必须的,不可以缺省的 test属性中的值是支持EL表达式 --%><c:if test="${10 > 5}">    <h3>条件成立</h3></c:if><%    Student stu = new Student(1, "骚磊", 16);    // 设置属性到Request域对象中    pageContext.setAttribute("stu", stu, PageContext.REQUEST_SCOPE);    List<Student> list = new ArrayList<>();    list.add(new Student(1, "骚磊", 16));    list.add(new Student(2, "骚磊", 15));    list.add(new Student(3, "骚磊", 16));    pageContext.setAttribute("list", list, PageContext.REQUEST_SCOPE);%><c:if test="${stu.age > 10}">    <h2>我还是曾经那个少年</h2></c:if><c:if test="${stu.age < 10}">    <h2>我还是曾经那个骚年</h2></c:if><hr><c:if test="${list[0].age == 16}">    <h2>我好困啊~~~~~~</h2></c:if><c:if test="${list[1].age != 16}">    <h2>累了困了,喝乐虎</h2></c:if></body></html>
    
    3.2.2 c:choose
    <%--  Created by IntelliJ IDEA.  User: MI  Date: 2020/4/3  Time: 15:30  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head>    <title>02-jstl</title></head><body><%    int score = 75;    request.setAttribute("score", score);%><c:choose>    <c:when test="${score >= 90}">        <h3>优秀</h3>    </c:when>    <c:when test="${score >= 80}">        <h3>良好</h3>    </c:when>    <c:when test="${score >= 70}">        <h3>中等</h3>    </c:when>    <c:when test="${score >= 60}">        <h3>及格</h3>    </c:when>    <c:when test="${score < 60}">        <h3>叫你爹穿着拖鞋过来</h3>    </c:when></c:choose></body></html>
    
    3.2.3 c:forEach
    <%--  Created by IntelliJ IDEA.  User: MI  Date: 2020/4/3  Time: 15:54  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head>    <title>03-jstl</title></head><body><%--c:foreach属性    var: 临时变量,循环结构中可以临时使用    begin:从何时开始,这里可以使用EL表达式    end:到何时结束,这里也可也使用EL表达式    step:间隔,默认为1--%><c:forEach var="num" begin="0" end="10">    ${num}&nbsp;</c:forEach><hr><table width="400px" align="center" border="1px">    <tr>        <th>ID</th>        <th>Name</th>        <th>Age</th>    </tr>    <%--    items:表示需要遍历的元素    --%>    <c:forEach var="stu" items="${list}" begin="0" end="${list.size()}">        <tr>            <td>${stu.id}</td>            <td>${stu.name}</td>            <td>${stu.age}</td>        </tr>    </c:forEach></table></body></html>
    

    相关文章

      网友评论

        本文标题:java基础-day43-JSP

        本文链接:https://www.haomeiwen.com/subject/vhreultx.html