JavaWeb开发知识总结(JSP,EL,JSTL)

JavaWeb开发知识总结(JSP,EL,JSTL)

1. JSP概述

JSP技术:Java服务器端页面(Java Server Pages),是一种动态网页开发技术。

JSP的组成:HTML+Java代码+JSP自身元素。

JSP自身元素包括JSP指令,JSP动作标签和JSP的内置对象。

2. JSP执行流程

JSP的本质是Servlet,tomcat服务器会将jsp文件进行编译生成一个servlet.java文件和对应的servlet.class文件,执行的是.class文件。在tomcat服务器的\work\Catalina\localhost目录下对应的项目目录中可以看到jsp页面被翻译成java文件和class文件,查看java文件可以发现JSP页面经过编译后的java类是继承HttpJspBase类,而该类是继承至HttpServlet类,则JSP本质是Servlet。通过查看jsp翻译后的java源文件可知,jsp被翻译成的Servlet其实就是使用jsp内置的out(是JspWriter类型)对象中的Write()方法将jsp页面中的内容进行逐行输出到客户端浏览器中的。

3. JSP的脚本

​ JSP的脚本就是在jsp页面中编写Java代码的方式;由于jsp页面会被翻译成Servlet的java文件并重写Servlet中service方法,java类有成员位置和局部位置(参数位置和方法内部),则针对jsp页面编写Java代码就有三种方式,这三种方式编写的代码会被翻译成Java类中对应的部分。

JSP脚本 JSP被编译成Servlet后对应的位置
<%! java代码; %> 翻译成Servlet类中的成员内容,可以定义变量,方法,类 – 不建议使用
<% java代码; %> 翻译成Servlet类中的service方法内部,可以定义变量和类,必须加分号
<%= java代码 %> 翻译成Servlet类中的service方法的out.write()方法的参数,相当于是直接输出,不能加分号

注意事项:<%= java代码 %>中输出的是变量时,如果变量值为空时,输出的null字符串。

4. JSP文件中的注释

​ 由于JSP是结合HTML和JAVA并定义自身的内置对象,则其注释方式有三种:html的注释,Java代码的注释,及JSP自身的注释。

注释类型 注释格式 注释格式说明 注意事项
HTML注释 输出到客户端还存在 不能注释jsp的脚本内容
Java注释 // 单行 /多行注释*/ /*文档注释*/ 一般用在在jsp脚本中 存在于翻译后Servlet中,输出到客户端的html页面时消失
jsp注释 <%– jsp注释 –%> 只存在于JSP的源代码中 翻译成Servlet后,JSP的注释就消失了

5. JSP指令

​ JSP指令就是设置JSP页面属性的,JSP有三个指令:page,include,taglib

5.1 JSP指令的语法

<%@ 指令名称 属性名称=”属性值” 属性名称=”属性值” …%>,指令名称可以为page,include和taglib。

5.2 JSP的page指令

page指令是设置jsp页面的参数信息。page指令常用的属性有以下几个:

page属性值 属性值说明 使用时注意事项
language JSP脚本中使用的语言 目前只写java
contentType 设置浏览器打开这个JSP的时采用的默认的字符集编码
pageEncoding 设置jsp文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码
import 在JSP中引入java类对象 import可以出现多次,其他属性只能出现一次
extends 设置JSP翻译成Servlet后继承的类 默认值是HttpJspBase,设置时的类必须是HttpServlet的子类.继承后自定义的类中会没有jsp的一些功能
autoFlush 设置JSP的缓存自动刷出 默认是true:自动刷出
buffer 设置JSP的缓冲区的大小,默认8kb
session 设置JSP中是否可以直接使用session对象 默认值是true,设置后直接使用session变量进行Session的操作
isELIgnored 设置在JSP中是否忽略EL表达式 默认值是false不忽略
errorPage 设置错误友好页面的提示 和isErrorPage一起使用,jsp出错后跳转(转发方式)到指定页面,路径是服务器端路径,不能加上工程名
isErrorPage 通过这个设置显示JSP的错误信息 和errorPage一起使用,在errorPage跳转到页面使用

扩展:在web项目下配置全局的错误友好提示

​ 当整个页面出现错误时,系统会跳到指定的页面。在项目的web.xml文件中配置如下:



<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  
  <error-page>
    <error-code>错误的状态码error-code>
    <location>/出错后跳转到指定的jsp页面location>
  error-page>
  
  <error-page>
    <error-code>500error-code>
    <location>/500.jsplocation>
  error-page>
web-app>

5.3 JSP的include指令

​ include指令是使得当前jsp页面去包含其他的jsp页面,使用的包含使用的文件的相对路径。包含的方式是静态包含。其本质就是直接将被包含的jsp页面直接放在此jsp页面使用include指令包含页面的位置,因此使用此种包含时,被包含的页面只需要有内容题就可以了,不需要再定义一个完整的jsp的结构。

格式:<%@ include file=”被包含的jsp文件”%> 文件使用的相对路径。

5.4 JSP的taglib指令

​ taglib指令是用来为jsp页面引入jsp标签库的。一般引入的是jstl标签库。

格式:<%@ taglib uri=”标签库uri” prefix=”标签的别名” %>

6. JSP动作标签

​ JSP动作标签的作用是用来进行简化代码编写的。JSP常用的6个标签如下:

JSP动作标签 说明
< jsp:forward page=”转发的页面”>< /jsp:forward> 页面的转发,使用服务器端路径
< jsp:include page=”被包含的jsp页面”>< /jsp:include> 用于页面包含(动态包含)
< jsp:param value=”参数值” name=”参数名”/> 一般和带有路径的标签一起使用,传递参数,常用上述两个标签
< jsp:useBean id=”javabean类的id”>< /jsp:useBean> 用于在JSP中使用JavaBean
< jsp:setProperty property=”属性值” name=”属性名”/> 用于在JSP中向JavaBean设置属性
< jsp:getProperty property=”属性值” name=”属性名”/> 用于在JSP中获得JavaBean的属性

JSP页面的静态包含(include指令)和动态包含(include标签)的区别:

<%@ include file="被包含的jsp文件"%>是静态包含jsp页面,< jsp:include page="被包含的jsp页面">< /jsp:include>是动态包含jsp页面。 静态包含是直接包含jsp页面的全部内容,而动态包含只是包含被包含jsp页面的运行结果。

JavaWeb开发知识总结(JSP,EL,JSTL)_第1张图片

7. JSP内置对象(重点)

​ JSP内置对象:在jsp页面中可以直接使用的对象(9大内置对象)。在jsp页面翻译成的Servlet的java文件中可以查看到。

7.1 JSP的9大内置对象

内置对象名称 内置对象的数据类型 内置对象常用API
request HttpServletRequest getParameter(String name),setAttribute(String name,Object value),getAttribute(String name);
response HttpServletResponse setHeader(String name,String value),getOutputStream();getWriter()
session HttpSession setAttribute(String name,Object value),getAttribute(String name);
application ServletContext setAttribute(String name,Object value),getAttribute(String name);
page Object toString();wait();(是jsp页面翻译成Servlet后对象引用)
pageContext PageContext setAttribute(String name,Object value),getAttribute(String name);
config ServletConfig getServletName();getServletContext();
out JspWriter write(),print();
exception Throwable getMessage(),getCause();(设置isErrorPage=”true”后才有效)
7.1.1 out内置对象和response.getWriter()的区别:

out内置对象的数据类型是JspWriter,response获取的Writer的数据类型是PrintWriter。

你可能感兴趣的:(JavaWeb,java,web,jsp,EL表达式,JSTL标签库)