JSP全称为Java Server Pages,其根本是一个简化的Servlet设计,它实现了在Java当中使用HTML标签。JSP是一种动态网页技术标准也是JAVAEE的标准。JSP与Servlet一样,是在服务端执行的。
page指令:通常位于JSP页面的顶端,同一个页面可以有多个page指令。
include指令:将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。
taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用定制行为。
Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
<%@ page attribute="value" %>
属性 | 描述 | 默认值 |
---|---|---|
language | 指定JSP页面使用脚本语言 | java |
import | 通过该属性来引用脚本语言中使用到的类文件 | 无 |
contentType | 用来指定JSP页面所采用的编码方式 | text/html,ISO-8859-1 |
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。
<%@ include file="文件相对 url 地址" %>
JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
<%@ taglib uri="uri" prefix="prefixOfTag" %>
HTML的注释:
<!-- HTML注释 --> //HTML注释,通过浏览器查看网页源代码时可以看见注释内容
JSP的注释:
<%-- 注释 --%> //JSP注释,注释内容不会被发送至浏览器甚至不会被编译
JSP脚本注释:
//单行注释
/* */多行注释
脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。
<% out.println("Your IP address is " + request.getRemoteAddr()); %>
一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。
<%= 表达式 %>
JSP内置对象是web容器创建的一组对象,不使用new就可以使用的·内置对象。
out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。
JspWriter类包含了大部分java.io.PrintWriter类中的方法。
request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。
request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。
常用方法:String getParameter(String name)
response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。
response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。
常用方法:sendRedirect(java.lang.String location) 重新定向客户端请求
get和post的区别
<form action="执行动作页面" method="提交方法"> </form>
表单有两种提交方式:get和post
请求转发与请求重定向
请求重定向:客户端行为,response.sendRedirect(),从本质讲等同于两次请求,前一次请求对象不会保存,地址栏的URL地址不会改变。
请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp),是一次请求,转发后请求对象会保存,地址栏URL地址不会改变。
什么是session
在服务器内存中保存着不同用户的session。
session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。session对象用来跟踪在各个客户端请求间的会话。
常用方法:
session的生命周期(可以作为预习的一个小任务)
application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。
config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。
pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。
这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。
page 对象就是this对象的同义词。
exception 对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。
Javabeans就是符合某种特定的规范的java类。使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性。
Javabean示例
package com.bluemsun;
public class Student {
private String studentName;
private Integer age;
private String gender;
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
jsp:include动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。
<jsp:include page="相对 URL 地址"/>
include指令和动作的区别
include指令 | jsp:include动作 | |
---|---|---|
语法格式 | <%@ include file=" "%> | |
发生作用的时间 | 页面转换期间 | 请求期间 |
包含的内容 | 文件的实际内容 | 页面的输出 |
转换成的Servlet | 主页面和包含页面转换成一个Servlet | 主页面和包含页面转换成独立的Servlet |
编译时间 | 较慢 | 较快 |
执行时间 | 稍快 | 较慢 |
jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean。这个功能非常有用,因为它使得我们可以发挥 Java 组件复用的优势。
<jsp:useBean id="name" class="package.class" />
jsp:setProperty用来设置已经实例化的Bean对象的属性
<jsp:setProperty name="myName" property="someProperty" value="someValue" param="someParam"/>
jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。
<jsp:getProperty name="myName" property="someProperty" .../>
jsp:forward动作把请求转到另外的页面。jsp:forward标记只有一个属性page。
<jsp:forward page="相对 URL 地址" />