一、声明JSP出错页面

(1) Page directive 的errorPage属性用于指定URL,该URL可处理JSP抛出的异常

(2)URL是相对于Web应用的跟路径。

(3)声明的出错页面可以是另一个JSP,Servlet或HTML文件。

我们看一下使用出错指示声明出错页面

  1. <%@page errorPage="badLogin.jsp"%>  

 

二、Exception内置对象

(1) 使用isErrorPage属性的JSP有一个附加的内置exception

对象使用exception对象的示例badLogin.jsp

  1. <%@ page isErrorPage="true"%>  
  2. Error message=<%=exception.getMessage()%>  
  3. <%PrintWriter writer=new PrintWriter(out);%>  
  4. Stack=<% exception.printStackTrace(writer);%>  

 

(2)Error页面能够在JSP之间共享

三、定义Web应用出错页面

(1) 你可以通过使用<error-page>元素指定具体的页面的方式很好地处理HTTP错误

(2) 如果这些错误没有被Servlets或JSPs做内部处理,则将调用这些页面。

    出错页面声明的示例web.xml文件:

  1. <error-page>  
  2.   <error-code>404</error-code>  
  3.   <location>/handle404.jsp</location>  
  4. </error-page>  
  5. <error-page>  
  6.   <exception-tpye>java.io.IOException </exception-tpye>  
  7.   <location>/handleIOException.jsp</locatio>  
  8. </error-page>  

 

四、Forward与Include

(1) Servlets和JSPs能够通过forward和include协同工作


 


 

(2) Servlet Fowarding
 

 Servlets能够只用RequestDispatcher对象的forward方法永久地把控制传给其它的Servlets

在servlets之间forwarding的示例:

  1. public class Servlet1 extends HttpServlet{  
  2.     public void service(HttpServletRequest request,HttpServletResponse response){  
  3.     ...  
  4.     ServletContext sc=getServletContext();  
  5.     RequestDispatcher rd=sc.getRequestDispatcher("Servlet2");  
  6.     rd.forword(request,response);  
  7.     return;  
  8.     //结束这个servlet   
  9. }  
  10. ...  
  11. }  

 

(3) Servlet Including

Servlets能够使用RequestDispatcher对象的include方法临时地把控制传给其它的Servlets

在servlet之间including的示例:

  1. public class Servlet1 extends HttpServlet{  
  2.     public void service(HttpServletRequest request,HttpServletResponse response){  
  3.     ...  
  4.     ServletContext sc=getServletContext();  
  5.     RequestDispatcher rd=sc.getRequestDispatcher("Servlet2");  
  6.     rd.include(request,response);  
  7.     //继续处理这个servlet   
  8. }  
  9. ...  
  10. }  

 

(4) JSP Forwarding

当使用JSP forward动作时,控制转给目标页面

使用forward动作的示例:

  1. <% if(shippingAddressValid()){%>  
  2.     <jsp:forward page="billing.jsp"/>  
  3. <% else %>  
  4.     <jsp:forward page="address.jsp"/>  
  5. <%}%>  

 

(5) JSP Including

当使用JSP include动作时,将执行被包含JSP并且该JSP的输出将插入到所调用它的JSP中一起输出

JSP根据用户注册情况包含另一个JSP:

  1. <% String registered=request.getParameter("regUser");  
  2.     if(registered.equals("true")){%>  
  3.     <jsp:include page="welcome.jsp"/>  
  4. <%}else{%>  
  5.     <jsp:include page="sorry.jsp"/>  
  6. <%}%>  
  7. ...  

 

五、使用标签库

(1) 定制标签:

  • 扩展JSP功能
  • 根据生成内容和编写代码进行分工
  • 使用Java类(tag handler)实现标签动作
  • 使用指定义标签库描述文件Tag Library Descriptor进行声明和配置
  • 使用taglib指令加载
  1. <%@ taglib uri="counter" prefix="countLib"%>