JSP day01

JSP day01

1 JSP引言

JSP(Java Server Pages),它是基于Servlet的扩展技术。其作用是简化JavaWeb应用中动态页面的开发。说白了,JSP就是用来替换View类型的Servlet。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xUxoTQOf-1631154397979)(JSP day01.assets/image-20210530090422401.png)]

View类型Servlet在进行动态页面开发时存在的问题:

  1. 开发繁琐,必须实现Servlet接口,重写service方法
  2. 一旦修改,必须要重新编译、部署、测试(需要重启Tomcat)
  3. 不利于修改页面的样式,添加css样式难度比较大
  4. 不利于前后端的协作

JSP作用:用来替换原有View类型的Servlet,制作动态页面。

2 第1个JSP程序的开发[重点]

需求:生成当前系统时间

  1. 搭建开发环境

    1. 新建一个web项目

    2. 导入jar包 jsp-api.jar

      tomcat/lib/jsp-api.jar ===> 项目/WEB-INF/lib/jsp-api.jar

    3. 新建jsp文件,所有的jsp文件名以.jsp后缀结尾

  2. 编码

    jsp由html和java代码组成。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C67CUMIf-1631154397981)(JSP day01.assets/image-20210530093006765.png)]

  3. 测试

    jsp访问方式:http://ip地址:port/项目名/jsp路径

    示例:http://localhost:8989/jsp-day01/first.jsp

3 Servlet和JSP开发对比

区别ServletJSp
实现要求实现Servlet接口,重写service方法保证文件名后缀为.jsp即可
编码细节本质就是java代码中拼接html标签,通过流编码响应结果html标签中写java代码
调试方式必须重新编译、部署、测试(restart server)JSP修改后,只需要更新下资源即可
(update resources)
访问方式http://ip:port/项目名/url-patternhttp://ip:port/项目名/jsp的路径(和html一样)

4 JSP中的脚本[重点]

JSP的构成包含HTML标签和Java代码(JSP脚本)。

  • HTML标签(就像在html文件中使用标签的要求一样,直接书写就可以)
  • Java代码(又称JSP脚本,有多种分类)

4.1 输出脚本

  • 作用:将其内部java表达式的值,输出到页面
  • 语法:<%= java表达式 %>
  • 注意:输出脚本中不能以分号结尾,类似于System.out.print();
<html>
<head>
    <title>输出脚本</title>
</head>
<body>
    <%= 1+2 %> <br>
    <%= "hello"+" world"%> <br>
</body>
</html>

4.2 普通脚本

  • 作用:可以定义除方法外,其它所有的java代码
  • 语法:<% java代码 %>
  • 注意:脚本中不能嵌套其它脚本和html标签
<body>
    <%
        //定义变量
        int a = 10;
        int b = 20;
        System.out.println(a+b);//向控制台输出
    %>
    <!-- 向页面输出必须使用输出脚本配合 -->
    <%= a+b%>
    <hr>

    <%
        //调用方法
        String str = "hello world";
        str = str.toUpperCase();
    %>
    <%= str%>
    <hr>

    <!-- 可以配合输出脚本向html标签中输出数据 -->
    <% String baidu = "https://www.baidu.com"; %>
    <a href='<%= baidu%>'>百度一下</a>
    <hr>

    <!-- 不可以嵌套html标签或其它脚本-->
    <!-- 99 乘法表-->
    <%
        //先在控制台输出
        for(int i = 1; i < 10; i++){
            for(int j = 1; j <=i ; j++){
                System.out.print(i+"*"+j+"="+(i*j)+" ");
            }
            System.out.println();
        }
    %>
    <%
        //向页面输出,只需要使用输出脚本替换输出语句,使用br标签代替换行打印即可

        for(int i = 1; i < 10; i++){
            for(int j = 1; j <=i ; j++){
    %>
            <%= i+"*"+j+"="+(i*j)%>
    <%

            } %>
            <br>
    <%    }
    %>
</body>

