Java Web基础:JSP工作原理和基础概念

JSP介绍

  • JSP全称是Java Server Pages,它和Servlet都是Sun公司定义的用于开发动态Web资源的技术,它解决了Servlet输出流排版复杂和难以维护的问题。JSP完美融合了HTML模版元素和Java代码,通过JSP写服务端输出变得和写HTML网页一样容易。
  • JSP通过涵盖HTML模版元素来简化输出排版,还提供不同的JSP标签管理不同类型的Java代码,除此之外,它还默认封装了9大隐式对象,帮助提高开发的效率。
  • JSP本质上是Servlet,当用户请求JSP时,JSP引擎(Tomcat内嵌)会自动把JSP代码转化为Servlet,并把HTML模版元素和JSP标签内容填充到Servlet中的Service方法,通过Service方法输出响应流给客户。在进行转换时,Servlet引擎也会默认的将JSP的9大隐式对象封装到service方法当中。
  • 由于JSP良好的布局性,实际开发Web应用通常采用JSP+Servlet的形式,JSP主要负责数据的展示,Servlet负责业务逻辑和数据计算。此种方式可以实现良好的代码解耦合和分层管理,也利于UI人员和后端人员并行开发。

JSP工作原理

JSP的本质是Java Servlet,它通过Tomcat JSP引擎将 JSP  翻译为相应的Servlet,并通过service方法来接受和响应客户请求。

示例:tomcat容器自带的index.jsp 对应的servlet

  • 默认生成Servlet,并将JSP的内容自动填充到_jspService方法中

    • Java代码直接填充到方法中
    • HTML模版通过out.write("HTML 模版  /n") 填充到方法中,形成输出流
  • _jspService方法带有request & response参数,能自动接收Tomcat传送的request和response对象
  • 除了request,response做为输入参数,JSP引擎还自动的在_jspService方法里面生成其他对象的引用并对他们初始化,这些对象结合起来称为JSP的默认9大隐式对象,在JSP页面可以直接通过对象名进行引用:

    1. HttpSession session
    2. ServletContxt application
    3. ServletConfig config
    4. PageContext pageContext 当前页面上下文,用于JSP标签传递参数
    5. Object page 代表当前页面
    6. JSPWriter 相当于PrintWrite,可以直接往浏览器输出文本
    7. Exception

JSP页面组成

  1. 所有满足HTML规范的元素-JSP模版元素(直接翻译成out.write的内容)
  2. <%       %>   JSP脚本片段,即Java代码块( Java代码直译)
  3. <%=     %>   JSP表达式(直接翻译成out.print)
  4. <%--    --%>  JSP 注释,此注释不在浏览器展示
  5. <%@   % >     JSP指令,包括page/include/taglib
  6. JSP标签
  7. JSP九大内置对象:request/response/session/application/config/page/out/pageContext/Exception
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一个JSP</title>
</head>
<body>
    <%!//定义一个类方法,只能通过JSP申明定义方法,全局变量和静态代码块
    public void testJSPDeclarition() {
        System.out.println("这是一个JSP申明");
    }%>

    <%--JSP注释,该注释并不会做为输出输出给浏览器,在JSP中应当用此注释替代Html注释<!--XXX-->,避免输出垃圾数据给客户端造成流量浪费 --%>
    当前系统时间是:
    <%--脚本表达式,可以书写遵循java规范的代码,可以在JSP中多次出现,并且会被翻译为相应Servlet中的Service方法的代码片段 --%>
    <%
        testJSPDeclarition();
        Date d = new Date();
        out.write(d.toLocaleString());
        String jspDefindedVar = "hello,i am a var generated by JSP";
        for (int i = 0; i < 2; i++) {
    %>
    <br>测试脚本片段语法和多个脚本片段组合作用
    <%
        }
    %>
    <br>
    <br> 查看前面JSP脚本片段定义的变量值:
    <%-- 脚本表达式,用于向浏览器输出数据,不以;结尾,仅用做数据输出 --%>
    <%=jspDefindedVar%>
    <br>
    <br> 查看Servlet传递过来的参数变量:
    <%=request.getAttribute("servletTransferVar")%>
</body>
</html>

JSP脚本片段

用于在JSP中编写和运行多行代码, 这些代码被“翻译到” service方法中,因此不能嵌套方法

  • <%  %> 只能出现严格遵循Java语法的代码,每行必须以;结束。
  • 在一个JSP页面中可以有多个脚本片段,不同的脚本片段之间可以嵌入文本,HTML标记或者其他JSP元素, 并且同一个页面之间的脚本片段可以相互访问。本质上这些脚本片段都被翻译为同一个jspService方法里的代码,方法里的变量是可以相互访问的, 但一样要遵循先定义后访问的原则。
  • 单个脚本片段在JSP中可以是不完整的,但是多个顺序结合的脚本片段必须是完整的Java代码。

JSP申明

  • <%!   %> JSP页面中编写的所有代码,默认都会翻译到servlet的Service方法当中,除了JSP申明。
  • JSP申明中的Java代码会被翻译到Servlet的service方法外,常常用来定义JSP转化为Servlet程序的静态代码块,成员变量或者是方法。JSP脚本片段不能用来定义方法,只有JSP申明能够用来定义方法。
  • JSP 申明必须满足Java代码规范
  • JSP默认的九大隐式对象都是Servlet Service方法里申明的方法变量,在JSP申明中不能使用这些隐式对象。

