1.jsp介绍
动态页面技术,JSP全名为Java Server Pages,中文名(java服务页面),它实现了Html语法中的java扩展(以 <%, %>形式),就是可以在jsp页面中书写java代码。jsp是通过servlet技术实现的一种技术
在jsp刚刚出现的时候就替代了servlet,当时把大量的代码都集成到jsp页面中(一个jsp的form提交到另一个jsp),后面由于业务的增多还有技术的进步,jsp现在就仅仅作为一个显示数据的页面的作用。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</body>
</html>
2.脚本和注释
三种在jsp页面中书写java代码方式
<%java代码%> ----- 内部的java代码翻译到service方法的内部,局部变量,不能声明方法
<%=java变量或表达式> ----- 会被翻译成service方法内部out.print()
<%!java代码%> ---- 会被翻译成servlet的成员的内容,全局变量,可以声明方法
三种注释
Html注释:<!--注释内容--> ---可见范围 jsp源码、翻译后的servlet、页面(不常用)
java注释://单行注释 /*多行注释*/ --可见范围 jsp源码 翻译后的servlet(常用)
jsp注释:<%--注释内容--%> ----- 可见范围 jsp源码可见(最常用)
3.jsp原理
jsp的本质就是servlet,jsp在第一次访问的时候会被web容器翻译成servlet,然后再执行
运行:第一次访问 >>> hello.jsp >>> hello_jsp.java >>> 编译成.class >>> 运行(在tomcat中可以找到)
4.三大指令
4.1)page指令
创建jsp时默认生成,属性是以键值对形式存在,是属性最多的一个指令
language:jsp脚本中可以嵌入的语言种类
pageEncoding:当前jsp文件的本身编码---内部可以包含contentType
contentType:response.setContentType(text/html;charset=UTF-8)
session:是否jsp在翻译时自动创建session
import:导入java的包
errorPage:当当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面
4.2)include指令
页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中
<%@ include file="被包含的文件地址"%>
4.3)taglib指令
在jsp页面中引入标签库(jstl标签库、struts2标签库)
<%@ taglib uri="标签库地址" prefix="前缀"%>
5.九大内置对象
out:用于页面输出------javax.servlet.jsp.JspWriter
request:用户请求信息------javax.servlet.http.HttpServletRequest(重要、重要、重要)
response:用户响应信息------javax.servlet.http.HttpServletResponse(重要、重要、重要)
session:用来保存用户信息------javax.servlet.http.HttpSession(重要、重要、重要)
config:服务器配置,可以获得初始化参数------javax.servlet.ServletConfig
application:所有用户的共享信息,即:ServletContext域-----javax.servlet.ServletContext
page:指当前页面转换后的Servlet类的实例------javax.servlet.ServletContext
pageContext:jsp页面容器------javax.servlet.jsp.PageContext(重要、重要、重要)
exception:表示JSP页面所发生的异常,在错误页中才起作用------java.lang.Throwable
a.out对象
out作用就是想客户端输出内容----out.write()
out缓冲区默认8kb 可以设置成0 代表关闭out缓冲区 内容直接写到respons缓冲器
b.pageContext对象(划重点)
jsp的页面上下文对象,是一个域对象
作用一:<---通用的域方法--->
setAttribute(String name,Object obj)
getAttribute(String name)
getAttribute(String name)
<---pageContext可以向指定的其他域中存取数据--->
pageContext.getAttribute("name", PageContext.REQUEST_SCOPE)
setAttribute(String name,Object obj,int scope)
setAttribute(String name,Object obj,int scope)
setAttribute(String name,Object obj,int scope)
findAttribute(String name)可以通过name直接拿出其他域中的值(依次从:pageContext域,request域,session域,application域)
作用二:可以获得其隐式对象pageContext.getRequest()
四大作用域总结:
page域:当前页面,主要作用于一个jsp页面
request域:一次请求,也是一次性数据(内部转发)
session域:一次会话,直到浏览器关闭
application域:整个web应用,即ServletContext域范围最大
在java中往往能通过最小的得到最大的
6.jsp标签
页面包含(动态包含):<jsp:include page="被包含的页面"/>动态包含与静态包含区别于:静态包含会直接将两个jsp页面整合成一个java文件然后编译运行,动态包含则是两个java文件编译运行后再整合到一起
请求转发:<jsp:forward page="要转发的资源" />