当前位置: 代码迷 >> JavaScript >> jsp之page授命
  详细解决方案

jsp之page授命

热度:266   发布时间:2013-09-11 18:34:25.0
jsp之page指令

jsp中的page常用属性:

  1. autoFlush:值为:true/false,当值为true,当缓冲区满时,到客户端的输出被刷新;如果设置为false,当缓冲区满时,将出现异常,表示缓冲区溢出。默认为“true”;
  2. buffer:指定到客户端输出流的缓冲模式。如果为none,则表示不设置缓冲区;如果指定数值,那么输出的大小就必须小于这个值。此属性要和autoFlush一起使用,默认大小不小于8KB,根据不同服务器可以设置;
  3. contextType:定义JSP字符的编码和页面响应的MIME类型;比如中文:contextType="text/html;charset=utf-8";
  4. errorpage:定义当前页面要出错时,所跳转的页面地址;
  5. extends:主要定义jsp页面产生的Servlet是从哪个父类扩展出来的;
  6. import:此jsp页面需要导入的包;
  7. info:此jsp页面的信息;
  8. isErrorPage:表示此页面是否为出错处理页;如果为true,则errorPage指定的页面出错时才能跳转到此页面进行错误处理;如果设置为false,则无法处理;
  9. isThreadSafe:表示当前页面是否为线程安全,如果为true,表示当前页面可以处理多个用户的请求,如果为false,一次只能处理一个用户的请求;
  10. language:定义要使用的脚本语言;
  11. pageEncoding:jsp页面的字符编码;
  12. session:指定所在页面是否参与HTTP会话,默认值是true;

设置页面的MIME(了解下即可);

??? 什么是MIME?

??????? MIME(Multipurpose Internet Mail Extensions,多功能Internet邮件扩充服务)类型可以设置打开文件的应用程序类型。指某一个文件将以何种应用程序打开;比如在tomcat的conf/web.xml下:

    <mime-mapping>
        <extension>avi</extension>
        <mime-type>video/x-msvideo</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>class</extension>
        <mime-type>application/java</mime-type>
    </mime-mapping>

?设置文件编码:

???? 出来可以用contentType指定MIME类型外(使用charset设置编码),还可以使用pageEncoding进行编码的指定,如:

<%@ page language="java" pageEncoding="UTF-8"%>

???? 那么使用context和pageEncoding设置编码有什么区别?

pageEncoding指的是jsp文件本身的编码,而contentType中的charset指的是服务器发送给客户端的内容编码。在jsp中,如果pageEncoding存在,那么jsp的编码由pageEncoding决定,否则由contentType中的charset属性决定;如果两者都不存在,则使用默认的ISO-8859-1;

设置错误页面:

???? 不论是程序跳转错误,还算内部错误,还算jsp页面出现错误;我们都可以进行统一设置;修改 web.xml:

	<error-page>
		<error-code>404</error-code>
		<location>/notFound.jsp</location>
	</error-page>

如果出现404的错误时,就会找到notFound.jsp页面;

包含指令

???? 当一个工程中,会很重复的使用一个页面,为了避免重写这个页面,我们可以使用包含;包含分为2种:静态包含,动态包含;

  • 静态包含:指在jsp编译时插入一个包含文本或代码的文件,这个包含的过程是静态的,而包含的文件可以是jsp文件,HTML文件,文本文件或者是一小段java程序;

语法:

<%@ include file="top.jsp" %>
  • ?动态包含:使用<jsp:include >指令可以完成动态包含的操作,与静态包含不同,动态包含语句可以自动区分被包含的页面是静态还算动态(如果是静态,则想静态包含那样包含进来,如果是动态,则先进行动态的处理,然后将处理后的结果包含进来)。

语法:

<jsp:include page="top.jsp" flush="true"></jsp:include>

?还可以向被包含的页面传递参数:

	<jsp:include page="top.jsp" flush="true">
		<jsp:param value="10" name="num"/>
	</jsp:include>

当上面的flush值设置为false时,表示这个网页完全被读进来以后才输出,在每一个JSP的内部都会有一个buffer;如果是true,当buffer满了就输出,一般将此属性设置为true;

使用静态包含?使用动态包含?

?? 使用动态包含更好,静态包含的操作属于先包含后处理,而动态包含如果被包含的页面是动态页,则属于现处理后包含。

?? 测试下:写一个被包含的jsp:

include.jsp:

	<%
		int x = 100;
	 %>
	 <h1>include----<%= x %></h1>

?在index.jsp我们首先静态包含它:

	<%
		int x = 100;
	 %>
	 <h1>include----<%= x %></h1>
	 <%@include file="include.jsp"%>
?

则会出现:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 11 in the jsp file: /include.jsp
Duplicate local variable x
8: </head>
9: <body>
10: 	<%
11: 		int x = 100;
12: 	 %>
13: 	 <h1>include----<%= x %></h1>
14: </body>

?原因就是重复了变量x,因为静态包含是先将全部内容包含在一起,然后在一起编译, 这样的话,x变量就相当于定义了两次,所以出现以上的错误;

如果换成动态包含:

	<%
		int x = 100;
	 %>
	 <h1>include----<%= x %></h1>
	 <jsp:include page="include.jsp"></jsp:include>

?就没问题,因为动态包含是这样处理的:如果被包含的页面是的动态页,则会现分别进行处理,然后在将结果包含进来;

跳转指令:

在jsp中可以使用<jsp:forward>指令,将一个用户的请求(request)从一个页面传递到另外一个页面,即完成跳转动作;

语法:

<jsp:forward page="{文件路径|<%=表达式 %>}"></jsp:forward>

?传递参数:

	<jsp:forward page="{文件路径|<%=表达式 %>}">
		<jsp:param value="10" name="num"/>
	</jsp:forward>	

?这个跳转属于服务器端的跳转(如果路径没变,但是内容变了,则这种跳转属于服务器端跳转);

?

?

?


我的异常网推荐解决方案:org.apache.jasper.JasperException: Unable to compile class,http://www.myexception.cn/j2ee/2308.html
  相关解决方案