栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaWeb Tomcat (六)JSP(上)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaWeb Tomcat (六)JSP(上)

动力节点JavaWeb视频
从底层源码开始讲起, 讲解的非常详细,对比过尚硅谷的视频,推荐动力节点。
视频是直播的录像,有些时候比较啰嗦,尤其到EL表达式之后,1小时的内容能讲3小时。

系列文章目录

  • 第一章 配置环境、配置IDEA
  • 第二章 GenericServlet源码解析 特别重要
  • 第三章 HttpServlet
  • 第四章 HttpServletRequest
  • 第五章 重定向 使用注解简化配置文件
  • 第六章 JSP (上)
  • 第七章 JSP (下)EL表达式 JTSL标签库
  • 第八章 Session、Cookie
  • 第九章 Filter过滤器、Listner 监听器

第六章 JSP (上)
      • JSP文件的执行过程
      • 源码分析
      • JSP文件的书写规范
      • JSP示例
      • JSP指令集Page的属性
      • JSP 的九大内置对象

JavaServer Page的缩写。(基于Java语言实现的服务器端的页面)
功能:JSP做数据的展示;Servlet做逻辑处理、业务处理、连接数据库、数据处理······。

JSP文件的执行过程
  1. 创建新的Module,启动服务器,在浏览器打开根路径地址,系统会自动执行框架中自动生成的index.jsp文件。此时页面上会显示 $END$

打开下面的路径:


继续从上面的路径进入到:
4bd61bbb-e235-4c43-8474-40431d3219c7workCatalinalocalhostjsporgapachejsp

  1. 可以看到以jsp文件的文件名开头的两个文件:
  2. 系统在执行jsp文件时,就是在执行index_jsp.class文件。
  • jsp文件执行过程总结:
    用户访问到jsp文件时:Tomcat会将jsp文件按照JSP规范将其翻译为java文件,而后编译成为.class文件,然后执行。
源码分析

打开翻译后的.java文件

  1. 继承关系:继承自org.apache.jasper.runtime.HttpJspBase
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
  1. 从HttpJspBase类中可以看到继承自HttpServlet
public abstract class HttpJspBase extends HttpServlet
  1. HttpServlet继承自Servlet,所以index_jsp类最终继承的是Servlet
  2. Servlet在创建时先执行init()和service()。
  3. 同样,HttpJspBase类被Tomcat调用时,也会执行init()和service()。
  4. 通过HttpJspBase类中的service()会调用子类也就是index_jsp类中的_jspService()。

总结: .jsp文件中的所有内容,最终都是放在_jspService()方法体内执行的。

JSP文件的书写规范
  1. <%@ page 属性=值 %>:Page指令
    contentType属性:浏览器输出中文乱码,与response.setContentType("text/html;charset=UTF-8");功能相同

    contentType="text/html;charset=UTF-8">
    
  2. <% Java代码 %>:使用Java代码

    Java代码只能使用可以在方法体内使用的代码。
    本质:JSP文件翻译为.java文件时,把代码放入到service()方法体中。

  3. 字符串&HTML:不需要符号,与HTML文件格式一样

    所有没有被JSP中定义的特殊符号包裹的字符,都会被当成字符串,通过out.write("字符串");输出到浏览器中,HTML标签会被浏览器解释执行。

  4. <%-- 注释 --%>:注释

    注释只会出现在JSP文件中,翻译后的java文件中是没有的。

  5. <%=(表达式) %>:输出变量或表达式

    翻译为:out.print(表达式);表达式可以是变量

  6. <%! Java代码 %>:Java代码将被翻译到service()方法体外

    Java代码成为类的一部分:类成员属性、类的成员方法。jsp也是Servlet,生命周期会一直延续到服务器关闭,涉及线程安全问题,不建议使用

JSP示例

jsp文件:


    <% for (int i = 0; i < 10; i++) { %>
        

这是for循环输出的:i = <%= i %>

<%}%>

翻译为java后,在Service方法中的代码:

        out.write("n");
        for (int i = 0; i < 10; i++) {
            out.write("n");
            out.write("这是for循环输出的:i = ");
            out.print(i);
            out.write("n");
        }
        out.write("n");
        out.write("n");
JSP指令集Page的属性
  • 设置响应内容的类型和字符集
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  • 开启或关闭session
<%@ page session="false|true" %>
  • 导包
<%@ page import="java.util.*" %>
  • 设置发生错误时要跳转的页面
<%@ page errorPage="/error.jsp" %>
  • 当前页面是否为错误页面
    发生异常时只会显示错误页面的内容,不会显示具体的异常信息,需要使用exception将错误信息打印在控制台,方便调试。
<%@ page isErrorPage="true" %>
<%
  exception.printStackTrace();
%>
  • 忽略EL表达式
在这里插入代码片
JSP 的九大内置对象
  • 域类型:
    作用的范围:页面域 < 请求域 < 会话域 < 应用域。优先使用最小的域
    都有setAttribute () getAttribute() removeAtrribute()方法用来传递数据。
jakarta.servlet.jsp.PageContext pageContext		页面域
jakarta.servlet.http.HttpServletRequest request		请求域
jakarta.servlet.http.HttpSession session		会话域
jakarta.servlet.ServletContext application		应用域
  • 输出类型
jakarta.servlet.jsp.JspWriter out	输出到屏幕显示
jakarta.servlet.http.HttpServletResponse response		输出给浏览器
  • 异常
java.lang.Throwable exception		
  • Servlet 配置信息
jakarta.servlet.ServletConfig config
  • 页面(说是没用,暂时不知道干什么用的)
java.lang.Object page
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/863175.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号