必须掌握page指令的5个核心属性:①pageencoding声明jsp源码编码,避免编译乱码;②contenttype设置响应头字符集,确保浏览器正确解码;③import导入java类包,支持多包逗号分隔;④session控制会话自动绑定,false可节省内存;⑤errorpage与iserrorpage配对实现异常跳转与堆栈捕获。

要在JSP页面中精确控制Servlet生成行为、字符编码、会话参与或错误处理流程,必须正确配置page指令的属性,否则可能出现中文乱码、session不可用、缓冲区溢出或异常跳转失效等问题。
最常用且必须掌握的5个属性
① 【pageEncoding】:声明JSP源文件本身的字符编码,如。它只影响JSP编译阶段对源码的读取——若不设置,容器按ISO-8859-1解析中文,直接导致<!--%-->输出问号或方块。
② 【contentType】:设置响应头的MIME类型与字符集,如。它告诉浏览器“用UTF-8解码HTML”,缺省时浏览器可能用GBK或系统默认编码渲染,页面中文仍会乱码。
③ 【import】:导入Java类包,支持逗号分隔多包或多次声明,如。未导入就调用new Date()会编译失败;注意java.lang.*等基础包已默认导入,无需重复写。
④ 【session】:控制是否自动绑定HTTP会话,session="false"时页面内访问session变量直接抛IllegalStateException。高并发静态页(如首页、帮助页)应显式设为false,避免无谓创建HttpSession消耗内存。
⑤ 【errorPage】与【isErrorPage】需配对使用:让当前页异常时跳转;而放在500.jsp顶部,才能在其中使用exception隐式对象打印堆栈。
容易被忽略但关键的3个属性
方法一:buffer与autoFlush联动控制输出流
设置后,若输出内容超16KB又未手动调用out.flush(),容器抛IOException而非自动清空缓冲区——这在生成大报表时极易触发。
方法二:isThreadSafe决定Servlet线程模型会使生成的Servlet实现SingleThreadModel接口,容器为每个请求分配独立实例。虽避免线程安全问题,但大幅增加内存开销和GC压力,现代应用几乎不再使用。
方法三:isELIgnored禁用EL表达式解析后,${user.name}将原样输出到HTML而非执行取值。仅在迁移旧系统或调试EL语法错误时临时启用,生产环境必须保持false(默认值)。
其他属性使用场景
language属性目前仅支持Java,可省略不写;extends指定Servlet父类属于高级定制,普通开发严禁修改,否则可能破坏容器兼容性;info属性仅用于getServletInfo()返回字符串,无实际运行影响;isErrorPage单独设置无意义,必须配合errorPage或try-catch中的response.sendRedirect()才生效。