4.3 声明脚本[了解]

  • 作用:可以定义方法和属性(变量)
  • 语法:<%! java代码 %>
  • 注意:声明脚本中的方法和变量,只能在输出脚本和普通脚本中使用
<body>
    <%!
        public int sum(int a,int b){
            return a+b;
        }

        int i = 10;
        int j = 20;
    %>
    <% sum(i,j);%>
    <%= sum(i,j)%>

</body>

4.4 JSP中的注释

在jsp中可以使用html中的注释,jsp也有自己的注释方式!

<body>
    <!-- html中的注释 -->
    <%-- jsp中的注释 --%>
    <!--
        <%
            System.out.println("html注释");
        %>
        <%= 1+2%>
        html注释中脚本仍会执行,只是不显示在页面
    -->
    <%--
        jsp注释中的内容,不会执行。也不会显示在页面
        <%
            System.out.println("jsp注释");
        %>
        <%= 1+2 %>
    --%>
</body>

5 JSP的工作原理[重点]

JSP并不能直接运行,当访问jsp时会先将jsp翻译成java,再编译java为class文件,最终运行class生成动态页面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eCfSoCDK-1631154397987)(JSP day01.assets/image-20210530142859474.png)]

JSP底层还是Servlet。

当浏览器第1次访问jsp时,jsp会先翻译成java,然后编译成class,由class文件运行响应结果。

如果浏览器2次访问jsp时,直接使用之前编译的class

注意:一旦修改jsp源码,再次访问,还需要重新翻译并编译

6 指令

指令:用来设置和整个JSP网页相关的属性,比如网页的编解码集和session的开启等等。

语法:<% 指令 属性名="属性值" 属性名2="属性值2" %>

6.1 page

  1. language 设置jsp脚本语言,默认值:java

  2. session 设置页面是否主动创建session:true|false,默认值true

  3. isELIgnored 设置页面是否忽略el表达式:true忽略,false不忽略

  4. import 导入jsp脚本中所需要的类

    //第1种方式
    <%@ page import="java.util.*,com.baizhiedu.entity.*"%>
    //第2种方式
    <%@ page import="java.util.*" %>
    <%@ page import="com.baizhiedu.entity.*" %>
    
  5. pageEncoding

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dbHHT8Sw-1631154397991)(JSP day01.assets/image-20210530143420742.png)]

  6. contentType

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qgl6PYBS-1631154397993)(JSP day01.assets/image-20210530190106859.png)]

    contentType设置响应类型和编码方式。

    注意:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MECobep3-1631154397994)(JSP day01.assets/image-20210530182411658.png)]

  7. isErrorPage 设置当前页面是否是一个显示错误的页面 true|false

  8. errorPage 设置当前页面出现异常后,要跳转的页面(用于显示错误的页面)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x1iKykAb-1631154397994)(JSP day01.assets/image-20210530190151956.png)]

6.2 taglib

  • 作用:用来为jsp页面引入jsp标准标签库
  • 语法:<%@ taglib uri=“标签库的唯一标识” prefix=“前缀” %>

今天先简单了解一下有个印象,后面学到JSTL时就要使用taglib标签。

6.3 include

  • 作用:在当前页面包含其它页面,以达到复用页面的效果。

  • 语法:<%@ include file=“其它页面路径” %>

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-39HC8OYh-1631154397995)(JSP day01.assets/image-20210530190717921.png)]

7 动作

7.1 include动作[重点]

  • 作用:在当前页面包含其它页面,作用和include指令类似

  • 语法:<jsp:include page=“其它页面路径”/>

  • 包含指令(静态包含)和包含动作(动态包含)的区别:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wpLrh8Ks-1631154397996)(JSP day01.assets/image-20210530193910103.png)]

    静态包含:在翻译阶段将3个jsp翻译成1个java文件,最终编译后得到包含3部分内容的class文件

    动态包含:在翻译阶段将3个jsp翻译成3个java文件,最终编译成3个class文件,而content_jsp.class在运行时会调用header_jsp和footer_jsp以达到包含的效果

