JSP指令:
格式:<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
一个页面可以有多个page指令;而且不用放在第一行,但是我们基本都放在首行;
1、page指令:
pageEncoding和contentType
pageEcoding:它是指当前页面的编码,只要不说谎,就不会乱码,在服务器把jsp编译成.java时需要使用pageEncoding!!!
contentType:它表示添加一个响应头,Content-Type!!等同于response.setContentType("text/html;charset=utf-8");
如果两个属性值只配置一个编码,那么另一个就默认跟配置的编码一样;如果谁都没出现那么就是IOS,不能出现中文;
errorPage和isErrorPage
errorPage:当前页面如果抛出异常,那么要转发到一个错误提示页面,这个指令就是指定错误页面url的;
isErrorPage:它指定当前页面是否为处理错误的页面!当该属性为true时,这个页面会设置状态码为500!而且这个页面可以使用9大内置对象中的exception!
例:day12_1/error/
在web.xml中配置错误页面
<error-page>
    <error-code>404</error-code>
    <location>/error404.jsp</location>
</error-page>
<error-page>
    <error-type>java.lang.RuntimeException</error-type>
    <location>/error.jsp</location>
</error-page>
注意优先级高的是更细致的优先执行error-type
例:day12_1/WEB-INF/web.xml
autoFlush和buffer
autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新!默认为true,如果为false,那么在缓冲区满时抛出异常!
buffer:指定缓冲区大小,默认为8kb,通常不需要修改!
isELIgnored:是否忽略el表达式,默认值为false,不忽略,即支持!
language:指定当前jsp编译后的语言类型,默认为java。
info:信息!没用
isThreadSafe:当前的jsp是否支持并发访问!默认为false!不要动,百年不设置;
session:当前页面是否支持session,如果为false,那么当前页面就没有session这个内置对象!
extends:让jsp生成的servlet指定去继承某个类的属性!
2、include==>静态包含
  *与RequestDispatcher的include()方法有些类似,包含和被包含的是两个servlet即两个.class;
  *区别在于<%@include%>它是在jsp编译成java文件时完成的!他们共同生成一个java(servlet)文件,然后生成一个class!
  例:/day12_1/include/ni.jsp
3、taglib==>导入标签库
两个属性:
 prefix:指定标签库在本页面中的前缀!由我们自己起名,用于一个页面导入多个标签库内有相同标签的区别;
 uri:指定标签库的位置!
 <%@taglib prefix="s" uri="/struts-tags"%>前缀的用法<s:text>
==================================================
jsp九大内置对象
page  当前jsp对象!它的引用类型是object。Object page = this;就是this的向上转型变成Object
config(ServletConfig)jsp配置文件对象,servlet需要在web.xml中配置,jsp也需要;
request(HttpServletRequest)
response(HttpServletResponse)
session(HttpSession)
pageContext 一个顶9个!! servlet中三大域,jsp中四大域;范围一个jsp页面; 这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据!
exception(Throwable)
application(servletContext)
out  (相当于response.getWriter())jsp的输出流
jsp四大域范围从大到小
application > session > request > pageContext
pageContext代理其他域 pageContext("xxx","yyy",PageContext.SESSION_SCOPE);
pageContext获取其他八个域  pageContext.getSession();
pageContext全域查找pageContext.findAttribute("xxx");从小到大查找;
=================================================================
jsp动作标签:
  这些jsp标签与html提供的标签有本质区别:jsp标签由服务器解释执行,html由浏览器执行;实际jsp标签就是java代码
<jsp:include> 注意jsp标签前缀是定死的就是jsp  与request.getRequestDispatcher的include方法是一样的
<jsp:forward> 留头不留体, 与request.getRequestDispatcher的forward方法是一样的
<%@include%>与<jsp:include>区别?
前者在服务器编译之后合并成一个.class 需要注意<%@include file="url不能是变量因为没合并之前它不认识"%>;而后者是两个.class;
<jsp:param> 它用来作为forward和include的子标签!用来给转发或者包含传递参数
<jsp:forward page="hao.jsp">
    <jsp:param value="lisi" name="username"/>
    <jsp:param value="123" name="password"/>
</jsp:forward>