JSP简介
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP简介相关的知识,希望对你有一定的参考价值。
一、JSP概述:
1、由来:
- JSP(Java Server Page):为了简化Servlet的工作,新推出的一种新技术,也可以说是Servlet的替代品。1997年由SUN公司推出了Servlet API 以及第一款Java Web服务器。
2、JSP技术:
- 1999年Sun公司推出了JSP1.0,作为对Servlet的补充。JSP包含很多技术,如Java Bean,自定义标签(Custom Tags),EL表达式(Expression Language),JSTL标准标签库(Java Standard Tag Library)等。
3、JSP工作原理:
- JSP是一种Servlet,但是与HttpServlet的工作方式不太一样,
- HttpServlet是先由源代码编译为class文件后部署到服务器的,是先编译后部署。
- JSP则是先部署源代码后编译为class文件的,是先部署后编译。
二、JSP语法:
- JSP是html代码与Java代码的混合体,其中HTML部分遵循HTML语法,Java部分遵循Java语法
1、JSP脚本:
- 在JSP页面中写Java代码称为JSP脚本。JSP脚本必须使用 "<% %>"括起来,Java代码写在其中,并且必须遵循Java语法
2、JSP输出:
- JSP中使用 “ <%= %> ”输出各种类型数据,包括int、double、boolean、String、Object
3、JSP指令:JSP指令用来声明JSP页面的一些属性等,例如编码方式、文档类型。JSP指令使用符号“ <%@ %> ”
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- page指令:
- page指令是最常用的指令,用来声明JSP页面的属性等。JSP指令的多个属性可以写在一个page指令里,也可以写在多个指令里。
- 注意:无论在哪个page指令里的属性,任何page允许的属性都只能出现一次,否则会出现编译错误。import可以出现多次
- include指令:
- include指令比较简单,只有一种形式:
<%@ include file="relativeURL" %>
<!-- relativeURL 为本应用程序内另一个JSP文件或者HTML文件的路径 -->
- JSP中还提供了另一种包含文件的行为:
<jsp:include page="relativeURL" />
<!-- 该命令与include指令的使用方法基本一致 -->
- taglib指令:
- JSP支持标签技术,使用标签功能能够实现代码重用,很少量的代码就可以实现很复杂的显示效果。
- 要使用标签功能必须先声明标签库以及标签前缀。
- taglib指令有两个属性:uri为类库的地址,prefix为标签的前缀。
<!-- 这里使用的是JSTL 需要两个jar包的支持 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
4、JSP行为:
- JSP行为(JSP Action)是一组JSP内置的标签。JSP行为是对常用的JSP功能的抽象与封装,包括两种:自定义JSP行为和标准JSP行为。
- <jsp:include /> 行为:用于运行时包含某个文件。若被包含的文件为JSP程序,则先会执行JSP程序,然后将执行的结果保健进来。
- 语法:<jsp:include page="relativeURL" flush="true">
- 属性page是必需的,表示被包含的文件相对路径
- 属性flush可选,,取值有true或false,默认为false,设置读入被保存文件前是否清空缓存。
- <jsp:forward />行为:它是对forward()方法的一个封装
- Servlet中使用以下方式跳转(转发)到另外一个Servlet或者另一个文件
//getRequestDispatcher(String str)方法中传入的是目标地址
request.getRequestDispatcher("index.jsp").forward(request, response);
- JSP中使用如下方式:
<jsp:forward page="index.jsp"/>
三、JSP隐藏对象
- JSP中内置了 9 个隐藏对象:out、request、response、config、session、application、page、pageContext、exception。
1、out输出流对象:
- 隐藏对象out是 javax.servlet.jsp.JspWriter类的实例。服务器向客户端输出的字符类内容可以通过out对象输出。
- out对象的常用方法:
- void append(CharSequence cs):向out缓存中扩展字符类输出。当缓存满或者执行out.flush()操作时,这些内容会输出到客户端浏览器
- void clear():清空要输出的内容
- void flush():将缓存内容flush到客户端浏览器
- void println(String str):向客户端输出内容
- boolean isAutoFlush():返回缓存满时 是否自动flush,如果为false,缓存满时会抛出异常
- int getBufferSize():返回缓存大小,单位/KB
- int getRemaining():返回缓存剩余大小,单位/KB
2、request请求对象:
- 隐藏对象 request是 javax.servlet.ServletRequest 类的实例,代表着客户端的请求
- request 包含客户端信息以及请求信息,如:请求哪个文件,附带的地址栏参数等
- 客户端每次请求都会产生一个request实例
- request对象的常用方法:
- void setAttribute(String name,Object value):在request中保存一个对象。本页面或者forward之后的页面中可以通过getAttribute(String name)方法获取该对象
- Object getAttribute(String name):从request中获取name对应的对象
- String getMethod():返回提交方式,一般为GET或者POST
- String getParameter(String key):返回提交的参数
- String[] getParameterValues(String key):返回提交的多个同名参数值,以数组的形式返回
- Enumeration getParameterNames():返回所提交的参数名称
- Cookie[] getCookies():返回所有的Cookie
- String getContextPath():返回应用程序的路径
- String getRequestURI():返回请求的URI路径
- void setCharacterEncoding(String encoding):设置request的编码方式
- String getHeader(String name):获取request头信息
- Enumeration getHeaderNames():返回所有的request头名称
- Dispatcher getRequestDispatcher():返回 Dispatcher对象。 Dispatcher 对象可以执行forward操作
- HttpSession getSession():返回HttpSession对象
3、response响应对象:
- 隐藏对象response是 javax.servlet.ServletResponse 类的实例,代表着客户端的响应
- 服务器的任何输出都通过response对象发送对客户端浏览器,每次服务器都会响应一个response实例
- response对象的常用方法:
- void clear():清空暂存在缓冲区的输出
- void addCookie(Cookie cookie):设置Cookie
- OutputStream getOutputStream():返回服务器输出流,可以通过该输出流输出二进制信息
- void sendRedirect(String url):使本页面 redirect 到另一个页面
- void setContextType(String contextType):设置文档类型,HTML的文档类型为 text/html
- PrintWriter getOut():返回out对象
- void setHeader(String name, String value):设置 response 头信息
- void setStatus(int status):设置 response 状态码
4、config配置对象:
- 隐藏对象 config 是 javax.servlet.ServletConfig 类的实例,ServletConfig 封装了配置在 web.xml 中初始化JSP参数
- JSP中通过 config 获取这些参数,每个JSP文件共有一个config对象
- config对象的常用方法:
- String getInitParameter(String name):返回配置在web.xml中的初始化参数
- Enumeration getInitParameterNames():返回所有的初始化参数名称
- ServletContext getServletContext():返回ServletContext 对象
- String getServletName():返回Servlet的名称
5、session会话对象:
- 隐藏对象session是 javax.servlet.http.HttpSession 类的实例
- session 与 cookie 是记录客户访问信息的两种机制
- session 用于在服务器端保存用户信息
- cookie用于在客户端保存用户信息
- Servlet中需要通过 request.getSession() 来获取 session 对象,而JSP中可以直接使用,如果JSP中配置了 <%@ page session="false" %>,则隐藏对象session不可用
- 每一个用户对应一个session对象
- session对象的常用方法:
- String getId():返回session的ID
- Object getAttribute(String name):返回session中属性名为name的对象
- Enumeration getAttributeNames():返回 session 的所有属性名
- long getCreationTime():返回该session创建的时间
- long getLastAccessedTime():返回该session最后一次访问的时间
- int getMaxInactiveInterval():返回session的最大允许的间隔时间,单位:秒
- void setAttribute(String name, Object value):设置 session
- void setMaxInactiveInterval(long second):设置对打允许的时间间隔
6、application应用程序对象:
- 隐藏对象 application 是 javax.servlet.ServletContext 类的对象。 application封装了JSP所在的 Web 应用程序的信息,eg: web.xml 中配置的全局的初始化信息
- Servlet中 application 对象需要通过ServletConfig.getServletContext() 来获取,整个 Web 应用程序对应一个 application对象
- application 对象的常用方法:
- Object getAttribute(String name): 返回application中属性名为 name的对象
- Enumeration getAttributeNames(): 返回application中的所有属性名
- void setAttribute(String name, Object value): 设置 application 属性
- void removeAttribute(String name): 移除 application 属性
- String getInitParameter(String name): 返回全局初始化参数
- Enumeration getInitParameterNmaes(): 返回所有的全局初始化参数
- String getMimeType(String filename): 返回文件的文档类型。eg: getMimeType("index.html") 将返回 "text/html"
- String getRealPath(String relativePath): 返回 web 应用程序内相对网址对应的绝对路径
7、page 页面对象:
- 隐藏对象 page 为 javax.servlet.jsp.HttpJspPage 类的实例。
- page 对象代表当前JSP页面,是当前JSP编译后的Servlet类的对象
- page 相当于普通 Java类中的关键字 this
8、pageContext 页面上下文对象:
- 隐藏对象 pageContext 为 javax.servlet.jsp.PageContext 类的实例
- pageContext 对象代表当前JSP页面编译后的内容,通过pageContext能获取到JSP中的资源
- pageContext对象的常用方法:
- Object findAttribute(String name): 在JSP页面中查找变量
- void forward(String url): forward 到另一个页面
- Object getAttribute(String name): 返回属性
- Object getAttribute(String name, int scope): 返回指定范围内的属性,范围包括(PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE)
- JspWriter getOut(): 返回 out 对象
- Object getPage(): 返回 page 对象
- ServletRequest getRequest(): 返回 request 对象
- ServletResponse getResponse(): 返回response 对象
- HttpSession getSession(): 返回 session 对象
9、exception 异常对象:
- 隐藏对象 exception 为 java.lang.Exception 类的对象
- exception 封装了JSP中抛出的异常信息,要想使用 exception 隐藏对象,需要设置 <%@ page isErrorPage="true"%>
- 隐藏对象 exception 通常被用来处理错误页面
四、EL表达式
- JSP中可以使用 EL(Expression Language)表达式,EL表达式是使用 “${ }”括起来的脚本,用来更方便的读取对象。
- EL表达式写在JSP的HTML代码中,而不能写在 “<% %>” 括起来的脚本中
1、EL表达式运算:
- EL表达式支持简单的运算,包括:加(+)、减(-)、乘(*)、除(/ 或者 div)、取余(% 或者 mod)、三目运算符(exp ? val1 : val2)等
10 + 20 = ${10 + 20} <br>
10 - 20 = ${10 - 20} <br>
10 * 20 = ${10 * 20} <br>
10 / 20 = ${10 / 20} <br>
10 div 20 = ${10 div 20} <br>
10 % 20 = ${10 % 20} <br>
10 mod 20 = ${10 mod 20} <br>
10 与 20 谁大:${10 > 20 ? 10 : 20} <br>
10 与 20 谁小:${10 <= 20 ? 10 : 20} <br>
- EL表达式也支持简单的比较运算,包括:大于(> 或者 gt)、小于(< 或者 lt)、等于(== 或者 eq)、不等于(!= 或者 ne)、大于等于(>= 或者 ge)、小于等于(<= 或者 le)等
10 大于 20 ?:${10 > 20} <br>
10 大于 20 ?:${10 gt 20} <br>
10 小于 20 ?:${10 < 20} <br>
10 小于 20 ?:${10 lt 20} <br>
10 等于 20 ?:${10 == 20} <br>
10 等于 20 ?:${10 eq 20} <br>
10 不等于 20 ?:${10 != 20} <br>
10 不等于 20 ?:${10 ne 20} <br>
10 大于等于 20 ?:${10 >= 20} <br>
10 大于等于 20 ?:${10 ge 20} <br>
10 小于等于 20 ?:${10 <= 20} <br>
10 小于等于 20 ?:${10 le 20} <br>
- EL表达式的逻辑运算符,包括:与(&& 或者 and)、或(|| 或者 or)、非(! 或者 not)等
10 大于 20 并且 10 小于 20 ?:${10 > 20 && 10 < 20} <br>
10 大于 20 并且 10 小于 20 ?:${10 > 20 and 10 < 20} <br>
10 大于 20 或者 10 小于 20 ?:${10 > 20 || 10 < 20} <br>
10 大于 20 或者 10 小于 20 ?:${10 > 20 or 10 < 20} <br>
非 10 大于 20 ?:${! (10 > 20)} <br>
非 10 大于 20 ?:${not (10 > 20)} <br>
附件列表
以上是关于JSP简介的主要内容,如果未能解决你的问题,请参考以下文章