博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jsp
阅读量:6856 次
发布时间:2019-06-26

本文共 4400 字,大约阅读时间需要 14 分钟。

hot3.png

jsp表达式,脚本和声明;jsp页面中的指令;隐含对象;开发模式Model2;WEB-INF文件夹的作用;El和JSTL;JSP异常处理

---------------------------------------------------------------------------------------------------------------------

JSP:Sun公司制定的一种服务器端动态页面技术的组件规范。(主要是HTML中嵌入少量的Java代码)

JSP包含:HTML、注释、Java代码、指令、隐含对象。

一.JSP页面中的HTML包括:HTML标记、CSS、JavaScript。
二.注释:
 - <!-- 注释 -->:html注释,注释中的内容如果包含Java代码,这些代码会被执行。
 - <%-- 注释 -->:jsp特有的注释,注释中的内容如果包含Java代码,这些代码会被忽略。
三.JSP页面中的Java代码包含以下三种:
1.jsp表达式:<%= ... %>。
 - 合法内容:变量、表达式、有返回值的方法。
 - 转译成Servlet时的规则:在service()方法中用out.print语句输出该变量、表达式、方法的返回值。
2.jsp小脚本:<%...%>
 - 合法内容:能够写在方法里的Java代码片段都可以作为小脚本。
 - 转译成Servlet时的规则:原封不动的成为Servlet类的service()方法里的一段代码。
3.jsp声明:<%!...%>
 - 合法内容:成员属性或成员方法的声明
 - 转译成Servlet时的规则:成为Jsp页面转译成的Servlet类中的成员属性或成员方法。

四.JSP页面中的指令:

1.语法规则:<%@指令名 属性=值 %>
2.作用:控制JSP在转译成Servlet类时生成的内容。
3.常用指令:
 - page指令:用于导包、设置页面属性。
 - include指令:<% file="url" %>,在JSP页面转换成Servlet时,能够将其他页面包含进来。
 - taglib指令:

例:<% pageEncoding="utf-8" import="java.util.*" %>

<!-- 1.可以直接写静态内容(html/css/js) -->
<!doctype html>
<html>
    <head>
        <title>第一个JSP</title>
        <meta charset="utf-8">
    </head>
    <body>
        <!-- 2.可以写Java:jsp脚本、jsp表达式、jsp声明 -->
        <!-- 2.3jsp声明 -->
        <%!
            public int lf(int n){
                return n*n*n;
            }
        %>
        <ul>
            <!-- 2.1JSP脚本 -->
            <%
                for(int i=53;i<=60;i++){ 
            %>
                <!-- 2.2jsp表达式 -->
                <li><%=lf(i) %></li>    
            <%
                }
            %>
        </ul>
        
        <!-- 引入date.jsp -->
        <% file="date.jsp" %>
    </body>
</html>

五.JSP页面中的隐含对象:容器自动创建,在jsp文件中可以直接使用的对象。

 - 作用:简化对HTTP请求、响应信息的访问。

隐含(内置)对象:

1. request(*):HttpServletRequest
2. response:HttpServletResponse
3. out:JSPWriter,等价于PrintWriter
4. config:ServletConfig
5. application:ServletContext
6. exception:Throwable,当页面发生异常时才能使用
7. session(*):HttpSession,(待补充)
8. page:Object,指代当前的页面,相当于this
9. pageContext(*):PageContext,页面的环境,可以给页面提供数据,
               通过该对象可以获取其他8个隐含对象。
隐含对象使用示例:
<%Object obj = request.getAttribute("");%>
<%=request.getAttribute("")%>

------------------------------------------------------------------------------------------------------------------------

JSP运行原理:
JSP转换成Java代码的过程:

开发模式:

WEB-INF文件夹的作用:

-------------------------------------------------------------------------------------------------------------------------
EL和JSTL:
一.EL
1.访问Bean属性:
    语法:stu.name/stu["age"]
    等价:request.getAttribute("stu").getName()/getAge();
例:    <p>姓名:${stu.name }</p>
    <p>nian龄:${stu["age"] }</p>
    <p>兴趣:${stu.interests[0] }</p>
    <!--等价:request.getAttribute("stu").getCourse().getId();  -->
    <p>课程:${stu.course.id }</p>

