JSP入门

简述

  jsp是java server page的缩写,即java服务器端页面,可以理解为一个特殊的页面。JSP页面是由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件。其中既可以直接定义html的标签,也可以定义java代码。一句很精髓的话:servlet就是在java里写html代码,jsp就是在html里写java代码。

  在JSP页面中编写的Java代码需要嵌套在<%和%>中,嵌套在<%和%>之间的Java代码被称之为脚本片段(Scriptlets),没有嵌套在<%和%>之间的内容被称之为JSP的模版元素。

应用场景

  如果一个页面既有动态资源,又有静态资源,那么如果用servlet来干的话,就必须从response获得输出流输出动静资源到页面,光从代码上就非常的复杂,你写标签还要放在函数里面,没有代码提示还得自己缩进对齐。

 jsp的原理

  我们可以把jsp理解为一种特殊的servlet类形式,客户端请求服务器,服务器解析请求消息,则会找到对应的jsp资源,然后服务器就会把jsp文件转换为.java类文件,然后编译.java变为.class字节码文件提供servlet服务。其中的转换是由tomcat来做的。

  我们通过查看被转化的jsp页面,即xxx.java文件,可以看到被自动转换的jsp变成了一个java类,它继承HttpJspBase,然后我们查看HttpJspBase的源码,发现它继承HttpServlet,所以逻辑很清晰了,jsp本质上就是一个servlet

  我们也从HttpJspBase类中找到了service方法:

   转换的过程很好理解,就是把html的页面代码放到response输出流的write方法里,然后被<%%>括住的原封不动。

jsp脚本

  jsp提供了三种的脚本定义方式:

<%  代码 %> 定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么.
<%! 代码 %> 定义的java代码,在jsp转换后的java类的成员位置。
<%= 代码 %> 定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。

jsp的内置对象

  内置对象就是在jsp的页面中,不需要创建和获取,可以直接使用的对象。

  一共有9个内置对象。

  首先是<%%>脚本里的代码会放到service方法里,所有request对象和response对象可以直接用。

  一个字符输出流对象out,和response的getWriter类似,out对象可以直接用于输出页面(使用print方法)。

  需要注意的是,tomcat服务器真正地给客户端做出响应之前,会现在response缓冲区拿数据,再到out缓冲区拿数据,所以response的输出永远比out的快。

  所以我们一般用out输出,不混用response。

  jsp的9个内置对象:

变量名 真实类型 作用
request HttpServletRequest 一次请求访问的多个资源(转发)
response HttpServletResponse 响应对象
out JspWriter 输出对象,数据输出到页面上
session HttpSession 一次会话的多个请求间
pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
application ServletContext 所有用户间共享数据
page Object 当前页面(Servlet)的对象  this
config ServletConfig Servlet的配置对象
exception Throwable 异常对象


jsp的指令

  jsp的指令是用于配置jsp页面以及导入资源文件。

<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %> 配置jsp指令

page指令

  page用于配置jsp页面

  contentType:等同于response.setContentType()

  1. 设置响应体的mime类型以及字符集

  2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)

  import:导包

  errorPage:当前页面发生异常后,会自动跳转到指定的错误页面

  isErrorPage:标识当前也是是否是错误页面。

  * true:是,可以使用内置对象exception,exception可以getMessage获取错误信息

  * false:否。默认值。不可以使用内置对象exception

include指令

  include表示页面包含的,导入页面的资源文件

taglib指令  

  taglib用于导入资源,例如我们可以导入标签库,以jstl为例

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> prefix:前缀,自定义的,可以理解为导入资源的命名空间

jsp页面的注释

  jsp页面有html也有java,这也就意味着有两种注释形式

  html注释格式:<!--  --> ,它只能注释html代码片段

  jsp注释格式:<%--  --%> ,它能注释所有内容

  

一点一点积累,一点一点蜕变!
原文地址:https://www.cnblogs.com/qq2210446939/p/14835813.html