1. Jsp的概述
全名java Server Pages 运行在服务器上的页面。Jsp也是sun公司提供的动态资源技术,具有处理请求与响应的能力。
Jsp特点:
Jsp 换句话说就是html和servlet之间的产物,包含了它们的优点,既可以写html,css,js代码也可以写遍写java代码处理动态内容
1.1. 有关jsp的一些疑问
以前的认知,java代码必须写在.java文件中,为什么现在jsp可以写java代码?
因为:jsp在访问的时候,会被服务器翻译为.java文件,说以jsp可以写java代码。
1.2. Jsp和servlet是什么关系?
查看源代码发现
publicfinal class index_jspextends org.apache.jasper.runtime.HttpJspBase
HttpJspBase类由tomcat实现类
publicabstract class HttpJspBase extends HttpServlet
结论
HttpServlet –>HttpJspBeanàindex_jsp (jsp实际上就是servlet)
Jsp的运行原理
用户访问jsp的时候,服务器都会检查jsp是否被修改过,如果修改过服务器将会重新将jsp翻译为.java文件,并且编译为.class文件;如果服务器检查到没有被修改过,会直接运行.class文件。运行的.class 的servlet最后走servlet的生命周期。
2. Jsp的界面组成
组成部分 | 功能 | 语法 |
HTML | 制作静态内容 |
|
JSP脚本 | Java代码 | 符合Java语法 <% Java代码; %> |
JSP表达式 | 可以直接输出的表达式 | <%=表达式%> 没有分号 |
JSP声明 | 只能声明全局变量和方法 | <%! 声明 %> |
JSP指令 | 页面上的辅助功能 | <%@指令名 属性名=属性值%> |
JSP动作 | 代替部分Java代码的功能 | <jsp:动作名 属性名=属性值/> |
JSP注释 | 用来注释JSP代码 | <%-- 注释内容 --%> |
2.1. JSP中的三种注释:
1) HTML:
<!-- 注释 --> 只能注释静态内容
2) Java:
因为JSP中可以写Java代码,在JSP脚本中可以使用Java注释
// 单行注释
/* 多行注释 */
/** 文档注释 */
3) JSP:
<%-- JSP注释--%>
² 注:如果使用HTML去注释JSP脚本会怎样?
<!-- <%=new Date() %> --> 虽然在HTML上没有显示出来,但Java代码还是执行了。
<!-- Sun Oct 22 09:36:53 CST 2017 -->
建议JSP脚本不要使用HTML注释,而是使用JSP的注释 <%-- <%=new Date() %> --%>
<!--2.三种注释 html代码注释,只能注释html代码 jsp注释(推荐使用),可以注释所有代码,并用户无法查看,安全性高 java注释 --> <!--html注释,通过查看网页源代码是可以看到来的,但是只可以注释html代码,如果注释java代码,java代码会运行的 --> <%--jsp注释,通过网页源代码查看时看不到的,所有代码都可以注释 --%> <!--html, <% out.write("hello wrold"); %>--> <%--jsp, <% out.write("hello wrold"); %>--%> <% //java的单行注释 /*java的多行注释*/ %> |
2.2. JSP表达式
1)语法:<%=表达式%>
2)作用: 用于输出表达式的值,类似于out.print(表达式),翻译成Servlet以后其实就是一句:out.print()
3)格式:前面有等于号,后面没有分号。
2.3. JSP脚本
1)语法:<% Java代码; %>
2)作用:在JSP上直接编写Java代码
3)演示:
a.在脚本中创建一个ArrayList,添加三个名字,使用for循环输出。
b.以有序列表的方式输出,奇偶行颜色不同
4)Servlet中的代码:
ArrayList<String> names = newArrayList<String>();
names.add("潘金莲");
names.add("西门庆");
names.add("武大狼");
names.add("红太狼");
out.write("\r\n");
out.write(" <ol>\r\n");
out.write(" ");
for (int i=0; i<names.size(); i++) {
out.write("\r\n");
out.write("\t \t \t<li>");
out.print(names.get(i));
out.write("</li>\r\n");
out.write("\t \t ");
}
out.write("\r\n");
out.write(" </ol>\r\n");
2.4. JSP声明
1)语法: <%! 声明方法或全局变量 %>
2)作用:声明方法或全局变量
3)演示:
a.在脚本中创建一个字符串,使用表达式输出
b.在声明中也创建一个同名的字符,表达式输出,会不会有问题?
c.在声明中创建一个方法,输出一句话。
4)结论:声明中的变量在类的成员变量中,在service()方法之外,而JSP脚本中所有的代码都出现在service()方法内部。在脚本中声明的变量是一个方法中局部变量,而声明中的变量是全局变量。
2.5. 的三大指令
2.6. 什么是JSP指令:用于在JSP页面上实现一些辅助的功能,并不会在JSP上生成Java代码。
1)三大指令分别是:page、include、taglib
2).指令的格式:
<%@page language="java" import="java.util.*"pageEncoding="UTF-8"%>
<%@指令名 属性名=属性值 %>
2.6.1. JSP的page指令
2.6.2. page指令概述
1. 作用:用于告诉tomcat如何将一个JSP页面翻译成Servlet,指定翻译时的一些参数。
2. 位置:page指令可以放在网页的任意的地方,根据开发习惯,建议放在网页的最前面。
2.6.3. 导包的属性:
l language="java" :将JSP翻译成的语言,JSP使用的脚本语言,目前只能使用Java,而且默认就是Java
l import="java.util.*":用于在JSP页面上导入外部的包
1) 方式一:一个page指令的一个import属性导入一个包
<%@page import="java.util.ArrayList"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.sql.Timestamp"%>
2) 方式二:在一个import中导入所有的包,包之间使用逗号分隔
import="java.sql.*,java.text.*,java.util.*"
2.6.4. 与编码相关的属性
l contentType="text/html; charset=utf-8"
默认是ISO8859-1编码,指定响应的MIME类型和字符集。相当于这句话:
response.setContentType("text/html;charset=utf-8");
l pageEncoding="utf-8" 指定页面编码,有三个作用:
1) 与contentType="text/html;charset=utf-8"属性的功能相同
2) 用于设置当前JSP页面文本保存的字符集
3) 用于指定JSP翻译成Servlet的编码
2.6.5. 与错误相关的属性
errorPage="error.jsp"指定错误页面,如果当前的页面出错,跳转到另一个error.jsp页面
l isErrorPage="false" 用于指定当前页面是否是错误页面,如果当前页面是错误页面,它可以使用内置对象execption,非错误页面不能使用execption对象。有了exception对象就可以在控制台打印错误信息让系统维护人员及时发现与修正错误。
演示:在JSP页面上写出错误代码,运行出现异常,我们写一个页面指定为错误页面。
在发生错误的页面,指定要跳转的友好错误页面:<%@ page errorPage="error.jsp"%>
在友好错误页面配置:<%@ page isErrorPage="true"%>
errorPage="error.jsp"这个属性需要忘记
在企业真实开发中不可能为每个jsp页面指定友好错误页面,太麻烦了,所以企业中会在web.xml中配置全局错误友好页面的跳转,当发生项目内发生某类异常统一指定跳转到错误友好页面。
web.xml中配置全局错误信息的友好页面跳转方式:
<!-- 指定错误页面 -->
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
<!-- 不同的错误码可以跳转到不同的页面 -->
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
<!-- 指定错误类型 -->
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error/404.jsp</location>
</error-page>