四、JSP 的内置对象

目录

一、JSP入门

二、JSP 运行原理

1、JSP 技术特点

2、JSP 与 Servlet 区别

三、JSP 的使用

1、JSP 的三种原始标签

2、JSP 原始标签的使用

3、JSP 的指令标签

4、JSP 三大指令

四、JSP 的内置对象

request常用的方法:

response常用的方法

session

session常用方法

五、JSP四大作用域对象

一、JSP入门

1、JSP技术介绍

为什么会出现JSP(Java Server Pages)技术?

程序员在开发过程中,发现Servlet做界面非常不方便,所以产生了jsp技术。JSP其实是对Servlet进行了包装而已。jsp + java类(service、javabean)+ servlet,就会构成mvc的开发模式,mvc模式是目前软件公司中相当通用的开发模式。

2、JSP是什么?

JSP(全称 Java Server Pages)Java 服务端页面技术,是 JavaEE 平台下的技术规范。它允许使用特定的标签在 HTML 网页中插入 Java 代码,实现动态页面处理,所以 JSP 就是 HTML 与Java 代码的复合体。JSP 技术可以快速的实现一个页面的开发,相比在 Servlet 中实现页面开发将变得更加容易。

jsp运行在服务器jsp的基础是Servlet(相当于对Servlet进行了一个包装而已)jsp是一个综合技术,如下公式:jsp = html + java片段 + JSP标签(语法) + javascript(css)

3、JSP的特点:

JSP的全称是Java Server Pages,它和Servlet技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。jsp这门技术的最大的特点在于,写jsp就像在写HTML。但它相对于html而言,html只能为用户提供静态数据,而jsp技术允许在页面中嵌套java代码,为用户提供动态数据。相比Servlet而言,Servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。

二、JSP 运行原理

1、JSP 技术特点

1、JSP 和 Servlet 是本质相同的技术。当一个 JSP 文件第一次被请求时,JSP 引擎会将该 JSP编译成一个 Servlet,并执行这个 Servlet。如果 JSP 文件被修改了,那么 JSP 引擎会重新编译这个 JSP。

2、JSP 引擎对 JSP 编译时会生成两个文件分别是.java 的源文件以及编译后的.class 文件,并放到 Tomcat 的 work 目录的 Catalina 对应的虚拟主机目录中的 org\apache\jsp 目录中。两个文件的名称会使用 JSP 的名称加”_jsp”表示。如:index_jsp.java、index_jsp.class。

2、JSP 与 Servlet 区别

JSP以源文件形式部署到容器中,而Servlet需要编译成class文件后部署到容器中。JSP部署到web项目的根目录下或根目录下的其他子目录和静态同资源位于相同位置,而Servlet需要部署到WEB-INF/classes目录中。JSP中的HTML代码会被JSP引擎放入到Servlet的out.write()方法中,而在servlet中我们需要自己通过对字符流输出流的操作生成响应的页面。JSP更擅长表现于页面显示,Servlet更擅长于逻辑控制。

三、JSP 的使用

1、JSP 的三种原始标签

JSP 的原始标签在 JSP 的任何版本中都可以使用。

2、JSP 原始标签的使用

//需求:以 20%概率显示你中奖

Title

欢迎来到中奖游戏

<%

int flag = new Random().nextInt(100);

if (flag <= 20){

%>

中奖了 <%=flag %>

<% }else {%>

再试一次吧 <%= flag %>

<% } %>

3、JSP 的指令标签

JSP 指令标签的作用是声明 JSP 页面的一些属性和动作。

<%@指令名称 属性=“值” 属性=“值”%>

4、JSP 三大指令

page:主要声明JSP页面的一些属性include:静态包含taglib:导入标签库

(1)Page指令标签:

contentType:设置响应类型和编码。

pageEncoding:设置页面的编码。

import:导入所需要的包。

language:当前JSP页面里面可以嵌套的语言。

session:设置JSP页面是否获取 session 内置对象。

buffer:设置JSP页面的流的缓冲区的大小。

autoFlush:是否自动刷新。

extends:声明当前JSP的页面继承于那个类.必须继承的是httpservlet及其子类。

isELIgnored:是否忽略 el 表达式。

errorPage:当前JSP页面出现异常的时候要跳转到的JSP页面。

