学习笔记输出来源:拉勾教育Java就业急训营
修改时间:2021年1月31日
作者:pp_x
邮箱:[email protected]
JSP核心技术
JSP概念
- JSP是Java Server Pages的简称,跟Servlet一样可以动态生成HTML响应, JSP文件命名为
xxx.jsp
。
- 与Servlet不同,JSP文件以HTML标记为主,然后内嵌Java代码段,用于处理动态内容。
JSP和Servlet的联系与区别

JSP的语法
JSP语法结构
- 声明区
- 程序代码区
- 表达式
- 注释
- 指令和动作
- 内置对象
声明区
- 基本语法:
<%! %>
- 可以定义全局变量、方法、类`
<%!
int i;
public void setName(){
… …}
%>
表达式
- 基本语法:
<%=… …%>
- 可以输出一个变量或一个具体内容,但=后面必须是字符串变量或者可以被转换成字符串的表达式。
<%=“hello world”%>
<%=i+1%>
程序代码区
- 基本语法:
<%程序代码区%>
- 可以定义局部变量以及放入任何的Java程序代码
<%
int j;
for (int k=0; k<10; k++) {
… …
}
%>
指令和动作
- 指令格式:
<%@指令 属性=“属性值”%>
- page指令
- import :导入相应的包,惟一允许在同一文档中多次出现的属性
- contentType: 设置Content-Type响应报头,标明即将发送到浏览器的文档类型
- pageEncoding: 设置页面的编码
- language :指定页面使用的语言
- session :控制页面是否参与HTTP会话
- errorPage :处理当前页面中抛出但未被捕获的任何异常
- isErrorPage :当前页是否可以作为其
<%@ page contentType="text/html;charset=utf-8" language="java" %>
- taglib指令
- taglib指令用来扩展JSP程序的标签元素,引入其他功能的标签库文件
<!-- prefix属性用于指定库前缀 -->
<!-- uri属性用于指定库的标识 -->
<%@taglib uri=“tagLibary” prefix=“prefix”%>
- include指令
- include指令用于引入另一个JSP程序或HTML文件等,格式如下:
<%@include file=“被包含的文件地址%>
- JSP引擎会在JSP文件的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。
- jsp:include/jsp:param(动作)
- jsp:include动作用于引入另一个JSP程序或HTML文件等。
- 执行到include时,被include的文件才会被编译。
- 如果include的是jsp文件,那它不会被转换成Servlet文件。
<jsp:include page=“URLSpec” flush=“true”/>
<jsp:include page=“URLSpec” flush=“true”>
<jsp:param name=“key” value=“value”/> </jsp:include>
- include指令和include动作的区别
- include指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入再编译执行(静态包含)。
- include动作在转换时期是不会被编译的,只有在客户端请求时期被执行到才会被动态的编译载入(动态包含,推荐)。
- jsp:forward/jsp:param
- forward动作用于在JSP中实现转发,将请求转发到另一个指定的JSP程序或者Servlet中处理。
<jsp:forward page=“urlSpec” flush=“true”/>
<jsp:forward page=“urlSpec”>
<!-- 用于指定参数和其对应的值 -->
<jsp:param name=“key” value=“value”/>
</jsp:forward>
九大内置对象
基本概念
- 在JSP程序中有9个内置对象由容器为用户进行实例化,程序员可以不用定义就直接使用这些变量。
- 在JSP转换成Servlet后,会自动追加这些变量的定义,使用内置对象可以简化JSP的开发。
对象的解释
对象名称 |
对象类型 |
作用 |
out |
JSPWriter |
输出流 |
request |
HttpServletRequest |
请求信息 |
response |
HttpServletResponse |
响应信息 |
session |
HttpSession |
会话 |
application |
ServletContext |
全局的上下文对象 |
pageContext |
PageContext |
JSP页面上下文 |
page |
Object |
JSP页面本身 |
config |
ServletConfig |
Servlet配置对象 |
exception |
Throwable |
Throwable 捕获网页异常 |
out内置对象
- out内置对象是一个缓冲的输出流,用来给客户端输出信息
- 常用的方法:
方法名 |
作用 |
void println(String x) |
向客户端输出各种类型数据 |
void newLine() |
输出一个换行符 |
void close() |
关闭此输出流 |
int getBufferSize() |
获得缓冲区大小 |
int getRemaining() |
获取缓冲区中未使用的字节数 |
void flush() |
输出缓冲区里的数据 |
void clearBuffer() |
清空缓冲区并输出缓冲区里的数据 |
void clear() |
清空缓冲区但不输出数据 |
<body>
<%
out.println("<h1>");
out.println("Hello World!");
out.println("</h1>");
int bufferSize = out.getBufferSize();
System.out.println("缓冲区的总大小是:" + bufferSize);
int remaining = out.getRemaining();
System.out.println("缓冲区的剩余字节数为:" + remaining);
System.out.println("已经使用的字节数为:" + (bufferSize - remaining));
out.flush();
%>
</body>
request对象
- request对象封装的是调用JSP页面的请求信息,它是
HttpServletRequest
接口的一个实例。
- 该对象的属性值只在一个请求中保存
方法 |
功能 |
String getMethod() |
返回客户端向服务器端传送数据的方式 |
String getParameter(String name) |
返回客户端向服务器端传送的参数值 |
String[] getParameterValues( String name) |
获得指定参数的所有值 |
String getRequestURI() |
获得请求地址 |
String getRemoteAddr() |
返回发送请求的客户端或最后一个代理的IP地址 |
int getRemotePort() |
返回发送请求的客户端或最后一个代理的端口号 |
String getServerName() |
获取服务器的名字 |
int getServerPort() |
获取服务器端的端口 |
void setAttribute(String name,Object o) |
在此请求中存储属性。属性在请求之间重置 |
Object getAttribute(String name) |
将指定属性的值作为对象返回 |
<body>
<%
String serverName = request.getServerName();
System.out.println("获取到的服务器名称为:" + serverName);
int serverPort = request.getServerPort();
System.out.println("获取到的服务器端口号为:" + serverPort);
request.setAttribute("name", "guanyu");
%>
<%-- 实现转发效果,也就是服务器跳转 --%>
<jsp:forward page="requestTarget.jsp"></jsp:forward>
response对象
- response对象用于给客户端相应输出处理结果,它是
HttpServletResponse
接口的一个实例。
- 经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码URL。
|
|
void addCookie(Cookie cookie) |
添加一个Cookie对象,用于在客户端保存特定的信 息 |
void addHeader(String name, String value) |
添加HTTP头信息,该Header信息将发送到客户端 |
boolean containsHeader(String name) |
判断指定名字的HTTP文件头是否存在 |
void sendRedirect(String location) |
重定向JSP文件 |
void setContentType(String type) |
设置类型与编码方式 |
<%
response.addHeader("refresh", "1");
Date d1 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(d1);
%>
<%= "当前时间为:" + format %>
session对象
- session对象表示浏览器和服务器之间的一次会话,一次会话可以包含多次请求,在多次请求之间可以借助session对象存储信息,它是
HttpSession
类型的一个实例。
- 该对象的属性值在一次会话范围中保存,保存在服务器端,只要不关闭浏览器,默认半个小时内都可以访问。
方法 |
功能 |
void setAttribute(String name, Object object) |
使用指定的名称将对象绑定到此会话 |
Object getAttribute(String name) |
返回在此会话中用指定名称绑定的对象,如果没有对象在该名称下绑定则返回空值 |
application对象
- application对象是一个web程序的全局变量,它是
ServletContext
类型的一个实例。
- 在整个服务器上保存数据,所有用户共享。
方法 |
功能 |
void setAttribute(String name, Object object) |
将对象绑定到此servlet上下文中的给定属性名 |
Object getAttribute(String name) |
返回给定名称的servlet容器属性,若没有该名称的属性返回null |
pageContext对象
- pageContext对象是
PageContext
类型的对象,可以使用这个对象来管理其他的隐含对象
- 只在一个页面中保存数据。
方法 |
功能 |
void setAttribute(String name, Object object) |
使用适当的作用域设置指定的名称和值 |
Object getAttribute(String name) |
返回指定作用域中名称关联的对象,若找不到则返回null |
ServletRequest getRequest() |
获取请求对象 |
ServletResponse getResponse() |
获取响应对象 |
HttpSession getSession() |
获取会话对象 |
ServletConfig getServletConfig() |
获取配置对象 |
JspWriter getOut() |
获取输出对象 |
Object getPage() |
获取页面对象 |
Exception getException() |
获取异常对象 |
exception内置对象
- exception 对象是
Throwable
的实例,表示的是JSP的异常信息。
- 如果要使用它,必须将对应页面page指令的isErrorPage属性设置成true
- 单个页面处理方式
<%@page errorPage="error.jsp" %>
- 在
web.xml
中配置统一的异常处理页面。
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
<%@ page errorPage="error.jsp" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>exception内置对象的使用</title>
</head>
<body>
<%
int ia= 10;
int ib = 0;
System.out.println(ia/ib);
%>
</body>
</html>
<%
if (exception!=null){
out.print("异常的错误信息为"+exception.getMessage());
}
%>
JSP中的JavaBean组件
基本概念
- JavaBean 是使用 Java 语言开发的一个可重用的组件,在 JSP 开发中可以使用 JavaBean 减少重复代码,使整个 JSP 代码的开发更加简洁。
- JavaBean本质上就是Java类,通常要求如下:
- 属性:全部私有化,通过get和set方法进行访问。
- 方法:必须是public关键字修饰。
- 构造器 :必须有无参构造方法。
使用方式
- 使用jsp:useBean的方式创建javaBean实例
<jsp:useBean id=“对象名” scope=“保存范围 class=“包名.类名” />
保存范围有:page|request|sessin|application,默认为page范围。
- 使用jsp:setProperty的方式设置javaBean的属性值
<jsp:setProperty name="对象名" property="属性名" value="属性值" param="参数名"/>
- 使用jsp:getProperty的方式获取javaBean的属性值
<jsp:getProperty name="对象名" property="属性名"/>
保存范围
- 由小到大
page
、request
、session
、application
- 默认是page
删除方式
<% 内置对象.removeAttribute(“JavaBean的名字”); %>