7.2 forward动作[了解]

  • 作用:从当前jsp页面请求转发到另外一个jsp页面
  • 语法: <jsp:forward page=“另外一个页面的路径”/>

8 JSP中内置对象

jsp内置对象:在jsp脚本中,不需要新建,可以直接使用的对象。

  1. request

    request.setAttribute("name",value);
    request.getAttribute("name");
    
    request.getParameter("name");
    request.getParameterValues("name");
    
    request.getSession();
    
    request.getContextPath();
    
    request.getRequestDispatcher("/url-pattern").forward(request,response);
    
  2. session

    session.setAttribute("name",value);
    session.getAttribute("name");
    
  3. response

    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html");
    
    response.sendRedirect("uri");
    
    PrintWriter pw = response.getWriter();
    OutputStream out = response.getOutputStream();
    
  4. application

    //相当于ServletContext
    application.setAttribute("name",value);
    application.getAttribute("name");
    
  5. page

    相当于java中this,表示当前页面

  6. out

    输出流

  7. exception

    异常对象,注意只能在isErrorPage="true"的页面使用

  8. config (ServletConfig)

    表示jsp页面的一些初始配置

  9. pageContext

    1. 可以获取其它8个内置对象

      pageContext.getRequest();
      pageContext.getSession();
      pageContext.getResponse();		pageContext.getServletContext();//application
      pageContext.getPage();
      pageContext.getOut();
      pageContext.getException();		pageContext.getServletConfig();//config
      
    2. 作用域对象

      ​ pageContext:当前页面

      ​ request: 一次请求

      ​ session:一个浏览器的多次请求间

      ​ application:一个web应用中

    3. 可以操作其它3个作用域

      //使用pageContext向4个作用域中保存数据
      		pageContext.setAttribute("name","pageContext");
      		pageContext.setAttribute("name", "request",PageContext.REQUEST_SCOPE);
      		pageContext.setAttribute("name", "session",PageContext.SESSION_SCOPE);
      		pageContext.setAttribute("name", "application",PageContext.APPLICATION_SCOPE);
      
      //使用pageContext从4个作用域中获取数据
      pageContext.getAttribute("name") ;
      	pageContext.getAttribute("name",PageContext.REQUEST_SCOPE) ;
      	pageContext.getAttribute("name",PageContext.SESSION_SCOPE) ;
      	pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);
      

9 使用JSP替换原有视图

原有项目中的视图有静态的HTML和动态的View型Servlet,在学习了JSP技术后就应该使用功能更强大的JSP替换原有的视图。

  1. 静态视图的替换

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Twv3s6G-1631154397997)(JSP day01.assets/image-20210530212306559.png)]

    • 直接将html页面内容复制到jsp中即可
    • 需要项目名的地方使用 <%= request.getContextPath() %>替换
  2. 动态视图的替换

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2Mr8S5J-1631154397999)(JSP day01.assets/image-20210530214434984.png)]

    • 在jsp中通过普通脚本获取作用域中的数据
    • 直接书写html标签,需要回显数据的地方使用输出脚本

jsp的一些概念:

  • url: http://ip:port/项目名/jsp路径
  • uri: /项目名/jsp路径
  • url-pattern: /jsp路径

7
原有的视图。

  1. 静态视图的替换

    [外链图片转存中…(img-4Twv3s6G-1631154397997)]

    • 直接将html页面内容复制到jsp中即可
    • 需要项目名的地方使用 <%= request.getContextPath() %>替换
  2. 动态视图的替换

    [外链图片转存中…(img-m2Mr8S5J-1631154397999)]

    • 在jsp中通过普通脚本获取作用域中的数据
    • 直接书写html标签,需要回显数据的地方使用输出脚本

jsp的一些概念:

  • url: http://ip:port/项目名/jsp路径
  • uri: /项目名/jsp路径
  • url-pattern: /jsp路径

7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值