JSP技术(1)
JSP技术:jsp概述、jsp基本语法、jsp的隐式对象、jsp指令、jsp动作元素、通过jsp做两个页面
1.JSP概述:
1.1 什么是jsp:它的英文全称 java server pages ,java服务端页面,它是建立在servlet规范基础上的动态网页开发技术。
- java 服务端 页面: 在jsp上可以写java代码,也可以写html标记,它运行在服务器端。
- jsp = java + html + jsp自身的一些东西。
为什么会产生jsp技术:
因为在早期没有jsp时,需要servlet向页面写数据,比较麻烦,所以就产生了jsp技术,
jsp最大的特点:可以非常简单的书写页面html。
jsp其实它的本质是servlet: 可以看到jsp 继承了 HttpJspBase 继承 HttpServlet。
1.2 编写第一个jsp文件: jsp生成java文件,编译成class文件,存在tomcat服务器的work目录。
注意:修改jsp的默认编码格式:window---------->preferenes-----> 搜索 jsp -----> 选中编码 进行修改
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
大数据2005
<% response.getWriter().print("化工"); %>
</body>
</html>
运行结果:
1.3 JSP运行原理:
jsp–》java—》 .class
1.通过浏览器首次访问jsp时
2.JSP容器会生成对应的Servlet文件,也就是.java文件
3.JSP容器,会把java文件编译对应的class文件
4.JSP容器,会生成对应的servlet对象
5.通过生成的servlet对象,去处理浏览器发送的请求,响应数据给浏览器。
2.JSP基本语法
1.1 JSP脚本元素
在jsp页面书写java的三种形式:
1.可以声明语句和方法
2.可以书写java代码段
3.可以书写表达式
1. JSP Scriptlets:对应的位置生成在 _jspService方法内部。
在jsp页面里可以书写java代码片段,基本语法:<% java代码片段 %>
2. JSP 声明语句:对应的位置生成在了成员位置。
在jsp里面可以书写变量和方法:基本语法:
<%!
定义变量或者方法
%>
创建example.jsp文件。编写声明语句
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
int a=1;
int b=2;
%>
<%!
public String dashuju(){
String str="dashuju";
return str;
}
%>
<%
out.print(a+b);
%>
<br/>
<%response.getWriter().print("huagong"); %>
<br>
<%out.print(dashuju()); %>
<br>
<br>
<%=a+b %>
<br>
<%=dashuju() %>
</body>
</html>
运行结果:
-
JSP 表达式:对应的位置生成在 _jspService方法内部。
在jsp页面,可以输入一个结果,基本语法:<%=表达式 %>,其实就等同于out.print(); ,注意:表达式后面不能书写分号1.2 JSP注释:
在jsp里面,可以书写html,可以书写java,可以书写jsp自身的一些内容。
在jsp里面写注释三种形式:
>>> 1. html注释: :在任何地方都存在了。
>>> 2.java注释:单行,多行,文档注释:它存在jsp页面,也存在java文件里面,对应生成的html就消失了
>>> 3. jsp注释: <%-- jsp注释–>: 只存在jsp页面,在生成对应的java文件时,它就消失了。
例:
创建example2.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
html内容
<!-- html注释 -->
<%
//java 注释
System.out.print("java 注释");
%>
<%--jsp注释 --%>
</body>
</html>
运行结果:
3.JSP 指令:page指令、include指令、taglib指令(现在不讲)
1.1 page指令
page指令的用途是设置与jsp页面相关的信息,比如说设置jsp页面的编码,jsp页面的默认语言等
基本语法格式:<%@ page 属性=“属性值” 属性=“属性值” 属性=“属性值” %>
比如:
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
常用属性:
language: 默认语言java,也就是只有java一种语言。
pageEncoding:设置jsp的编码格式,一般情况下可以省略 contentType这个属性。
session属性:值得类型是boolean,如果对应的值是true,在jsp页面可以使用session对象,反之就不能使用。
import属性:导包,和在java里面使用一样,如果想使用某个类,前提导入某个类的包名。
----
1.2 include指令:
在jsp页面通常会需要显示其它页面的信息,所以可以通过这个include指令把其它页面包含过来。
基本语法:<%@ include file=“被包含文件的url” %>
创建两个jsp页面: date.jsp页面,include.jsp页面。
使用jsp的include指令实现的包含,又称为静态包含,静态包含的特点:
1.把多个页面的内容,合并输出,比如把date.jsp 和 include.jsp内容合并输出。
2.多个页面对应生成一个java文件,编译后,对应一个class文件。
例:
date.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import ="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
date.jps页面用来输出当前时间:
<% out.print(new Date().toLocaleString()); %>
</body>
</html>
运行结果:
include.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
我是include页面,下面是我包含进来的页面:
<%@ include file="date.jsp" %>
</body>
</html>
运行结果:
-
JSP 隐式对象
1.1 隐式对象概述:
什么是隐式对象:在jsp页面里面,jsp提供了一些对象,不用咱们自己创建,可以直接使用的对象。
jsp常见的九大隐式对象:
request: HttpServletRequest,请求对象,它同时也是域对象,作用范围一次请求
response:HttpServletResponse,响应对象
session: HttpSession ,会话对象,它同时也是域对象,作用范围一次会话
application:ServletContext,上下文对象,它同时也是域对象,作用范围整个项目
config:ServletConfig,配置对象
out:JspWriter,其实和PrintWriter作用差不多。
page:Object ,代表当前jsp的页面对象
pageContext:PageContext ,jsp容器
exception:Throwable,异常对象,用来捕获异常信息。
只有当前jsp页面有isErrorPage="true"这个属性时,才能使用exception对象。1.2 out对象
out对象在输出内容到网页上面去,最终是通过reponse缓冲区给输出的。
例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.print("first line <br>");
response.getWriter().print("seconde line <br>");
%>
</body>
</html>
运行结果:
1.3 pageContext对象
第一个功能:获取其它八个隐式对象
>>> 1.获取请求对象:getRequest();
>>> 2.获取响应对象:getResponse();
>>> 3.获取输出对象:getOut();
-------------
第二个功能:操作其它三个域对象:request、session、application.
pageContext也是一个域对象:作用范围在当前jsp页面。
操作其它三个域对象的方法:
1.存值:setAttribute(String key,Object obj,int scope);
APPLICATION_SCOPE :对应的是application
REQUEST_SCOPE: 对应的是request
SESSION_SCOPE:对应的是session
PAGE_SCOPE:对应的是自己 pageContext
2.取值:getAttribute(String key,int scope);
例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
HttpServletRequest req=(HttpServletRequest) pageContext.getRequest();
//req.setAttribute("dashu","huagong");
pageContext.setAttribute("dashu11","pagecontext",pageContext.PAGE_SCOPE);
pageContext.setAttribute("dashu22","REQUEST",pageContext.REQUEST_SCOPE);
pageContext.setAttribute("dashu33","SESSION",pageContext.SESSION_SCOPE);
pageContext.setAttribute("dashu","APPLICATION",pageContext.APPLICATION_SCOPE);
%>
<%=pageContext.findAttribute("dashu") %>
<hr/>
<%=(String) req.getAttribute("dashu") %>
</body>
</html>
运行结果:
结论:在pageContext域对象使用findAttribute方法获取值,进行了全域查找
查找的范围:pageContext—>request----->session----->application
首先找域作用范围小的对象,如果有值获取到,停止向下查找,如果不存在对应的值,就继续向下寻找。
1.4 exception 对象
它是用来捕获异常信息的。
使用它通常会用到两个属性:
errorPage:属性对应的值,处理异常信息的页面,就是说在当前页面发生了异常,跳转到处理异常信息的页面
比如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="error.jsp"%>
<!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>Insert title here</title>
</head>
<body>
<%
int a=3;
int b=0;
%>
输出:<%=(a/b) %>
>>> isErrorPage: 属性对应的值是true或者false,如果为true,在当前页面可以使用exception对象
比如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!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>Insert title here</title>
</head>
<body>
输出异常信息: <%=exception.getMessage() %>
</body>
</html>