Bootstrap

JSP 简单入门

JSP 页面是Web 程序的展示部分,既包括html代码,也可以运行后台代码,还有一些自己特定的处理方式。本质上也是一个Servlet。

1. 隐式对象

Servlet 容器会传递一些对象给Servlet,在jsp中可以通过隐式对象来访问Servlet 容器传递的几个对象,隐式对象如下:

  • request:HttpServletRequest
  • response:HttpServletResponse
  • out:JspWriter
  • session:HttpSession
  • application:ServletContext
  • config:ServletConfig
  • pageContext:PageContext
  • page:HttpJspPage
  • exception:Throwable

如从HttpServletRequest 中获取username 的参数,

<%
	 String userName=request.getParameter("userName") 
%>

2. 指令

指令是JSP语法元素的第一种类型,它们指示JSP转换器如何翻译JSP页面为Servlet,JSP2.2定义了多个指令,但目前用的比较多的是page和include指令。

  • page:<%@ page … %>,一般用来导入包,<%@ page import=“java.util.Date”%>;
  • include: <%@ include…%>,可以将其他文件内容包含到当前页面中,<%@include file=“main1.jspf”%>。

3. 脚本元素

一个脚本程序是一个java代码块,以<% 开始,以%>结束。

3.1 表达式

每个表达式都会被JSP容器执行,并使用隐式对象out的打印方法输出结果,表达式以<%= 开始,以%>结束。

3.2 声明

可以声明能在JSP页面中使用的变量和方法,声明以<%! 开始,以%> 结束。

4. 动作

动作是第三种类型的语法元素,他们被转换成java代码来执行操作,如访问一个java 对象或者调用方法,有JSP 容器支持的标注动作,也可以创建自定义标签来执行某些操作,

<jsp:useBean id="today" class="java.util.Date" />
<%=today%>

创建Date的对象today,并打印出来。另外还有setProperty (给一个对象设置属性,并且可以指定属性的范围,在5.1中: jsp的4个作用域 pageScope、requestScope、sessionScope、applicationScope)和 getProperty(获取一个对象的属性)。

5. 表达式语音

JSP 2.0 最重要的特性之一就是表达式语言,以 开 始 , 以 结 束 , 结 构 为 { 开始,以 } 结束,结构为 {expression},EL 表达式可以返回任意类型的值,如果返回的值是一个带对象的属性,可以使用[] 或者 . 来访问属性。对于request域的属性访问,可以是显式的也可以是隐式的,如${requestScope.employee.name} 或者 ${employee.name}都可以

5.1 EL 隐式对象

JSP 有自己的隐式对象,但是在免脚本(脚本表达式<%%>)的JSP页面中不能访问这些隐式对象。EL 允许通过它自己的隐式对象来访问所有的对象。

对象描述
pageContext当前JSP的PageContext,可以访问JSP 的隐式对象
initParam包含所有环境的初始化参数,并用参数名作为key的map
param这是一个包含所有请求参数,并用参数名作为key的map,每个key值就是指定名称的第一个参数值,如果两个参数名同名,只有第一个能够用param来获取值,要想获取所有同名参数的值,就得用params代替
paramValues这是一个包含所有请求参数,并用参数名作为key的map,每个key值就是一个字符串数组,其中包含了指定参数名称的所有参数值,就算该参数只有一个值,他也仍然会返回一个带有一个元素的数组
header这是一个包含请求标题并用标题名作为key的map,每个key值就是指定标题名称的第一个标题,如果同名的标题不止一个,只返回第一个值,要想获取多个值的标题,使用 headerValues 对象代替
headerValues类似header,每个key值就是一个字符串数组,包含了指定参数名称的所有值
cookie包含了当前请求对象中所有cookie对象的map,cookie 名称就是key名称,并且每个key都映射到一个cookie对象
applicationScopeServletContext对象中所有属性的map,是程序全局变量,对每个用户每个页面都有效。存放在ServletContext对象中。它的存活时间是最长的,如果不进行手工删除,它们就一直可以使用,application里的变量一直在累加,除非你重启tomcat,否则它会一直变大。
sessionScopeHttpSession对象中所有属性的map,是用户全局变量,在整个会话期间都有效。只要页面不关闭就一直有效(或者直到用户一直未活动导致会话过期,默认session过期时间为30分钟,或调用HttpSession的invalidate()方法),session的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问这页,session里的变量就重新计算了。
requestScope当前HttpServletRequest对象中所有属性的map,指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。在这个过程中可以使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了
pageScope包含了全页面范围内的所有属性,是一个map,属性名称就是map的key,当前页面有效。在一个jsp页面里有效。page里的变量没法从index.jsp传递到test.jsp。只要页面跳转了,它们就不见了
;