一、什么是JSP
全称:Java Server Pages(java服务器页面)。和Servlet一样,是sun公司定义的一种动态网页开发技术
特点:基于html模板,可以再html模板嵌入java代码和jsp中的标签。
- html:静态页面
- css:修饰美化html的页面
- javaScript:动态修改html页面和css样式
- Servlet:运行在服务器上的java程序。适合编写java代码,写网页困难。
- JSP:适合编写动态内容,不合适写java代码,主要用于显示页面。底层其实就是Servlet
二、为什么要使用JSP?
- jsp性能好,可以再html页面中动态嵌入元素
- 服务器调用的是已经编译好的jsp文件
- jsp基于java Servlet Api,有很多强大企业的支持
- JSP 可以与处理业务逻辑的Servlet一起使用,或该模板被java Servlet 模板引擎所支持。
2、1 JSP的优势
与纯Servlet相比:jsp可以很方便的编写或者修改或者修改HTML网页而不用去面对大量的println语句
与javascript相比:虽然javascript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
与静态的HTML相比:静态的HTML不包含动态的信息
三、JSP的基本语法
3、 1 jsp的语法格式
jsp页面中可以包含任意量的java语句、变量、方法或者表达式
语法格 式 :
<% java代码 %> 要以分号结尾的
声明全局变量:<%! int i=0;%> 记得加感叹号
声明局部变量:<% int i=0;%>
输出变量 : <%= 2+3 %> 不要加分号
3、2 JSP的注释
格式: <%-- 注释 --%>:安全,省流量,不加载这种格式的注释
网页注释:<!-- 注释--> :不安全,耗流量,加载这种格式的注释
四、JSP的三大指令
告诉JSP引擎如何jsp文件中的内容
语法: <%@ 指令名称 属性名称1=“属性值1” 属性名称2=“属性值2” 。。。。。%>
示例:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
4、1 page指令
作用:用于定义JSP 页面的各种属性
import:java代码的含义一样
<%@ page import="java.util.Date,java.util.List"%>
或者:
<%@ pageimport="java.util.Date"%>
<%@ pageimport="java.util.List"%>
session:是否会自动创建session对象,默认值为true;buffer:JSP中有java.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小。默认8kb.
errorPage:如果页面中有错误,跳转到指定的资源 errorPage="/uri" 如果写“/”则代表当前应用的目录 下,绝对路径。 如果不写“/”则代表相对路径
isErrorPage:是否创建throwable对象。默认是false
contentType:等同于response.setContentType(“text/html”;charset=utf-8);服务器发送客户端的内容编码
pageEncoding:Jsp文件本身的编码
isELIgnored:是否支持EL表达式。 默认是false,支持表达式, 是true,不支持表达式,
${1+1};false输出结果2 true按照原样输出
4、2 include 指令
静态包含:把其它资源包含到当前页面中 <%@ include file="header.jsp" %>
动态包含: <jsp:include page=“header.jsp"></jsp:include>
两者的区别:翻译的时间段不同(可在tomcat工作目录下查看) : work\Catalina\localhost\工程名\org\apache\jsp
静态包含:在翻译时就把两个文件进行合并
动态包含:不会合并文件,当代码执行到include时,才包含另一个文件的内容
4、3 taglib指令
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
五、JSP的六个动作
- jsp:include 动态包含
- jsp:forward请求转发
- jsp:param 请求设置参数
- jsp:useBean 创建一个对象
- jsp:setProperty给指定的对象属性赋值
- jsp:getProperty取出指定的对象属值
重要代码:
<!-- 动态包含 -->
<jsp:include page="header.jsp"></jsp:include>
<!-- 转发动作 和传参数动作 -->
<jsp:forward page="action2.jsp">
<jsp:param value="jack" name="name"/>
</jsp:forward>
<!-- javabean有关的三个动作
等价于: Users u = new Users();
-->
<jsp:useBean id="u" class="com.entity.Users"></jsp:useBean>
<!-- 给对象赋值
u.setUname("易烊千玺");
property="uname" 指定属性名
name="u" 对象名,即:userBean标签的id属性的值
value="易烊千玺"
-->
<jsp:setProperty property="uname" name="u" value="易烊千玺"/>
<jsp:setProperty property="upass" name="u" value="jbgsn"/>
<!-- 获得对象的属性的值
out.print(u.getUname());
-->
<jsp:getProperty property="uname" name="u"/>
<jsp:getProperty property="upass" name="u"/>
六、九个内置对象
对象名 | 类型 | 说明 |
---|---|---|
request | javax.servlet.http.HttpServletRequest | |
response | javax.servlet.http.HttpServletResponse | |
session | javax.servlet.http.HttpSession | 由session=“true”开关 |
application | javax.servlet.ServletContext | |
exception | java.lang.Throwable | 由isErrorPage=“false”开关 |
page | java.lang.Object当前对象this | 当前servlet实例 |
config | javax.servlet.ServletConfig | |
pageContext | javax.servlet.jsp.JspWriter | |
out | javax.servlet.jsp.PageContext | javax.servlet.jsp.JspWriter |
6、2 pageContext对象
域对象:可以操作其他三个域对象(request、session、application)
- void setAttribute(String name,Object o);
- Object getAttribute(String name);
- void removeAttribute(String name);
操作其它域对象的方法
- void setAttribute(String name,Objecto,int Scope);
- Object getAttribute(String name,intScope);
- void removeAttribute(String name,intScope);
Scope作用域,值如下:
- PageContext.PAGE_SCOPE
- PageContext.REQUEST_SCOPE
- PageContext.SESSION_SCOPE
- PageContext.APPLICATION_SCOPE
findAttribute(Stringname) 自动从page,request ,session ,application依次查找,
找到了就取值,结束查找 (作用域的范围由小到大)
重要代码:
<%--
pageContext: page上下文 作用域当前网页的上下文
该对象可以操作另外三个域对象
--%>
<%
//page作用域:只在当前页面有效
pageContext.setAttribute("name", "jack");
out.println(pageContext.getAttribute("name"));
//操作request对象
//request:一次请求:a转发b页面 b页面能获得a页面存在request中的值
pageContext.setAttribute("name", "request的jack",PageContext.REQUEST_SCOPE);
//操作session对象
pageContext.setAttribute("name", "session的jack",PageContext.SESSION_SCOPE);
//操作Application对象
pageContext.setAttribute("name", "application中的jack",PageContext.APPLICATION_SCOPE);
//代码转发
// request.getRequestDispatcher("test.jsp").forward(request, response);
//练习findAttribute();
//按照:page request session application的顺序查找name属性对应的值,
//如果查找到,直接返回这个属性的值
out.println(pageContext.findAttribute("name"));
pageContext.forward("test.jsp");//转发
%>
<%-- <jsp:forward page=""></jsp:forward> --%>
6、3 它可以创建其他的8个隐式对象
在普通类中可以通过pageContext 获取其他类的隐式对象
- getException 方法返回exception 隐式对象
- getPage 方法 返回page隐式对象
- getRequest 方法返回request的隐式对象
- getResponse 方法返回response的隐式对象
- getServletConfig方法返回config隐式对象
- getServletContext方法返回application隐式对象
- getSession 方法返回session 隐式对象
- getOut方法返回Out隐式对象
6、4 提供了简易的方法
- pageContext.forward(“2.jsp”);
- pageContext.include(“2.jsp”);
注意:
JSP的底层其实就是Servlet。
可以在tomcat服务器安装路径中的:work\Catalina\localhost\工程名\org\apache\jsp下的java代码查看