jsp概述及原理
JSP全称是Java Server Pages,中文名叫java服务器页面,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是Servlet。可以理解为:jsp = html + java
注意:
- servlet:服务器端的小应用程序。主要功能为:获取表单数据、处理业务逻辑、分发转向。
- jsp:适合编写输出动态内容,但不适合编写java逻辑。
jsp的原理:jsp文件翻译称为.java文件;.java文件编译生成.class文件。
jsp的基本语法
JSP的脚本
小脚本 <% java代码 %>
表达式 <%= 表达式 %>
等价于out.print(表达式);
声明 <%!declaration; [ declaration; ]+ ... %>
表示在类中定义全局成员,和静态块。
JSP注释
JSP注释:<%-- 被注释的内容 --%> 特点:网页源代码中不可见。安全,省流量
网页注释: 特点:网页源代码中可见。不安全,费流量
jsp的3个指令
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
page指令
语法:<%@ 指令名称 属性1="属性值1" 属性2="属性值2"...%>
或者:<%@ 指令名称 属性1="属性值1"%>
<%@ 指令名称 属性2="属性值2"%>
如:解决中文乱码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
作用:用于定义JSP页面的各种属性
属性:(基本上使用默认的就行)
import 和java代码中的import是一样的
比如:<%@ page import="java.util.Date,java.util.List"%>
JSP会自动导入以下的包:
import java.lang.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*;
- session: 是否会自动创建session对象。默认值是true。
- buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小,默认是8kb。
- errorPage: 如果页面中有错误,则跳转到指定的资源。
errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。如果不写“/”则代表相对路径。 - isErrorPage: 是否创建throwable对象。默认是false。
- contextType: 等同于response.setContextType("text/html;charset=utf-8")。
- pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。
- isELIgnored: 是否支持EL表达式。 默认是false
include指令
静态包含:把其它资源包含到当前页面中。
<%@ include file="..." %>
动态包含:
<jsp:include page="..."></jsp:include>
两者的区别:
翻译的时间段不同
静态包含:在翻译时就把两个文件合并
动态包含:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
原则:能用静态包含就不用动态包含。
taglib指令
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
jsp的6个动作
- jsp:include 在页面被请求的时候引入一个文件。
- jsp:useBean 寻找或者实例化一个JavaBean。
- jsp:setProperty 设置JavaBean的属性。
- jsp:getProperty 输出某个JavaBean的属性。
- jsp:forward 把请求转到一个新的页面。
- jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。
- jsp:element 定义动态XML元素
- jsp:attribute 设置动态定义的XML元素属性。
- jsp:body 设置动态定义的XML元素内容。
- jsp:text 在JSP页面和文档中使用写入文本的模板。
JSP 隐式对象
JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。及:指在JSP的<%=%> 和<% %>中可以直接使用的对象。
- request HttpServletRequest类的实例。
- response HttpServletResponse类的实例。
- out JspWriter类的实例,用于把结果输出至网页上。
- session HttpSession类的实例。
- application ServletContext类的实例,与应用上下文有关。
- config ServletConfig类的实例。
- pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问。本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据
- page 类似于Java类中的this关键字。
- Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象。
附:四大域对象 - PageContext : pageConext 存放的数据在当前页面有效,开发时使用较少。
- ServletRequest: request 存放的数据在一次请求(转发)内有效。
- HttpSession: session 存放的数据在一次会话中有效。使用的比较多。
- ServletContext: application 存放的数据在整个应用范围内都有效,因为范围太大,应尽量少用。