当前位置: 代码迷 >> JavaScript >> J2EE技术规范(4)――JSP(出错页,Forward,Include,标签)
  详细解决方案

J2EE技术规范(4)――JSP(出错页,Forward,Include,标签)

热度:399   发布时间:2012-12-25 16:18:28.0
J2EE技术规范(四)――JSP(出错页,Forward,Include,标签)

一、声明JSP出错页面

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

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

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

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

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

二、Exception内置对象

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

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

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

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

三、定义Web应用出错页面

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

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

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

<error-page>
  <error-code>404</error-code>
  <location>/handle404.jsp</location>
</error-page>
<error-page>
  <exception-tpye>java.io.IOException </exception-tpye>
  <location>/handleIOException.jsp</locatio>
</error-page>

四、Forward与Include

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



(2) Servlet Fowarding

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

在servlets之间forwarding的示例:

public class Servlet1 extends HttpServlet{
	public void service(HttpServletRequest request,HttpServletResponse response){
	...
	ServletContext sc=getServletContext();
	RequestDispatcher rd=sc.getRequestDispatcher("Servlet2");
	rd.forword(request,response);
	return;
	//结束这个servlet
}
...
}

(3) Servlet Including

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

在servlet之间including的示例:

public class Servlet1 extends HttpServlet{
	public void service(HttpServletRequest request,HttpServletResponse response){
	...
	ServletContext sc=getServletContext();
	RequestDispatcher rd=sc.getRequestDispatcher("Servlet2");
	rd.include(request,response);
	//继续处理这个servlet
}
...
}

(4) JSP Forwarding

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

使用forward动作的示例:

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

(5) JSP Including

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

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

<% String registered=request.getParameter("regUser");
	if(registered.equals("true")){%>
	<jsp:include page="welcome.jsp"/>
<%}else{%>
	<jsp:include page="sorry.jsp"/>
<%}%>
...

五、使用标签库

(1) 定制标签:

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


(2)创建标签

从文件获得一些点击数量的JSP标签:

package staplerz.tagext.counter;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class Display extends TagSupport{
	public int doStartTag()throws Jspexception{
		File countFile=new File("count.tmp");
		int count=Count.getCount(countFile);
		JspWriter out=pageContext.getout();
		try{
			out.print(count);
		}catch(IOException ioe){//Error handing
			}
		return(SKIP_BODY);
	}
}

我们这节内容属于补充Jsp的一些内容。

2楼lfmilaoshi53分钟前
继续n米老师
Re: yi_zz53分钟前
回复lfmilaoshin好的
1楼llhhyy1989昨天 08:19
嗯。基础知识。积累中。
Re: yi_zz昨天 21:42
回复llhhyy1989n积累中
  相关解决方案