JSP执行过程和隐式对象和错误机制

来源:互联网 发布:evernote 知乎 编辑:程序博客网 时间:2024/05/01 06:25

JSP执行过程和隐式对象和错误机制

一 jsp的执行过程

JSP的执行过程主要可以分为以下几点:

(1)客户端发出请求。

(2)Web容器将JSP转译成Servlet源代码。

(3)Web容器将产生的源代码进行编译。

(4)Web容器加载编译后的代码并执行。

(5)把执行结果响应至客户端。

二 jsp的异常处理机制

1.异常处理机制出现的原因:抓取出现的错误,使得能够更清楚的认识到错误的原因。

2.处理异常的操作

(1)创建一个用于异常处理的jsp页面

1.导入<%@page isErrorPage="true"%>之后,可以使用exception对象

在body中写异常处理的机制,即是写异常的提示

出现了异常:<%=exception%>,请检查JSP页面。<br/>

<!-- 输出异常处理的错误消息 -->

<%exception.printStackTrace(new PrintWriter(out)); %>

(2)指定页面的抛出异常的捕获:可能是哪个页面有异常,需要写入:

<%@ page errorPage="error.jsp"%>

指定跳转到哪个错误页

(3)多个页面都出现异常的捕获---在整个工程下都可以捕获,在web.xml下:

如果在每个有异常的页面都倒入<%@ page errorPage="error.jsp"%>,会是个很麻烦的事情,所有在web.xml中设置会更好

1、指定异常的捕获

<error-page>

<exception-type>java.lang.ArithmeticException</exception-type>

<location>/error.jsp</location>

</error-page>

2、响应码的捕获

<error-page>

<error-code>404</error-code>

<location>/404error.jsp</location>

</error-page>

注:

(1)<error-code></error-code>和

<exception-type></exception-type>不同时使用

(2)可以有多个</error-page>标签

三 jsp的隐式对象

1. JSP隐式对象是Web容器加载的一组类的实例。它是可以直接在JSP页面使用的对象。分为4个主要类别:

– 输入和输出对象:控制页面的输入和输出(request、response、out)。

– 作用域通信对象:检索与JSP页面的Servlet相关的信息(session、application、pageContext)。

– Servlet对象:提供有关页面环境的信息(page、config)。

– 错误对象:处理页面中的错误(exception)。

2. 九个隐式对象的详细介绍

(1)request对象

request隐式对象表示客户端的请求,包含了所有的请求信息,常用的方法:

• String getParameter(String name):根据页面表单组件名称获取请求页面提交的数据。

• String getParameterValues(Stringname):获取页面请求中一个表单组件对应多个值时的用户的请求数据(例如复选框)。

(2)response 对象

response隐式对象处理JSP生成的响应,然后将响应结果发送给客户端,常用的方法:

• void setContentType(String name):设置作为响应生成的内容的类型和字符编码。

• void sendRedirect(String name):发送一个响应给浏览器,指示其应请求另一个URL(会丢失数据,跳转后不再执行sendRedirect方法下面的代码)。

(3)out对象

设置out对象的缓冲区大小

<%@ page buffer="64kb" %>

可能出现的问题:

(1)输出的顺序问题

<%

//写到自己的缓冲区中

out.print("111111");

out.flush();//可以按顺序写入

PrintWriter out1=response.getWriter();

//得到的是servlet引擎所得到的缓冲区

out1.println("222222");

%>

(2)使用冲突问题

通过字节流获取,会抛异常(java.lang.IllegalStateException),因为在这句话之前后有静态的代码,会有out.println();输出的对象

<%

ServletOutputStream sos =response.getOutputStream();

sos.print("www.it315.com");

%>

(3)页面跳转的问题

//请求的转发---系统自动的调用字节流

response.getWriter();//以后的都是打印输出流

RequestDispatcher rd =request.getRequestDispatcher("MyHtml.html");

rd.forward(request,response);

注:Out怎么得到的--

Jspwriter out 是在Priwriter的基础上加了缓冲区

(4)pageContext对象-----作用域通信对象

pageContext对象是javax.servlet.jsp.PageContext类的实例对象

pageContext封装了当前jsp页面的运行信息

pageContext对象可以获取其他对象的方法,通过传参数在java中运行

每一个页面都有自己的pageContext对象,不会有页面的跳转,代表的是当前的页

注:

pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);

等同于

String name =(String)request.getAttribute("name");

(5)session对象-----作用域通信对象

session对象表示用户的会话状况,用此项机制可以轻易识别每一个用户,能保存和跟踪用户的会话状态。session对象最常用的方法:

void setAttribute(String name,Object value)

void getAttribute(String name)

(6)application对象

– application对象作用于整个应用程序,所有的客户端窗口都可以共享该对象,从服务器开始就存在,直到服务器关闭为止。application对象最常用的方法:

• void setAttribute(String name, Objectvalue):以名称/值的方式,将一个对象的值存放到application中(存的值的类型为Object)。

• void getAttribute(String name):根据名称去获取application中存放对象的值(获取的值的类型为Object)。

补充:

在<!%%>中定义的方法不能输出,可以给方法传一个参数,因为out对象是局部的变量,在整个类中不可能使用

Public void fun(PageContextpageContext){

int var =10 ;

Try{

pageContext.getOut().println(var);

}catch(Exception e){

}

}

 

原创粉丝点击