一、JSP介绍
我们学习了servlet来后,就可以接收客户端的请求,并使用响应对象给浏览器返回结果。但是,使用response返回结果是件 “很可怕的事” 。例如:就为了返回一个网页,我们需要进行复杂的拼接,很明显这不是明智之举。所以,我们需要jsp来完成。
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.println("");
writer.println("");
writer.println("
");writer.println("
writer.println("");
writer.println("");
writer.println("
");writer.println("
测试使用response对象响应网页
");writer.println("");
writer.println("");
writer.close();
JSP(全称JavaServer Pages)是由Sun公司主导创建的一种动态网页技术标准。
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容,从而实现数据的动态显示。
JSP文件后缀名为 *.jsp
二、第一个JSP
尝试动态的返回当前时间给客户端
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
当前系统时间为:
<%= new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date()) %>
解释: 1.<%@ page ... ... %> 称为JSP的page指令,可用于定义JSP页面的各种属性。 2.<%= java代码 %> 称为jsp表达式,用于将已经声明的变量或者表达式结果输出到网页上面。
三、如何在JSP中编写java代码
在体验了JSP的helloworld后,咱们来具体说说在jsp编写java有哪些方式?
3.1 JSP注释
<%-- 注释内容 --%>
3.2 JSP声明
一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。
JSP声明的语法格式:
<%! 声明变量或方法 %>
案例:
<%! int i = 0; %>
<%! int a, b, c; %>
3.3 JSP脚本
JSP脚本可以包含Java代码片段。语法如下:
<% Java代码片段 %>
案例1:使用声明好的变量,并打印到页面上。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%!
int a = 1;
String str = "hello";
%>
<%
a++;
int length = str.length();
out.println("a:"+a+",length:"+length); //将a和length 输出到页面
%>
案例2:使用分支语句
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%! int day = 3; %>
<%
if (day == 6 | day == 7) {
%>
今天是周末
<%
} else {
%>
今天需要工作
<% } %>
可以发现,这样的代码可读性就不好了,不便于后期的维护和扩展。咱们后续会给出解决方案。
3.4 JSP表达式
jsp表达式,用于将已经声明的变量或者表达式结果输出到网页上面。语法如下:
<%= java代码 %> 等价于 JSP脚本中编写的:out.println( 内容 );
四、JSP指令
4.1 指令语法
JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。
语法格式如下:
<%@ 指令名 属性名1="属性值" 属性名2="属性值" ... %>
4.2 page指令
page指令一般书写在jsp页面的第一行,用于定义jsp页面的相关属性。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
属性解释:
1. language:定义JSP页面所用的脚本语言,默认是Java
2. contentType:指定当前JSP页面的MIME类型和字符编码
3. pageEncoding:设置页面编码
4. import:导入要使用的Java类
5. errorPage:指定当JSP页面发生异常时需要转向的错误处理页面
6. isErrorPage:指定当前页面是否可以作为另一个JSP页面的错误处理页面
7. 等等
4.3 include指令
JSP可以通过include指令来包含其他JSP文件,包含的文件就好像是该JSP文件的一部分,会被同时编译执行。 在很多网页中头尾两部分基本都是不变的,所以没必要在每个页面中单独写一遍,只需要编写1份,在需要的页面中使用include指令引入即可。 include指令的语法格式如下:
<%@ include file="jsp路径" %>
4.4 taglib指令
用于引入标签库,在JSTL章节具体讲解。
<%@ taglib uri="标签库的uri路径" prefix="自定义前缀" %>
五、JSP的九大内置对象和四大作用域
5.1 九大内置(隐式)对象
JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。 1.request对象 request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。 request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。
2.response对象 response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。 response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。
3.out对象 out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。
4.session对象 session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。session对象用来跟踪在各个客户端请求间的会话。
5.application对象 application对象直接包装了servlet的Servle