1、JSP概述
1.1、什么是jsp?(what)
JSP页面本质上是一个Servlet程序,第一次访问JSP页面时(运行Tomcat服务器后在浏览器地址栏输入路径),Tomcat服务器会将此JSP页面翻译成为一个Java源文件,并对其进行编译成为.class字节码文件。
*所以说jsp在一定意义上是java类。java类的查看方式在(详解2)。
1.2、为什么要使用jsp?(why)
对于我们初学web的小伙伴,在浏览器可以显示页面和内容,那么我们就有一个想法,这个页面不是固定的(是随着后台管理内容的变化而变化的),之前我们了解到html写出的页面是固定死的,是前端程序员一开始就写好的,那么我们要动态的接收后台数据呢,我们就用到了jsp的知识。
重点来了: JSP的主要作用是代替Servlet程序回传HTML页面的数据
1.3、怎么使用jsp?(how)
- web目录(或其他)右击 --> new --> JSP/JSPX --> 输入文件名 --> 选择JSP file创建(idea创建)
- web目录(或其他)右击 -->快捷键(Ctrl+N)–>搜索jsp -->创建(eclipse)
1.4、jsp知识点
说了这么多我们就要总结一下这些知识点了。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--1.声明类属性--%>
<%!
private String name;
private static Map<String, Object> map;
%>
<%--2.声明类方法--%>
<%!
public int sum() {
return 12;
}
%>
<%--3.声明静态代码块--%>
<%!
static {
map = new HashMap<String, Object>();
map.put("key1", "value1");
}
%>
</body>
</html>
我们可以出来,jsp页面里面有html的代码和java代码,所以我们可以理解为是html页面的加强版。
- 页面的第一行,是头部之类,写出这个指令,才说明这个文件是jsp文件。page中有很多的属性,我们在下面的(详解一)体现。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- 在jsp中的脚本
声明脚本:
格式:<%! 声明Java代码 %>
作用:可以给JSP翻译出来的Java类定义属性、方法、静态代码块、内部类等
特点:不会在浏览器的页面上显示出来,仅存在于翻译后的Java类中
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--1.声明类属性--%>
<%!
private String name;
private static Map<String, Object> map;
%>
<%--2.声明类方法--%>
<%!
public int sum() {
return 12;
}
%>
<%--3.声明静态代码块--%>
<%!
static {
map = new HashMap<String, Object>();
map.put("key1", "value1");
}
%>
</body>
</html>
表达式脚本:
格式:<%=表达式 %>
作用:在浏览器的JSP页面上输出数据(只有此脚本可以在浏览器的页面上输出数据)
特点:
(1) 所有的表达式脚本都会被翻译到对应的Java类的_jspService()方法中,故表达式脚本可以 直接使用_jspService()方法参数中的对象
(2) 表达式脚本都会被编译后的Java类中的out.print()方法输出到浏览器页面上
(3) 表达式脚本中的表达式不能以分号结束
<%=22 %> <br/>
<%="可以输出字符串" %> <br/>
<%=map %> <br/>
<%--使用_jspService方法中的对象--%>
<%=request.getParameter("username") %>
代码脚本:
格式:<% Java语句 %>
作用:在JSP页面中可以编写需要的Java代码
特点:
(1) 代码脚本翻译后都在_jspService方法中,故代码脚本可以直接使用此方法参数中的对象
(2) 可以由多个代码脚本块组合完成一个完整的Java语句
(3) 代码脚本还可以和表达式脚本一起组合使用,在JSP页面上输出数据
<%--1.if语句--%>
<%
int i = 1;
if (i == 1) {
System.out.println("我爱祖国!");
} else {
System.out.println("我很爱祖国!");
}
%> <br/>
<%--2.for循环语句--%>
<%
for (int j = 0 ; j < 3; j++) {
System.out.println("第" + j + "次循环");
}
%> <br/>
<%--3.使用_jspService方法参数中的对象--%>
<%
String username = request.getParameter("username");
System.out.println("username对应的值为:" + username);
%>
- 在jsp中的九大内置对象
JSP的内置对象指的是Tomcat服务器将JSP页面翻译为Java类之后内部提供的九大对象:
- request:请求对象
- response:响应对象
- pageContext:JSP的上下文对象
- session:会话对象
- application:ServletContext对象
- config:ServletConfig对象
- out:JSP输出流对象
- page:指向当前JSP的对象
- exception:异常对象
- jsp的四大域对象:
域对象是指可以像Map一样存取数据的对象,四个域对象功能一样,只是对数据的存取范围不同。
注意:若四个域对象在使用时范围都可满足要求,则使用的优先顺序是(范围从小到大):
pageContext --> request --> session --> application
- jsp的out输出:
由于官方的代码中翻译后的Java代码底层都是使用out进行输出,故一般都使用out进行 输出,out又分为write方法和print方法:
(1) out.print():会将任何内容转换成字符串后调用write方法输出
(2) out.write():输出字符串没有问题,但输出int型时会将int转换成char输出,导致输出的并非是想要的数字而是数字对应的ASCII码
结论:JSP页面的代码脚本中任何要输出在浏览器的内容均使用out.print()方法
- jsp标签的引入
我们在书写代码的时候会发现有很多重复的代码:如友情链接、联系我们这一类的,我们会在很多的页面上写出,如果我们想简化一下,怎么办?这样我们就用到了jsp的引入。
<body>
头部信息 <br>
主体信息 <br>
<%@include file="/foot.jsp"%>
</body>
2、JSP代码编写
这里会写出几种jsp小练习?
定义a=1,b=2在jsp页面输出结果。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%! int a = 1;%>
<%! int b = 2;%>
得出的结果为:<%= a+b%>
</body>
</html>
使用for循环输出i like pig十次。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
得出的结果为:<% for (int i=0; i<10; i++){
System.out.println("i like pig");
}
%>
</body>
</html>
3、详解
详解1:
- contentType属性:表示JSP返回的数据类型是什么,即response.setContentType()的参数值
- language属性:表示JSP翻译之后是什么语言文件(目前只支持Java)
- pageEncoding属性:表示当前JSP文件本身的字符集(可在IDEA右下角看到)
- import属性:表示导包(导类),与Java一致
- autoFlush属性:设置当out输出流缓冲区满了之后是否自动刷新缓冲区,默认值是true
- buffer属性:设置out缓冲区的大小,默认是8kb
注意:out缓冲区满了之后不能自动刷新的话会报错- errorPage属性:设置当JSP页面运行出错时自动跳转到的页面(错误信息页面)的路径,这个 路径一般都是以斜杠打头,表示请求的地址是http://ip:port/工程路径/,对应代码web目录
- isErrorPage属性:设置当前JSP页面是否是错误信息页面,默认是false,如果是true可以 获取错误信息
- session属性:设置访问当前JSP页面时是否会创建HttpSession对象,默认值是true
- extends属性:设置JSP页面翻译出来的Java类默认继承谁
详解2:
查看翻译后的Java源文件的方法:启动Tomcat服务器访问到JSP页面之后在控制台输出的信息的前端找到Using CATALINA_BASE中的路径,在硬盘中打开此目录,点击work --> Catalina --> localhost,找到对应的工程文件夹寻找即可。
本篇文档参考一部分csdn文章,最后表示感谢!