jsp是servlet的扩展,Web应用中其页面是由servlet容器生成对应的Servlet.
1 指令
三编译:page、include、taglib
七动作:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getProperty
<%@ include%>和<jsp:include>区别:
include :页面请求之前预编译,所有代码包含进来之后,一起进行处理,把所有代码合在一起,编译成一个servlet
jsp:include :所有代码分别处理,在页面被请求的时候才编译,被编译成多个servlet,页面语法相对独立,处理完成之后再将代码的显示结果(处理结果)组合进来。
jsp:forward :指令增加的参数可以在转发的新页面(静态HTML,动态JSP 或 容器的Servlet)访问到。
eg:
<jsp:forward page=“{relativeURL|<%=expression%>}” />
或者:
<jsp:forward page=“{relativeURL|<%=expression%>}”>
{<jsp:param .../>}
</jsp:forward>
2 小脚本
3 表达式: <%=表达式 %>
4 声明: <%! 声明 %>
5 注释: <%-- --%>
九大内置对象
request、out、response、application、session、page、config、pageContext、exception
四大作用域 application session request page
jsp注意问题:
1. 对应String类型的对象使用println()方法时,如果对象为null,将打印null而不是引发NullPointerException,由此引用的问题是容易造成错觉,对于以后对字符串的操作容易引起问题。
2. 引发NullPointerException异常,主要原因是没有对对象的存在性进行验证,在jsp编程中经常出现:if(request.getParameter(“username”).equals(“xxx”))、out.println(session.getAttribute(“record”))等。解决这个问题的方法是在使用前进行判空比较:if(request.getParameter(“username”)!=null){ifif(request.getParameter(“username”).equals(“xxx”))…}。
3. 引发NumberFormatException异常:主要原因是将用户提交的内容转换为整数或者浮点数时用户输入了其它非法字符。处理的主要方式是在需要进行转换的地方使用try/catch块捕获此异常然后提示用户输入合法数据。
4. 引发StringIndexOutOfBoundsException异常:主要原因是使用String的substring()、charAt()等方法,而字符串的长度不够,就会引发此异常;在字符串为null时也会引发NullPointerException。解决的方法是判空,判断长度或者转换为字节数组。考虑到这些操作很多,可以将之封装到javabean中。
5. 引发NoClassDefFoundError错误,主要原因是类路径或者类文件放置错误,类文件的放置要符合服务器的要求。
6. 引发java.lang.Error错误,主要原因是对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,最终可能导致系统无法正常运行;对系统所访问的外部资源关闭次数太多,外部系统无法正常处理;所系统访问的外部资源出现异常情况。解决的方法是:访问外部资源前,首先检查该资源(如数据库)是否可正常连接或操作;访问外部资源时,如果进行了连接,一定进行关闭操作,并仅进行一次关闭操作;尽量在同一操作中共享外部资源,以减少该操作对资源的消费,提高程序的执行效率。