JSP初步
文章目录
一、JSP简介
JSP,即Java Server Pages,Java 服务器端页面,一个特殊页面,其中既可以指定定义html标签,又可以定义Java代码.其根本是一个简化的Servlet设计。
JSP的页面元素由指令、表达式、小脚本、声明、注释、静态内容六部分构成。
二、JSP指令
page指令
page指令通常位于jsp页面的顶端,同一个页面可以有多个page指令。
page指令的语法为:
<%@ page 属性1="属性值" 属性2="属性值1, 属性值2..." 属性n="属性n" %>
page中的常用属性分别为:
属性 | 描述 |
---|---|
language | 用于指定JSP页面使用的脚本语言,默认为Java |
import | 用于引用脚本语言中使用到的类文件 |
contentType | 用于指定JSP页面所使用的编码方式 |
pageEncoding | 用于指定JSP页面所使用的字符集 |
errorPage | 用于设置当JSP页面运行出现异常时自动跳转到的页面的路径 |
isErrorPage | 用于设置当前JSP页面是否是错误信息页面,默认值为false |
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.io.*" %>
这是一个常见的page指令,使用Java语言,text/html;charset=UTF-8编码方式并导入了java.io类
include指令与taglib指令
此外,JSP中还有include指令与taglib指令,其中include指令用于将一个外部文件嵌入到当前jsp文件中,同时解析这个页面中的jsp语句;
taglib指令则用于使用标签库定义新的自定义标签,在jsp页面中启用定制行为。
2、JSP注释
HTML注释:
<!--html注释-->:客户端可见,即可以通过查看页面源代码操作看到
JSP注释:
<%--jsp注释--%>:客户端不可见
jsp脚本注释:
一般即为Java注释
<%
// 单行注释
/*
多行注释
*/
%>
3、JSP常用脚本
JSP声明
用于在jsp页面中定义变量或方法。
<%!
Java代码
%>
JSP表达式
在jsp页面中执行的表达式
<%= 表达式 %> // 需注意表达式不以分号结束
JSP代码
用于在jsp页面中编写Java代码
<%
Java语句
%>
下面是一段简单的代码演示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>My Test</title>
</head>
<body>
<%!
public class Student {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
%>
<%
Student student = new Student();
student.setName("Tom");
%>
学生的姓名为:<%=student.getName()%><br>
</body>
</html>
启动Tomcat服务器后浏览器的运行结果为:
4、JSP内置对象
JSP的内置对象指的是Tomcat服务器将JSP页面翻译为Java类之后内部提供的九大对象:
- out
- request
- response
- session
- application
- page / pageContext / exception / config
下面将介绍几个常用对象。
out对象
out对象是JspWriter类的实例,是向客户端输出内容的常用对象。
out对象的常用方法:
void println();向客户端打印字符串
void clear();清除缓冲区内容,若在flush之后调用会抛出异常
void clearBuffer();清除缓冲区内容
void flush();将缓冲区的内容输出到客户端
int getBufferSize();返回缓冲区的大小,单位为字节,若不设缓冲区则为0
int getRemaining();返回缓冲区剩余多少可用
void close();关闭输出流
request对象
request对象是HttpServletRequest类的实例,通过它可以了解到客户端的请求信息,然后做出相应。
request对象的常用方法:
String getParameter(String name);返回name指定参数的参数值
String[] getParameterValues(String name);
返回包含参数name的所有值的数组
void setAttribute(String , Object);存储此请求中的属性
object getAttribute(String name);返回指定属性的属性值
String getprotocol();返回请求用的协议类型及版本号
String getServerName();返回接受请求的服务器主机名
void setCharacterEncoding();设置请求的字符编码方式
String getCharacterEncoding();返回字符编码方式
String request.getContextPath();返回上下文路径
response对象
response对象是HttpServletResponse类的实例,response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对该页面无效。
request对象的常用方法:
String getCharacterEncoding();返回响应用的字符编码方式
PrintWriter getWriter();返回可以向客户端输出字符的一个对象
sendRedirect(java.lang.String location);重新定向客户端的请求
getRequestDispatcher().forward(req, resp);重新转发客户端请求
response.getWriter 输出与out输出的区别:
图片引用自:JSP的基本使用总结
请求重定向与请求转发的区别:
请求重定向是客户端行为,从本质上讲等于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。
请求转发是服务器行为,是一次请求,对象会保存,地址栏的URL地址不会改变。
session对象
session对象是HttpSession类的实例,它在第一个JSP页面被装载时自动创建,完成会话期管理。
session对象的常用方法:
long getCreationTime();返回session产生的时间
long getMaxInactiveInterval();返回session不活动的最长时间,若超过这时
间session将会失效
void invalidate();取消session对象,其存放的内容将被抛弃
void setMaxInactiveInterval(int interval);
设定session不活动的最长时间,若超过该时间,session将会失效
application对象
application对象是ServletContext 类的实例。实现了用户间数据的共享,可用于存放全局变量。它开始于服务器启动,终止于服务器关闭。
session对象的常用方法:
void setAttribute(String , Object);存储此请求中的属性
object getAttribute(String name);返回指定属性的属性值
Enumeration getAttributeNames();返回所有可用属性名的枚举
String getSeverInfo();返回JSP(Servlet)引擎名及版本号
其他对象
page 对象是java.lang.Object类的实例,指向当前JSP页面本身,类似于类中的this指针。
pageContext 对象为JSP的上下文对象。
exception 对象是java.lang.Throwable的实例,是一个异常对象。当一个页面产生异常时就会产生该对象,若要应用此对象需将isErrorPage设为true。
config 对象里存放着一些Servlet 初始的数据结构。
5、JSP动作
JSP有6个基本动作,分别为:include、usebean、forward、setProperty、getProperty、plugin
include:在页面被请求时引入一个文件。
- include指令:
<@% include file="URL"%>
在一个页面中包含另一个页面
简单测试:
// 先创建一个hw.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
out.println("Hello World!");
%>
</body>
</html>
// 将hw.jsp文件包含入test.jsp中
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>My Test</title>
</head>
<body>
文件hw.jsp中的内容为:
<%@ include file="hw.jsp" %>
</body>
</html>
运行后结果:
- include动作:
<jsp:include page="URL" flush="true|false"/>
page 表示要被包含的页面
flush 表示被包含的页面是否从缓冲区读取
include指令与include动作的区别:
图片引用自:include指令与include动作的区别
Javabeans就是符合某种特定规范的Java类。使用Javabeans可以解决代码的重复编写,减少代码冗余,明确功能区分,提高了代码的维护性。
usebean:在JSP页面中实例化或在特定范围内使用Javabean
<jsp:useBean id="标识符" class="java类名" scope="作用范围" />
如果找不到class中的类,则将创建一个对象
scope的范围即:page、request、session、application,默认值为page
setProperty:给已实例化的javabean对象设置属性
<jsp:setProperty name="beanName" property="javaBean属性名" value="beanValue">
getProperty:获取指定的javabean对象的属性值
<jsp:getProperty name="javaBean实例名" Property="属性名" />
简单的代码演示:
先创建一个Students类
package com.example.jsptest;
public class Students {
private String name;
private int age;
public Students() {
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
再调用上述方法:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>My Test</title>
</head>
<body>
<jsp:useBean id="myTest" class="com.example.jsptest.Students"/>
<jsp:setProperty name="myTest" property="name" value="Tom"/>
<jsp:setProperty name="myTest" property="age" value="18"/>
Student's name is
<jsp:getProperty name="myTest" property="name"/>
</br>
Student's age is
<jsp:getProperty name="myTest" property="age"/>
</body>
</html>
运行结果为:
forward:把请求转到一个新的页面
<jsp:forward page="URL" />
forward跳转为服务器端跳转,地址栏的URL地址不变。等同于getRequestDispatcher().forward(req, resp) 方法。