JSP:(Java Server Pages)是JavaWeb服务器端的动态资源
作用:显示数据和获取数据,简化书写
原理:本身是一个servlet
组成:html + JSP脚本(java代码片段)+ JSP动态标签
JSP脚本:Java代码片段,它分为三种:
<%....%>: | Java代码 == service()可以写的内容 |
<%=...%>: | 输出语句 输出到页面上 |
<%!...%>: | Java类成员定义,例如成员变量,方法等(不用) |
输出变量:
<%=s1 %><br/>
向客户端输出: <%out.print("你好!");%>
<%! 成员变量,成员方法 %>
JSP注释
<!-- -->,Html注释:它会出现在JSP编译中,并发送到客户端,但客户端浏览器不会显示它。
<%----%>,JSP注释:它不会出现在JSP编译中(跳过),不发送到客户端浏览器
JSP指令:作用:用于配置JSP页面,导入资源文件
1.page:页面指令:
* 格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
page指令的常用属性:
import:等同与import语句
<%@ page import="java.util." %>
<%@ page import="java.util., java.net." %>
在一个JSP页面中可以给出多个page指令,而且import是可以重复出现的
pageEncoding:指定当前页面的编码
默认为contentType的值;
如果pageEncoding和contentType都没指定,默认值为iso-8859-1
contentType:置响应体的mime类型以及字符集
等同与调用response.setContentType("text/html;charset=xxx");
默认为pageEncoding的值;
errorPage:错误页面
如果当前页面出现异常,则跳转到errorPage指定的jsp页面。
例如:<%@ page errorPage="a.jsp" %>
isErrorPage:错误页面跳转开关
isErrorPage="true",可以使用内置对象exception,能跳转到错误页面
autoFlush:自动刷新
当autoFlush为true时,表示out流缓冲区满时会自动刷新。默认为true
buffer:指定out流的缓冲区大小,默认为8KB
isELIgnored:当前JSP页面是否忽略EL表达式,
默认为false,即支持EL表达式
page指令不常用的属性:
language:当前JSP编译后的语言!默认为java
info:当前JSP的说明信息
isThreadSafe:当前JSP是否执行只能单线程访问,默认为false,表示支持并发访问
session:当前页面是否可以使用session,默认为false,表示支持session的使用。
extends:指定JSP真身的父类!
2.include:静态包含指令
格式: <%@include file="页面"%>
作用: 包含指定的页面
静态包含和动态包含:
1.静态包含:在jsp被编译成java文件之前会把两/多个jsp文件合并,然后再编译成一个java文件。
<%@include%>在jsp编译成Java文件时完成包含:共同生成一个class(servlet)文件
2.动态包含:RequestDispatcher的include()(动态包含)
是一个方法,包含两/多个servlet,即两/多个class文件,只是把响应的内容在运行时合并了!
注意:
<%@include file="<%=myfile%>" %> 这是不能通过编译的,因为myfile是一个变量,它的值只有在java编译成class后执行时才能确定。
而include指令需要在jsp编译java时就要确定包含的是哪个页面,<%@include file="a.jsp页面"%>
3.taglib指令:导入(第三方)标签库指令
* 格式
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:指定标签前缀,这个可以随意命名
uri:指定第三方标签库的uri(唯一标识)
<%@taglib prefix="s" uri="/struts-tags"%> 前缀的用法<s:text>
需要先把第三方标签库所需jar包放到类路径中。
JSP九个内置对象
jsp页面中不需要创建,直接使用的对象
對象名 | 真实类型 | 作用 |
* pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
* request | HttpServletRequest | 一次请求访问的多个资源(转发) |
* session | HttpSession | 一次会话的多个请求间 |
* application | ServletContext | 所有用户间共享数据 |
* response | HttpServletResponse | 响应对象 |
* page | Object | 当前页面(Servlet)的对象 this |
* out | JspWriter | 输出对象,数据输出到页面上 |
* config | ServletConfig | Servlet的配置对象 |
* exception | Throwable | 异常对象 |
* response.getWriter()和out.write()的区别:
* 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
* response.getWriter()数据输出永远在out.write()之前
JSP四个作用域
域名 | 对应域对象 | 对象的类型 | 作用范围 |
---|---|---|---|
page | pageContext | PageContext | 本页 |
request | request | HttpServletRequest | 一次请求 |
session | session | HttpSession | 一次会话 |
application | application | ServletContext | web应用 |
补充知识:
JSP动作标签
动作标签由tomcat(服务器)来解释执行!在服务器端执行
html由浏览器来执行!
<jsp:forward>:转发: + <jsp:include>:包含: (动态包含:多个class文件)
它们与RequestDispatcher的include方法一样,前者在Servlet中使用,后者是在jsp中使用!
<jsp:param>:它用来作为forward和include的子标签!用来给转发或包含的页面传递参数!
JavaBean:java小豆子
JavaBean对类的规范要求。必须为成员变量提供getter/setter方法和无参默认构造器
JavaBean属性名要求:前两个字母要么都大写,要么都小写
属性名称就是getter/setter方法去除get/set方法后,然后小写, (决定)
内省:得到/设置bean信息
内省类 --> Bean信息 --> 属性描述符 --> 属性的get/set对应的Method!
利用commons-beanutils更快完成,需要导包
jsp中与javaBean相关的标签:
<jsp:useBean>创建或查询bean
<jsp:useBean id="user1" class="domain.User" scope="session"/> 在session域中查找名为user1的bean,如果不存在,创建
<jsp:setProperty>
<jsp:setProperty property="username" name="user1" value="admin"/> 设置名为user1的这个javabean的username属性值为admin
<jsp:getProperty>
<jsp:getProperty property="username" name="user1"/> 获取名为user1的javabean的名为username属性值