JSP脚本表达式

用于将程序数据输出到客户端

<%= 变量或表达式 %>, 表达式后面不能有;。

 

JSP 注释

  • <%— —%>, 需要和HTML注释区别开,实践中应该多用JSP注释少用html注释。
  • <!— —>, HTML 注释会被解析到浏览器当中,造成不必要的垃圾数据输出。

JSP 指令

JSP指令是为JSP引擎设计的,它不直接产生可见输出,只是用于告诉JSP引擎如何处理JSP,JSP指令基本语法:<%@ 指令 属性名=“值” %> 。

常用的JSP指令包括:Page指令/

JSP Page指令,通常用于编码和包管理,无论出现在页面什么地方,它的作用域都是整个页面,实践中常常放在JSP页面顶部,重点包括以下几项:

  • language=“java”, 编程语言是java
  • contentType="text/html; charset=UTF-8”, 输出给浏览器的字符编码
  • pageEnconding=“UTF-8”, JSP 页面的编码
  • import=“”,引入的Java包,JSP默认引入的Java包只有java.lang和javax.servlet.*,其余的包需要在JSP页面中用到,则需要在page指令中导入, 否则都编译不过。
  • session="true/false", 是否自动获取session。即使这里设置为false,仍然可以通过request.getSession()获取session对象
  • buffer=“none/kbSize”,
  • isThreadSafe="true/false"
  • autoFlush="true/false"
  • errorPage="relative_url", 定位页面失败后的自动跳转页面,避免抛500带来的差用户体验。

 JSP Include指令,用来组合多个JSP,特别适用于页眉页脚等场合。

时间: 2024-10-20 01:17:24

Java Web基础:JSP工作原理和基础概念的相关文章

java web 程序---jsp连接mysql数据库的实例基础+表格显示

<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="gb2312"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> <center>JSP连接mysql数据库</

JSP基本语法总结【1】(jsp工作原理,脚本元素,指令元素,动作元素)

时隔半年,回头对jsp复习整理一下,温故而知新. jsp工作原理: jsp服务器管理jsp页面分两个阶段:转换阶段(translation phase)和执行阶段(execution phase). 客户发送请求时,服务器检验jso语法是否正确,然后转换成servlet源文件,然后调用javac工具类便宜servlet源文件生成class文件,此阶段为转换阶段. 接下来,servlet容器加载转换后的servlet类,实例化一个对象来处理客户端的请求.请求处理后,响应对象被jsp服务器接收,服务

JAVA学习篇--JSP实现原理

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. 起源: 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变.如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难. 解决方案: 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java 

Java Web(六) JSP

现在的Java Web开发已经很少使用JSP脚本了,业务逻辑都交给Servlet处理,JSP只负责显示视图,所以接下来的内容就对JSP脚本不做叙述了... JSP概述 JSP全名为Java Server Page,是为了简化Servlet的工作而出现的替代品.JSP是一种基于文本的程序,其特点是HTML与Java程序共同存在.执行时JSP会被Tomcat自动编译,编译后的JSP和HttpServlet一样,都是javax.servlet.Servlet接口的子类,因此JSP是另一种形式的Serv

JSP工作原理

一.JSP工作原理 1.首先是利用客户端浏览器,然后由客户端浏览器请求JSP页面,向JSP服务器发出请求. 2.JSP服务器内部原理 JSP服务器首先在收到客户端传送过来的请求后,将命令转换到Servlet文件(JAVA文件),然后执行Servlet文件,生成.Class文件,然后将执行结果以HTML的格式发送到浏览器上. 3.客户端浏览器接收到Servlet发送过来的内容,并将其显示到页面中.

Java类加载器的工作原理

Java类加载器的作用就是在运行时加载类.Java类加载器基于三个机制:委托.可见性和单一性.委托机制是指将加载一个类的请求交给父类加载 器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它.可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类 加载器加载的类.单一性原理是指仅加载一个类一次,这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类.正确理解类加载器能够帮你解决 NoClassDefFoundError和java.lang.ClassNo

Java 连接池的工作原理(转)

原文:Java 连接池的工作原理 什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它究竟是什么.[如果你已经知道了,你可以跳到它的工作原理部分] 创建连接的代码片段: String connUrl = "jdbc:mysql://your.database.domain/yourDBname"; Class.forName("com.mysql.jdbc.Dr

jsp基础学习(三)----jsp工作原理

JSP的工作原理 执行JSP代码需要在服务器上安装JSP引擎,比较常见的引擎如Tomcat.把这些支持JSP的Web服务器配置好后,就可以再客户端通过浏览器来访问JSP页面了.  JSP的大部分工作就是与客户端进行交互. (1)服务器在收到一个请求后首先要分析这个请求,如果请求的页面只是一般的HTML页面,服务器就直接读出HTML页面并返回给客户端. (2)如果客户端请求的是JSP页面,服务器调用JSP引擎翻译处理所请求的JSP页面,并将翻译和处理之后的HTML返回给客户端. (3)如果遇到Ja

Java Web系列:Spring依赖注入基础

一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是可以专注业务逻辑.因此学习Spring Framework在架构和模式方面的结构和原理,对我们在架构和模块级别的理解帮助极大.Spring Framework(参考1)的宗旨是简化Java开发,主要的手段如下: (1)在架构上解耦:通过DI(依赖注入)管理类型依赖,通过AOP分离关注点,减少重复代码