JSP有三大指令:
page include taglib 用法:<%@+指令%>
1.page指令:
一般放在jsp文件最上面,设置页面的一系列属性和导入包
<%@ page import="要导入的包” pageEncoding="当前页面编码" contentType="text/html,charset=xxx"%>
<%@ page errorPage="发生异常的时候跳转的指定页面" isErrorPage="当为true是表示为错误页面,才可以使用exception对象"%>
一个页面里面page指令可以出现多个,然后注意:如果pageEncoding没有指定,那么默认为contentType的值,如果pageEncoding和conTentType都没有指定,那么默认值为iso-8859-1,如果没有指定contentType属性,那么默认为pageEncoding的值,如果contentType和pageEncoding都没有指定,那么默认值为iso-8859-1
然后我对这个pageEncoding属性和contentType有点不清楚,这是搜到的结果:
pageEncoding是jsp文件本身的编码
contentType的charset是指服务器发送给客户端时的内容编码
JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。
第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。
第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。
JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。
第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效
看完以后也就是说pageEncoding是用于服务器编译jsp文件用的编码,contentType是显示在客户端解码时用的编码,一般pageEncoding是不用写的,contentType编译器像idea和eclipse也会帮我们开文件的时候写好不用操心
2.include指令
<% @include file="页面" %>
这个效果相当于把该页面的代码copy过来,也就是插入该位置,统一编译
3.taglib指令
还没用过的指令,也是不常用的指令,看博客上说是用来导入第三方标签库的
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:指定标签前缀,这个东西可以随意起名
uri:指定第三方标签库的uri(唯一标识)
当然,需要先把第三方标签库所需jar包放到类路径中。
然后说一下idea的使用:
一开始写jsp的时候用到jsp内置对象像out,request,response等对象的时候没有智能提示很难受,后来就搜了博客学习了一种叫全球化依赖的设置,也就是将项目里面所有的文件都可以加入特定的智能提示,讲一下设置,也很简单:
我们在写jsp文件的时候没有提示,主要是servlet-api.jar和jsp-api.jar这两个包没有设置,我们来到左上角的file里找到project structure,来到global Libraries点第一个小绿色加号,来到tomcat文件下的lib包找到那两哥们加进去,然后右边框框看看有没有加进去,没加进去就再用加号一样加进去就可以发现有智能提示了
jsp动作元素:
<jsp:include page="xxx"/>
这个和上面的include指令不同,这个相当于解析了page的内容以后返回结果到当前页面
这也是一个面试常考点,下面是慕课网的一张图:
<jsp:forward page="xxx"/>表示页面转发到page指定的页面去
<jsp:param>该动作常作为上面的forward标签和include的子标签,用来给其他页面传递参数
比如:
<jsp:include page="a.jsp">
<jsp:param name"username" value="hhh"/>
</jsp:include>
这样a.jsp页面就会收到一个新的参数名为username值为hhh