1 JSP基础
1.1 JSP简介
JSP全称是Java Server Page,它和Servlet一样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范。JSP的本质其实就是一个Servlet。
1.2 JSP和HTML以及Servlet的适用场景
1.3 JSP简单入门
创建JavaWeb工程
在index.jsp中填写内容
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>JSP的入门</title> </head> <body> 这是第一个JSP页面 </body> </html>
部署项目
沿用会话管理工程的部署方式即可。
测试运行
1.4 JSP说明
写在之前: 明确JSP就是一个Servlet。是一个特殊的Servlet。
JSP的原理:
客户端提交请求
——Tomcat服务器解析请求地址
——找到JSP页面
——Tomcat将JSP页面翻译成Servlet的java文件
——将翻译好的.java文件编译成.class文件
——返回到客户浏览器上。
1)执行过程分析图
2)JSP的.java文件内容分析(看不懂跳过,反jsp本质就是servlet)
当我们打开index.jsp翻译的java文件看到的就是public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase类的声明,然后我们在Tomcat的源码中找到类的声明,如下图:
这张图一出场,就表明我们写的JSP它本质就是一个HttpServlet了。
同时,我们在index_jsp.java文件中找到了输出页面的代码,并且在浏览器端查看源文件,看到的内容是一样的。这也就是说明,我们的浏览器上的内容,在通过jsp展示时,本质都是用out.write()输出出来的。
讲到这里,我们应该清楚的认识到,JSP它是一个特殊的Servlet,主要是用于展示动态数据。它展示的方式是用流把数据输出出来,而我们在使用JSP时,涉及HTML的部分,都与HTML的用法一致,这部分称为jsp中的模板元素,在开发过程中,先写好这些模板元素,因为它们决定了页面的外观。
2 JSP应用
2.1 JSP语法
1)Java代码块
在jsp中,可以使用java脚本代码。形式为:<% 此处写java代码 %>
但是,在实际开发中,极少使用此种形式编写java代码。同时需要注意的是:
<% 在里面写java程序脚本需要注意:这里面的内容由tomcat负责翻译,翻译之后是service方法的成员变量 %>
示例:
<!--Java代码块--> <% out.println("这是Java代码块");%> <hr/>
2)JSP表达式
在jsp中,可以使用特定表达式语法,形式为:<%=表达式%>
jsp在翻译完后是out.print(表达式内容);
所以:<%out.print("当前时间);%>和<%="当前时间"%>是一样的。
在实际开发中,这种表达式语法用的也很少使用。
示例:
<!--JSP表达式--> <%="这是JSP表达式"%><br/> 就相当于<br/> <%out.println("这是没有JSP表达式输出的");%>
3)JSP声明
在JSP中也可以声明一些变量,方法,静态方法,形式为:<%! 声明的内容 %>
使用JSP声明需要注意:
<%! 需要注意的是: 写在里面的内容将会被tomcat翻译成全局的属性或者类方法。 %>
示例:
<!--JSP声明--> <%! String str = "声明语法格式";%> <%=str%>
4)JSP注释
在使用JSP时,它有自己的注释,形式为:<%–注释–%>
需要注意的是:
在Jsp中可以使用html的注释,但是只能注释html元素,不能注释java程序片段和表达式。同时,被html注释部分会参与翻译,并且会在浏览器上显示
jsp的注释不仅可以注释java程序片段,也可以注释html元素,并且被jsp注释的部分不会参与翻译成.java文件,也不会在浏览器上显示。
示例:
<%--JSP注释--%> <!--HTML注释-->
5)语法的示例
JSP语法完整示例代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>JSP语法</title> </head> <body> <!--Java代码块--> <% out.println("这是Java代码块");%> <hr/> <!--JSP表达式--> <%="这是JSP表达式"%><br/> 就相当于<br/> <%out.println("这是没有JSP表达式输出的");%> <hr/> <!--JSP声明--> <%! String str = "声明语法格式";%> <%=str%> <hr/> <%--JSP注释--%> <!--HTML注释--> </body> </html>
JSP语法运行结果
2.2 JSP指令
1)page指令
- language: 告知引擎,脚本使用的是java,默认是java,支持java。不写也行。
- extends:告知引擎,JSP对应的Servlet的父类是哪个,不需要写,也不需要改。
- import:告知引擎,导入哪些包(类)。
注意:
引擎会自动导入:java.lang.*,javax.servlet.*,javax.servlet.http.*,javax.servlet.jsp.*
导入的形式: (用Eclipse:Alt+/ 自动导入)
<%@page import=”java.util.Date,java.util.UUID”%> 或者: <%@page import=”java.util.Date”%> <%@page import=”java.util.UUID”%>
- session:告知引擎是否产生HttpSession对象,即是否在代码中调用
- request.getSession()。默认是true。
- buffer:JspWriter用于输出JSP内容到页面上。告知引擎,设定他的缓存大小。默认8kb。
- errorPage:告知引擎,当前页面出现异常后,应该转发到哪个页面上(路径写法:/代表当前应用)
小贴士:当在errorpage上使用了isErrorPage=true之后,ie8有时候不能正常显示
配置全局错误页面:web.xml
<error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/404.html</location> </error-page>
当使用了全局错误页面,就无须再写errorPage来实现转到错误页面,而是由服务器负责跳转到错误页面。
- isErrorPage:告知引擎,是否抓住异常。如果该属性为true,页面中就可以使用exception对象,打印异常的详细信息。默认值是false。
- contentType:告知引擎,响应正文的MIME类型。contentType="text/html;charset=UTF-8"
相当于response.setContentType("text/html;charset=UTF-8");
- pageEncoding:告知引擎,翻译jsp时(从磁盘上读取jsp文件)所用的码表。pageEncoding="UTF-8"相当于告知引擎用UTF-8读取JSP
- isELIgnored:告知引擎,是否忽略EL表达式,默认值是false,不忽略。