isErrorPage:当前JSP页面是否是一个错误页面。若值为true,可以使用JSP页面的一个内置对象 exception。

(2)Include 指令标签:

静态包含,可以将其他页面内容包含进来,一起进行编译运行,生成一个 java 文件。

<%@include file=“被包含 JSP 的相对路径” %>

(3)Taglib 指令标签:

导入标签库。

<%@taglib prefix=“前缀名” uri=“名称空间” %>

四、JSP 的内置对象

JSP 中一共预先定义了 9 个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception。

request对象:request 对象是 HttpServletRequest 类型的对象。

response对象:response 对象是 HttpServletResponse 类型的对象。

session对象:session 对象是 HttpSession 类型的对象,只有在包含 session= "true” 的页面中才 可以被使用。

application对象:application 对象是 ServletContext类 型的对象

out对象:out对象是JspWriter类型的对象

config对象:config 对象是ServletConfig类型的对象。

pageContext 对象:pageContext 对象是PageContext类型的对象。作用是取得任何范围的参数,通过它可以获取JSP页面的out、request、reponse、session、application 等对象。pageContext 对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用pageContext对象。

page对象:page 对象代表JSP本身。

exception对象:exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true” 的页面中 才可以被使用。

request常用的方法:

String getParameter(String key):获取客户端的参数值void setAttribute(String key,Objecy value):通过键值对的方式保存数据void getAttribute(String key):获取key 值RequestDispatcher getRequestDispatcher(String path) :返回RequestDispatcher对象,该对象调用foward方法请求转发

test.jsp文件

<%

String idStr = request.getParameter("id");

Integer id = Integer.parseInt(idStr);

id++;

//将数据存储到request中

request.setAttribute("number",id);

//将请求转发到test2.jsp并响应

request.getRequestDispatcher("test2.jsp").forward(request,response);

test2.jsp文件

<%

Integer number = (Integer) request.getAttribute("number");

%>

<%=number%>

String[] getParameterValues(String key) 获取客户端传来多个重名的参数

<%

String[] names = request.getParameterValues("name");

%>

<%=Arrays.toString(names)%>

void setCharacterEncoding(String charset) 指定每个请求编码

<%

request.setCharacterEncoding("UTF-8");

%>

response常用的方法

sendRedirect(String key). 重定向,进行页面跳转

转发getRequestDispatcher和重定向sendRedirect的区别:

转发:是将同一个请求传给下一个页面。重定向:是调起新的一个请求传给下一个页面,之前的请求结束生命周期。转发:同一个请求在服务器之间传递,地址栏不变,也称服务器跳转。重定向:由客户端发起一次新的请求来访问跳转后的目标资源,地址栏改变,也称客户端跳转。

如果两个页面需要传递值的话,则必须使用转发,不能重定向。

如果两个页面不需要传递值,可使用重定向。

session

用户会话

服务器无法识别每一次HTTP 请求出处(不知道来自哪个终端),它只会接受到一个请求, 所以存在一个问题:将用户的响应给其他人,必须有一种技术来让服务器知道请求来自哪里,这就是会话技术。

会话:就是客户端和服务器之间发生一系列的请求和响应的过程,打开浏览器进行操作至关闭浏览器的过程。

会话状态:指服务器和浏览器会话过程中产生状态信息,借助于会话状态,服务器能够把属于同一次会话一系列的请求和响应关联起来。

实现会话方式:

sessioncookie

属于同一会话请求,都有一个唯一的标识:sessionID

<%

String sessionId = session.getId();

System.out.println(sessionId);

%>

session常用方法

String getId():获取sessionIDvoid setMaxInactiveInterval(int intval) :设置session的失效时间,单位秒int getMaxInactiveInterval():获取当前 session 的失效时间void invalidate():设置session 立即失效void setAttribute(String key ,Object value) :通过键值对的方式存储数据void getAttribute(String key) :获取键值数据值void removeAttribute(String key):移除

五、JSP四大作用域对象

PageContext : pageConext 存放的数据在当前页面有效,开发时使用较少。

ServletRequest: request 存放的数据在一次请求(转发)内有效,使用非常多。

HttpSession: session 存放的数据在一次会话中有效,使用的比较多。如:存放用户的登录信息,购物车功能。

ServletContext: application 存放的数据在整个应用范围内都有效,因为范围太大,应尽量少用。