JSP学习笔记

110 阅读6分钟

JSP的概念

  • JSP是Java Server Pages的简称,跟Servlet一样可以动态生成HTML响应, JSP文件命名为 xxx.jsp。 

  • 与Servlet不同,JSP文件以HTML标记为主,然后内嵌Java代码段,用于处理动态内容。

    <%@ page import="java.util.Date" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>

    Hello Time 现在的时间是:<%= new Date()%>

JSP的语法

  • 声明区
  • 程序代码区
  • 表达式
  • 注释
  • 指令和动作
  • 内置对象

声明区

定义全局变量、方法、类

<%!
  int i;
  public void setName(){… …}
%>

程序代码区

定义局部变量以及放入任何的Java程序代码

<%
  int j;
  for (int k=0; k<10; k++) {
    … …
 }
%>

表达式

可以输出一个变量或一个具体内容,但=后面必须是字符串变量或者可以被转换成字符串的表达式。 不需要以 ; 结束,只有一行

<%=“hello world”%>
<%=i+1%>

注释

<!--  -->  HTML文件的注释,浏览器可以查看到
<%--  --%>  JSP文件的注释,浏览器看不到
<%//  %>   Java语言中的单行注释,浏览器看不到
<%/*  */%>  Java语言中的多行注释,浏览器看不到

指令和动作

<%@指令 属性=“属性值”%>

page、taglib、include

page指令

page指令用于导包和设置一些页面属性

  • import 导入相应的包,惟一允许在同一文档中多次出现的属性

  • contentType 设置Content-Type响应报头,标明即将发送到浏览器的文档类型

  • pageEncoding 设置页面的编码

  • language 指定页面使用的语言

  • session 控制页面是否参与HTTP会话

  • errorPage 处理当前页面中抛出但未被捕获的任何异常

  • isErrorPage 当前页是否可以作为其他页面的错误处理页面

    <%@ page import="java.util.List" %> <%@ page import="java.util.LinkedList" %> <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>

taglib指令

taglib指令用来扩展JSP程序的标签元素,引入其他功能的标签库文件

<!-- prefix属性用于指定库前缀 -->
<!-- uri属性用于指定库的标识 --> 
<%@taglib uri=“tagLibary” prefix=“prefix”%>

include指令

include指令用于引入另一个JSP程序或HTML文件

JSP引擎会在JSP文件的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作

<%-- 表示包含或引入head.jsp文件 include指令的方式  静态包含--%>
<%--<%@ include file="head.jsp"%>--%>
<%-- include动作的方式  动态包含 --%>
<jsp:include page="head.jsp"></jsp:include>

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内置对象

在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 捕获网页异常

out内置对象

out内置对象是一个缓冲的输出流,用来给客户端输出信息

  • void println(String x) 向客户端输出各种类型数据

  • void newLine() 输出一个换行符

  • void close() 关闭输出流

    <% out.println("

    "); out.println("Hello World!"); out.println("

    "); %>

request内置对象

request对象封装的是调用JSP页面的请求信息,它是HttpServletRequest接口的一个实例。 该对象的属性值只在一个请求中保存。

  • String getMethod() 返回客户端向服务器端传送数据的方式

  • String getParameter(String name) 返回客户端向服务器端传送的参数值

  • String[] getParameterValues( String name) 获得指定参数的所有值

  • void setAttribute(String name,Object o) 在此请求中存储属性。属性在请求之间重置

  • Object getAttribute(String name) 将指定属性的值作为对象返回,若不存在则返回空值

    <% String serverName = request.getServerName(); System.out.println("获取到的服务器名称为:" + serverName); int serverPort = request.getServerPort(); System.out.println("获取到的服务器端口号为:" + serverPort); // 通过内置对象设置属性信息,也就是存储数据 request.setAttribute("name", "hello"); %> <%= "获取到的属性值为:" + request.getAttribute("name")%>

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"); %>

session内置对象

session对象表示浏览器和服务器之间的一次会话,一次会话可以包含多次请求,在多次请求之间 可以借助session对象存储信息,它是HttpSession类型的一个实例

该对象的属性值在一次会话范围中保存,保存在服务器端,只要不关闭浏览器,默认半个小时内都 可以访问。

  • void setAttribute(String name, Object value) 使用指定的名称将对象绑定到此会话

  • Object getAttribute(String name) 返回在此会话中用指定名称绑定的对象,如果没有对象在该 名称下绑定则返回空值

    <% session.setAttribute("name", "hello"); System.out.println("session内置对象中的数据设置成功!"); %> <%= "获取到的属性值为:" + session.getAttribute("name")%>

application内置对象

application对象是一个web程序的全局变量,它是ServletContext类型的一个实例

在整个服务器上保存数据,所有用户共享

  • void setAttribute(String name, Object object) 将对象绑定到此servlet上下文中的给定属性名

  • Object getAttribute(String name) 返回给定名称的servlet容器属性,若没有该名称的属 性返回null

    <% application.setAttribute("name", "hello"); System.out.println("application内置对象中的数据设置成功!"); %> <%= "获取到的application内置对象的属性为:" + application.getAttribute("name")%>

pageContext内置对象

pageContext对象是PageContext类型的对象,可以使用这个对象来管理其他的隐含对象

只在一个页面中保存数据

  • void setAttribute(String name, Object value, int scope)  使用适当的作用域设置指定的名称和值
  • Object getAttribute(String name, int scope) 返回指定作用域中名称关联的对象,若找不到 则返回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>