基本概念
JSP也是一种做出动态响应的技术
- JSP是Java Server Pages的简称,跟Servlet一样可以动态生成HTML响应, JSP文件命名为xxx.jsp。
- 与Servlet不同,JSP文件以HTML标记为主,然后内嵌Java代码段,用于处理动态内容
- JSP主要是用来弥补servlet不便于发送大量信息的不足
JSP实例
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello Time</title>
</head>
<body>
现在的时间是:<%= new Date()%>
</body>
</html>
import就是导包
contentType就是解决Post乱码时的set设置
language就是语言
JSP与Servlet的关系
JSP的语法
结构
声明区
程序代码区
表达式
注释
指令和动作
内置对象
声明区
用于定义全局变量、方法、类的相关信息
- 基本语法
<%! %>
程序代码区
以定义局部变量以及放入任何的Java程序代码
- 基本语法
<%程序代码区%>
表达式
可以输出一个变量或一个具体内容,但=后面必须是字符串变量或者可以被转换成字符串的
表达式
- 基本语法
<%=… …%>
=在这里是输出的意思
如
<%=“hello world”%>
<%=i+1%>
简单用一下
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试变量的声明和打印</title>
<%!
int ia;//这是一个全局变量
public void show(){
System.out.println("这是一个全局方法!");
}
public class MyClass{
{
System.out.println("这是一个全局类!");
}
}
%>
<%
int ib = 20;//这是一个局部变量
for(int i=0;i<3;i++){
System.out.println("随便放入java程序代码");
}
%>
</head>
<body>
<%= ia+1%> <%-- 1 --%>
<%= ib+1%> <%-- 20 --%>
<%= "写入字符串"%>
</body>
</html>
结果
原理就是我们写的JSP,然后Tomcat服务器会帮我们写好相应的Servelet内容
小练习
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现表格的绘制</title>
</head>
<body>
<table>
<tr>
<td>id</td>
<td>name</td>
<td>age</td>
<td>salary</td>
</tr>
<%
for (int i = 1; i < 6; i++) {
%>
<tr>
<td><%=i%></td>
<td><%=i%></td>
<td><%=i%></td>
<td><%=i%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
注释
格式:
<!--… …--> HTML文件常用的注释,浏览器可以查看到
<%--… …--%> JSP文件的注释,浏览器看不到
<%//… …%> Java语言中的单行注释,浏览器看不到
<%/*… …*/%> Java语言中的多行注释,浏览器看不到
注释的内容不会被执行
指令和动作
- 指令格式:<%@指令 属性=“属性值”%>
- 指令的属性可以设定多个。
- JSP常用指令有:page页面、taglib标签库、include包含
page指令
page指令用于导包和设置一些页面属性,常用属性如下:
- import 导入相应的包,惟一允许在同一文档中多次出现的属性
- contentType 设置Content-Type响应报头,标明即将发送到浏览器的文档类型 设置的是发送给浏览器的内容的编码
- pageEncoding 设置页面的编码 当前页面的编码
- language 指定页面使用的语言 基本都是Java
- session 控制页面是否参与HTTP会话 设置是否区创建http session对象
- errorPage 处理当前页面中抛出但未被捕获的任何异常 处理异常
- isErrorPage 当前页是否可以作为其他页面的错误处理页面 是都是异常页面
简单用一下
<%@ page import="java.util.LinkedList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>page指令的使用</title>
</head>
<body>
<%
List<String> list = new LinkedList<>();
%>
</body>
</html>
- <%@ page contentType=“text/html;charset=UTF-8” language=“java” %>设置了发送给浏览器的内容的类型是一个html文件,编码方式是UTF-8
- import就是导包
taglib指令
<!-- prefix属性用于指定库前缀 --> <!-- uri属性用于指定库的标识 -->
- <%@taglib uri=“tagLibary” prefix=“prefix”%>
include指令
- include指令用于引入另一个JSP程序或HTML文件等,格式如下
<%@include file=“被包含的文件地址%>
- JSP引擎会在JSP文件的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工
作
include引入head文件,结果如下
这就是静态包含
jsp:include/jsp:param
- jsp:include动作用于引入另一个JSP程序或HTML文件等。
- 执行到include时,被include的文件才会被编译。
- 如果include的是jsp文件,那它不会被转换成Servlet文件
include文件修改如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:include page="head.jsp"></jsp:include>
<html>
<head>
<title>文件引入的使用</title>
</head>
<body>
</body>
</html>
刷新很多次都可以
include指令和include动作的区别
- include指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入再编译执行(静态包
含)。 - include动作在转换时期是不会被编译的,只有在客户端请求时期被执行到才会被动态的编译载入
(动态包含,推荐)也就是第二种方式jsp:include
。 - include其实就是把其他文件引入到当前文件中
jsp:forward/jsp:param
- forward动作用于在JSP中实现转发,将请求转发到另一个指定的JSP程序或者Servlet中处理
目标文件target.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>转发的目标文件</title>
</head>
<body>
<h1>服务器转发后到这里</h1>
<%= "获取到的数值为"+request.getParameter("name")%>
</body>
</html>
JSP内置对象
本身就写好的对象
写JSP代码时可以不需要定义
基本概念
- 在JSP程序中有9个内置对象由容器为用户进行实例化,程序员可以不用定义就直接使用这些变量。
- 在JSP转换成Servlet后,会自动追加这些变量的定义,使用内置对象可以简化JSP的开发
对象名称
out内置对象
out内置对象是一个缓冲的输出流,用来给客户端输出信息
相关方法
request内置对象
- request对象封装的是调用JSP页面的请求信息,它是HttpServletRequest接口的一个实例。
- 该对象的属性值只在一个请求中保存
常用方法如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>request内置对象的使用</title>
</head>
<body>
<%
String servletName = request.getServerName();
System.out.println("获取到的服务器名称为"+servletName);
int servletPort = request.getServerPort();
System.out.println("获取到的服务器端口号为:"+servletPort);
%>
</body>
</html>
response内置对象
- response对象用于给客户端相应输出处理结果,它是HttpServletResponse接口的一个实例
- 经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码
URL
常用方法如下
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>reponse内置对象的使用</title>
</head>
<body>
<%
//每隔一秒刷新一次
response.addHeader("refresh","1");
//获取当前系统时间
Date d1 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(d1);
%>
<%= "当前时间为;"+ format%>
</body>
</html>
起到一秒刷新一次的效果