)1代码的具体实现可以参考代码中的注释,如果由于注释不清楚而不明白相应原理,可以与作者私聊,欢迎互相交流、进步。
)2文笔有限,如若有对该博客不清楚的地方可以私信作者或者在底下评论,我一定会第一时间回复。
3)码字不易,干货连连,有兴趣的小伙伴点个赞呗,大家相互学习。
目录索引
1 前序知识——在IDEA中创建一个Web应用
2 JSP的定义
JSP的全称是Java Server Pages,表示的是Java的服务器页面。它的主要作用是代替Servlet程序回传HTML页面的数据。这是因为Servlet程序回传HTML页面数据是一件非常繁锁的事情,开发成本和维护成本都极高。
接下来用一个实例来说明用Servlet程序回传HTML页面数据的繁琐性。实例要求:在网页上返回如下文字
1)使用Servlet程序
下面的代码就是我们利用Servlet程序返回要求文字的代码,可以看到,我们写了这么多行代码,仅仅只是为了在网页上显示这么简单的一行话,可想而知,当需要返回的内容较多时,该工作是如何的繁琐。所以,我们有了如下JSP的方式。
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class HelloJSP extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 通过响应的回传流回传html 页面数据
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.write("<!DOCTYPE html>\r\n");
writer.write(" <html lang=\"en\">\r\n");
writer.write(" <head>\r\n");
writer.write(" <meta charset=\"UTF-8\">\r\n");
writer.write(" <title>Title</title>\r\n");
writer.write(" </head>\r\n");
writer.write(" <body>\r\n");
writer.write(" helloJSP, Sharm!\r\n");
writer.write(" </body>\r\n");
writer.write("</html>\r\n");
writer.write("\r\n");
}
}
2)使用JSP技术
下面的代码就是我们利用JSP技术返回要求文字的代码,可以看到,JSP技术在该方面的优越性是远大于Servlet的。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
helloJSP, Sharm!
</body>
</html>
JSP存放的目录和HTML文件一样,也是放在web目录下的,访问也跟访问HTML页面一样。就如,若在web目录下有如下的文件,则对应的访问地址也如下所示:
文件 | 访问地址 |
---|---|
helloJSP.html | http://ip:port/工程路径/helloJSP.html |
helloJSP.jsp | http://ip:port/工程路径/helloJSP.jsp |
3 JSP的本质
JSP页面本质上是一个Servlet 程序。
当我们第一次访问JSP页面的时候。Tomcat 服务器会帮我们把JSP页面翻译成为一个Java源文件,并且把它编译为.class字节码文件。该源文件的存放地址可以从下面的图中可知,也就是部署的文件的位置(红框+红字):
下面的代码为该目录下Java源文件的类名:
从上述文件夹中的Java源文件发现,其中的HttpJspBase类直接地继承了HttpServlet类,也就是说,JSP翻译出来的Java类间接了继承了HttpServlet类。也就是说,JSP翻译出来的是一个Servlet程序。
4 JSP的语法
4.1 JSP头部的page指令
查看本文第二章的JSP代码,如下图所示,其中JSP头部的page指令就在下图中红框的位置:
JSP的page指令可以修改JSP页面中一些重要的属性,或者行为。下面表格中就是用到的属性:
JSP的page指令属性 | 作用 |
---|---|
language | 表示jsp翻译后是什么语言文件,暂时只支持java |
contentType | 表示jsp返回的数据类型是什么,也是源码中response.setContentType()参数值 |
pageEncoding | 表示当前jsp页面文件本身的字符集 |
import | 跟java源代码中一样,用于导包、类 |
isErrorPage | 设置当前jsp页面是否是错误信息页面,默认是false |
session | 设置访问当前jsp页面是否会创建HttpSession 对象,默认是true |
extends | 设置jsp翻译出来的java类默认继承谁 |
errorPage | 设置当jsp页面运行时出错,自动跳转去的错误页面路径 |
autoFlush | 设置当out输出流缓冲区满了之后,是否自动刷新冲级区,默认值是true |
buffer | 设置out 缓冲区的大小,默认是8kb |
4.2 JSP中的常用脚本
该脚本程序的作用就是:在JSP页面中加入Java代码,同时利用Java代码实现功能。
JSP有三种脚本,对应的格式和作用分别为下图所示:
脚本类型 | 格式 | 作用 |
---|---|---|
声明脚本 | <%! %> | 声明jsp页面中的代码 |
表达式脚本 | <%= %> | 在jsp页面上输出数据 |
代码脚本 | <% %> | 在jsp页面中定义自己需要的语句 |
示例一
示例一参考博客
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>