• javaweb——JSP


    2023.10.23

    使用纯粹Servlet开发web应用的缺陷

    在Servlet当中编写HTML/CSS/JavaScript等前端代码:

    • java程序中编写前端代码,编写难度大。麻烦。

    • java程序中编写前端代码,显然程序的耦合度非常高。

    • java程序中编写前端代码,代码非常不美观。

    • java程序中编写前端代码,维护成本太高。(非常难于维护)

            修改小小的一个前端代码,只要有改动,就需要重新编译java代码,生成新的class文件,打一个新的war包,重新发布。

    JSP

            JSP(Java Server Pages)是建立在Servlet规范之上的动态网页开发技术,其实质是一个简化的Servlet,在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用于实现网页中静态内容的显示,Java代码用于实现网页中动态内容的显示。

    JSP是什么?

    • JSP实际上就是一个Servlet。

      • index_jsp 类继承 HttpJspBase,而HttpJspBase类继承的是HttpServlet。所以index_jsp类就是一个Servlet类。

      • jsp的生命周期和Servlet的生命周期完全相同。完全就是一个东西。没有任何区别。

      • jsp和servlet一样,都是单例的。(假单例)

      • JSP是java程序。(JSP本质还是一个Servlet)

      • Servlet是JavaEE的13个子规范之一,那么JSP也是JavaEE的13个子规范之一。

      • JSP是一套规范。所有的web容器/web服务器都是遵循这套规范的,都是按照这套规范进行的“翻译”

      • 每一个web容器/web服务器都会内置一个JSP翻译引擎。

    JSP的执行流程

    1. 客户端向服务器发送请求,访问JSP页面。
    2. 服务器接到请求后检索对应的JSP页面,如果该JSP页面是第一次被请求,那么服务器会将此页面中的静态数据(HTML文本)和动态数据(Java元素)全部转化为Java代码,使JSP文件转换成一个Servlet类文件。在转换过程中,服务器若发现JSP文件中存在语法错误,则会中断转换过程,并向客户端返回出错信息。

    3. 服务器将转换后的Servlet源代码编译成字节码文件(.class),对于Tomcat服务器而言,生成的字节码文件默认存放在Tomcat安装目录的work目录下。

    4. 编译后的字节码文件被加载到内存中执行,并根据用户的请求生成HTML格式的响应内容。

    5. 服务器将响应内容发送回客户端。

    JSP基础语法

    • JSP中直接编写普通字符串:

      • 翻译到service方法的out.write("这里")

    • <%%>

      • 翻译到service方法体内部,里面是一条一条的java语句。

    • <%! %>

      • 翻译到service方法之外。

    • <%= %>

      • 翻译到service方法体内部,翻译为:out.print();

    • <%@page contentType="text/html;charset=UTF-8"%>

      • page指令,通过contentType属性用来设置响应的内容类型。

    • JSP的专业注释

      • <%--   JSP的专业注释,不会被翻译到java源代码当中。 --%>

    只用JSP这一个技术,能不能开发web应用?

            可以。因为JSP本质就是Servlet,在JSP的<%%>里面写的代码就是在service方法当中的,所以在<%%>当中完全可以编写JDBC代码,连接数据库,查询数据,也可以在这个方法当中编写业务逻辑代码,处理业务,都是可以的,所以使用单独的JSP开发web应用完全没问题。

            But不建议。建议采用servlet + jsp的方式进行开发。这样都能将各自的优点发挥出来。JSP负责做数据展示。Servlet负责数据的收集。(JSP中编写的Java代码越少越好。)一定要职责分明。

    JSP的指令

            JSP的指令用于指导JSP的翻译引擎如何工作(指导当前的JSP翻译引擎如何翻译JSP文件)

            指令包括:taglib指令、page指令...

            关于page指令常用的属性:

    1. <%@page session="true|false" %>
    2. true表示启用JSP的内置对象session,表示一定启动session对象。没有session对象会创建。
    3. 如果没有设置,默认值就是session="true"
    4. session="false" 表示不启动内置对象session。当前JSP页面中无法使用内置对象session。
    1. <%@page contentType="text/json" %>
    2. contentType属性用来设置响应的内容类型
    3. 但同时也可以设置字符集。
    4. <%@page contentType="text/json;charset=UTF-8" %>
    1. <%@page pageEncoding="UTF-8" %>
    2. pageEncoding="UTF-8" 表示设置响应时采用的字符集。
    1. <%@page import="java.util.List, java.util.Date, java.util.ArrayList" %>
    2. <%@page import="java.util.*" %>
    3. import语句,导包。
    1. <%@page errorPage="/error.jsp" %>
    2. 当前页面出现异常之后,跳转到error.jsp页面。
    3. errorPage属性用来指定出错之后的跳转位置。
    1. <%@page isErrorPage="true" %>
    2. 表示启用JSP九大内置对象之一:exception
    3. 默认值是false
    • JSP的九大内置对象

      • jakarta.servlet.jsp.PageContext pageContext 页面作用域

      • jakarta.servlet.http.HttpServletRequest request 请求作用域

      • jakarta.servlet.http.HttpSession session 会话作用域

      • jakarta.servlet.ServletContext application 应用作用域

        • pageContext < request < session < application

        • 以上四个作用域都有:setAttribute、getAttribute、removeAttribute方法。

        • 以上作用域的使用原则:尽可能使用小的域。

      • java.lang.Throwable exception

      • jakarta.servlet.ServletConfig config

      • java.lang.Object page (其实是this,当前的servlet对象)

      • jakarta.servlet.jsp.JspWriter out (负责输出)

      • jakarta.servlet.http.HttpServletResponse response (负责响应)

     

     

     

     

  • 相关阅读:
    淘宝店铺发布API接口(新),淘宝oAuth2.0店铺商品API接口,淘宝商品发布API接口,淘宝商品上架API接口,一整套发布上架店铺接口对接分享
    【Linux守护进程】二、守护进程详解
    【镜像转存】利用交互式学习平台killercoda转存K8S镜像至Docker私人仓库
    记忆化搜索,901. 滑雪
    使用ZBrush软件的画布功能有什么技巧吗?
    DBeaver工具在无网络的情况下连接clickhouse方法
    掌握未来技术趋势,Python编程引领人工智能时代
    使用VSCode进行Python模块调试
    【数一】【概率论与数理统计】
    折腾Chrome 插件,怎么给右键菜单增加“选项”?
  • 原文地址:https://blog.csdn.net/m0_61028090/article/details/133986420