-------------------------------------JSP指令-------------------------------------
JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的。
JSP中有三大指令:page、include、taglib,最为常用,也最为复杂的就是page指令了。
指令在“真身”中不存在,生成“真身”时需要使用指令!
Tomcat编译系统会根据JSP的指令信息来编译JSP,生成Java文件。
在生成的Java文件中,不存在指令信息!
pageEncoding指定的是当前JSP页面的编码!Tomcat编译系统会使用这个编码把JSP编译成Java文件。所以这个编译只需要与真实的页面编译一致即可!
contentType指定的是响应给我客户端时使用的编码,即对应response.setConteType()方法的参数值! Tomcat都会把响应正文转换成UTF-8编译,然后发送给我客户端,并且会在响应头中设置Content-Type头信息为text/html;charset=utf-8,这样浏览器就知道使用服务器发送过来的正文使用了什么编码。
无论是page指令的pageEncoding还是contentType,它们的默认值都是ISO-8859-1,我们知道ISO-8859-1是无法显示中文的,所以JSP页面中存在中文的话,一定要设置这两个属性。
其实pageEncoding和contentType这两个属性的关系很暧昧:
也就是说,当pageEncoding和contentType只出现一个时,那么另一个的值与出现的值相同。如果两个都不出现,那么两个属性的值都是ISO-8859-1。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
处理乱码的方案:
Eclipse中设置jsp的默认编码:
import是page指令中一个很特别的属性!
import属性值对应“真身”中的import语句。
import属性值可以使逗号:<%@page import=”java.net.*,java.util.*,java.sql.*”%>
import属性是唯一可以重复出现的属性:
但是,我们一般会使用多个page指令来导入多个包:
<%@ page import=”java.util.*”%>
<%@ page import=”java.net.*”%>
<%@ page import=”java.text.*”%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%--单个引入 <%@page import="java.util.*, com.rl.model.*" %> --%> <%@page import="java.util.*" %> <%@page import="com.rl.model.*" %> <% List for(int i = 0; i < 10; i++ ){ Person p = new Person(); p.setName("李昆鹏"); p.setAge(20); listPerson.add(p); } %>
|
我们知道,在一个JSP页面出错后,Tomcat会响应给我用户错误信息!如果你不希望Tomcat给用户输出错误信息,那么可以使用page指令的errorPage来指定错误页!例如:
<%@page errorPage=”xxx.jsp”%>
这时,在当前JSP页面出现错误时,会转发到xxx.jsp页面。
pageError的路径,由于是服务器端的跳转,所以绝对路径不需要加项目名,直接指定项目名称后面的路径即可
a.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page errorPage="b.jsp" %> <% if(true) throw new Exception("哈哈~"); %> |
b.jsp
<%@ page pageEncoding="UTF-8"%> <html> <body> <h1>出错啦!h1>
|