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指令常用的属性:

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

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值