2.EL的取值范围:

    默认情况下EL依次从四个对象取值:
    page/request*/session*/application
    这四个对象称为EL的取值范围。
    举例:stu.name
    1.page.getAttribute("stu").getName();
    2.request.getAttribute("stu").getName();
    3.session.getAttribute("stu").getName();
    4.application.getAttribute("stu").getName();
            
    可以明确指定取值范围:
    sessionScope.stu.name
    applicationScope.stu.name
例    <p>范围:${requestScope.stu.name }</p>

3.EL取值是可以进行运算:

    算数运算/关系运算/逻辑运算/判空运算
例    <p>nian龄-5:${stu.age-5 }</p>
    <p>大于20吗:${stu.age>20 }</p>
    <p>20-30之间:${stu.age>=20 && stu.age<=30 }</p>
    <p>判空:${empty stu }</p>
    <p>判空:${stu==null }</p>

4.EL可以获取请求参数

    param.user -> request.getParameter("user");
    paramValues.city -> request.getParameterValues("city");
例    <p>参数:${param.user }</p>

二.JSTL    :  需要配置:<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

1.if的用法:
        <p>
            <c:if test="${stu.gender=='M' }">男</c:if>
            <c:if test="${stu.gender=='F' }">女</c:if>
        </p>
2.choose的用法(类似if else):
        <p>
            <c:choose>
                <c:when test="${stu.gender=='M' }">男</c:when>
                <c:otherwise>女</c:otherwise>
            </c:choose>
        </p>
3.forEach的用法:
        varStatus用来声明循环状态,forEach在做循环时,会自动创建一个状态对象来记录
        循环相关的状态数据,如循环次数等。varStatus就是给这个对象命名的,以便于之后引用.
例        <p>
            <c:forEach items="${stu.interests }" var="i" varStatus="s">
                ${i } ${s.index }
            </c:forEach>
        </p>

4.JSTL原理:

--------------------------------------------------------------------------------------------------------------------------
JSP异常处理:
一.容器中声明式处理:
  <!-- 1.指定某类型的异常对应某错误页面。 -->
  <!-- <error-page>
      <exception-type>java.lang.Exception</exception-type>
      <location>/WEB-INF/error.jsp</location>
  </error-page> -->
  
  <!-- 2.指定某编号的错误对应某错误页面 -->
  <error-page>
      <error-code>404</error-code>
      <location>/WEB-INF/error.jsp</location>
  </error-page>
  <error-page>
      <error-code>405</error-code>
      <location>/WEB-INF/error.jsp</location>
  </error-page>
  <error-page>
      <error-code>500</error-code>
      <location>/WEB-INF/error.jsp</location>
  </error-page>

二.编程式的一场处理:

try{
    //...
}catch(Exception e){
    request.getRequestDispatcher(url).forword(req,res);
}

三.应用场景:对于程序本身的异常用编程式处理,如空指针,对于系统级别的异常最好使用声明式处理,如数据库连接不上.

转载于:https://my.oschina.net/langgege/blog/680718

你可能感兴趣的文章
分享:你会写一个vue的双向数据绑定吗?
查看>>
微信支付(公众号支付JSAPI)
查看>>
2017-12-24学习笔记
查看>>
linux 安装 node
查看>>
智能合约从入门到精通:Lib工具库(一)
查看>>
“不劳而获”的数字货币真的存在么?
查看>>
买卖股票的最佳时机
查看>>
android webview 支付H5无法拉起微信支付
查看>>
「docker实战篇」python的docker爬虫技术-mitmproxy之安卓模拟器mitmdump(11)
查看>>
金融衍生品已成为金融革命新力量
查看>>
素材脚本
查看>>
杉车网新能源汽车行业数据报告(三)
查看>>
10分钟理解CSS3 Grid布局
查看>>
iOS扩展新特性之3DTouch开发
查看>>
Dubbo笔记(二)
查看>>
分布式系统一致性(ACID、CAP、BASE、二段提交、三段提交、TCC、幂等性)原理详解...
查看>>
k8s拾遗 - Secret
查看>>
Android SparseArray 原理解析
查看>>
PHP类的定义
查看>>
Composer 中国镜像地址配置
查看>>