1.JSP简介
- JSP是一种用于开发包含动态内容的web页面技术,是一个重要的混合解决方案
- JSP实际上是一个精心设计的SErvlet
2.JSP工作原理
- 在服务器端有一个JSP容器负责获得对JSP文件的请求,当一个JSP文件第一次被请求时,容器首先会把这个JSP文件转换成一个Servlet。在转换过程中,如果发现文件有语法错误,将会中断。JSP引擎会把该java文件变异成相对应的.class文件,因为这个过程会消耗一定时间,所以第一次访问或改动时,访问时间会比较长。
- 接下来,JSP引擎会穿件一个该SErvlet的实例,并执行该实例的jspInit()方法,然后创建并启动一个新的线程,新线程调用实例的jspServlet()方法
- 浏览器在调用JSP文件时,Servlet容器会把浏览器的请求和对浏览器的回应封装成HttpServletRequest和HttpServletResponse对象,同事调用对应的Servlet实例中的jspService()方法,把这两个对象作为参数传递到jspService方法中。jspSErvice()方法执行后会将HTML内容返回给客户端
3.JSP文件中的内容
<%@这是一个指令%>
<%!这是一个声明%>//定义变量和方法,只在当前页面有效
<%这是一个脚本%>//在web服务器相应请求时会执行
声明和脚本的区别:声明的代码将在转换时被赋值到JSP Servlet类的主体中,并且他们可以用于声明某些字段、类型和方法; 脚本将被复制到_jspService方法体中。该方法中的所有局部变量都可以在脚本中使用。
<%=这是一个表达式%>//返回String类型的结果值,并将结果值输出到浏览器;不能用分号来作为表达式的结束符;将被复制到_jspService方法体中f
“”<%=”是一个完整的标记,中间不能有空格
<%--这是JSP注释语句%>//不会发送到客户端浏览器
<!--这是HTML/XML注释语句-->//可以被发送到客户端
- 基本元素:规范JSP网页所使用的java代码,包括JSP注释、声明、表达式和脚本段
jSP代码段 可以包含任意合法的java语句 ,该代码在服务器处理请求时被执行
语法格式:<%符合语法的代码块%>
在代码中定义的变量是局部变量,在声明中定义的变量是页面的全局变量
- 指令元素(编译指令):是针对JSP引擎的,包括include、page指令和taglib指令
用于设置整个JSP页面的相关属性
<%@ page%>
属性 | 说明 | 设置值示例 |
language | 指定用到的脚本语言(默认java) | <%@page language="java"%> |
import | 导入包或类 | <%@page import="java.util.Date"%> |
pageEncoding | 指定页面所用编码 | UTF-8 |
extends | JSP转换成Servlet后继承的类 | java.Servlet.http.HttpServlet |
session | 指定该页面是否参与到Http会话中 | true/false |
buffer | 设置out对象缓冲区大小 | 8kb |
autoflush | 设置是否自动刷新缓冲区 | true/false |
isThreadSafe | 设置该页面是否是线程安全 | true/false |
info | 设置页面的相关信息 | 网站主页面 |
erropage | 设置当前页面出错后要跳转的页面 | /erro/jsp-error.jsp |
conterType | 设计相应jsp页面的MIME类型和字符编码 | text/html;charset=gbk |
isErroPage | 设置是否是一个错误处理页面 | true/false |
isELignord | 设置是否忽略正则表达式 | true/false |
注意: | 在一个页面可以使用多个page指令,但出import外,每个舒兴国只能使用一次 |
<%@ include file="相对路径"%> //静态过程
<%@ taglib url="taglibURL" prefix="tabPrefix" %> //tagilb指令允许用户使用标签库自定义新的标签
url属性指定目标标签库所属的URL命名空间,其值可以是相对路径、绝对路径或标签库描述文件:属性perfix定义了标签的前缀
- 动作指令:属于服务器端的JSP元素,它用来被标记并控制Servlet引擎的行为
用于运行脚本动作,包括:
jsp:include指令 用于在请求的处理阶段包含来自一个Servlet或JSP页面的相应,当执行到该总做标签时才加载包含文件的字节码。和变异指令的include不同,里面的include包含的过程是静态的,而jsp:include指令则是动态的方式(动态包含文件)当被包含的jsp文件有修改时,jsp引擎会及时发现并 重新编译。这也是include动作指令与include编译指令的最大不同
语法:<jsp:include page="文件路径"/>
或者<jsp:include page="文件路径>
<jsp:param name="parameterName1" value="参数值" />
<jsp:param name="parameterName1" value="参数值" />
....
</ jsp:include>
jsp:forward指令 可用于停止当前页面的执行转发至其他JSP。
jsp:param指令 用于设置参数,不能单独使用,主要用在<jsp:include>和<jsp:forward>中
jsp:plugin指令 连接客户端 的Applet混合Bean插件
jsp:useBean 指令用来在jsp页面内创建一个JavaBean实例,其语法格式如下:
<jsp:useBean id="javabean名字" scope="有效范围" class="javabean的类名"/>
jsp:setProperty指令 设置JavaBean的属性值,语法格式:
<jsp:getProperty name="beanName" property="*"/>
<jsp:getProperty name="beanName" property="properName"/>
<jsp:getProperty name="beanName" property="properName" value="BeanValue"/>
<jsp:getProperty name="beanName" property="properName" param="paramName"/>
其中,name属性值对应jsp:useBean指令中的id值;
property="*"表示所有名字和Bean实行名字匹配的请求参数都将被传递给相应属性的setter方法
当property有具体指时表示匹配一个Bean属性;
value属性表示使用指定的值来设置属性;
param属性表示根据request对象中的参数来匹配属性
jsp:getProperty指令 获取JavaBean值得属性值并输出(String),语法格式如下:
<jsp:getProperty name="beanName" property="属性名"/>
其中,name属性的值对应jsp:useBean指令中的id值,property指定要获取的属性名。该动作实际上 是调用Bean的getter方法
JSP内置对象
- request对象 request代表着从用户发送过来的请求,可以获取客户端用户提交的数据或参数
主要方法: setAttribute(String name,Object obj) 设置属性及属性值
getAttribute(String name) 获取指定属性的值(没有返回空)获取的是对象类型
getParameter(String name) 获取name指定参数的参数值(客户端传送给服务器端的参数值)
(1)使用jsp的forward或include动作,利用参数自动做实现传递参数
(2)在jsp或html页面利用表单传递参数
(3)追加在网址后的参数传递或追加在超链接后的参数
getParameterValues(String name) 获取指定参数的所有值
removeAttribute(String name) 删除请求中的属性
getSession([Boolean create]) 返回和请求相关的session,create可选,true时,若客户端没有创 建session则创建新的session
setCharacterEncoding("UTF-8") 规定编码格式
2.response对象
sendRedirect(String url) 使用指定的重定向位置url向客户端发送重定向响应
setHeader(String name,String value) 使用给定的名称和值设置一个相应报头,如果已存在则覆盖(实现 页面的定会跳转或刷新)
重定向sendredirect(String url)和转发<jsp:forward page=""/>的区别:
(1)只能使用<jsp:forard>在本网站内跳转,而使用response跳转到任何一个地址页面
(2)<jsp:forward>带着request中的信息跳转;sendRedirect不带request信息跳转
3.session对象
session(会话)含义:用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间成为一次会话
long setMaxInactiveInterval() 用于返回session对象的生存时间(s)
boolean isNew() 用于判断目前session是否为新的session
viod invalidate 用于session对象
4.out对象
用于向客户端输出相应信息
print() 可以输出任意类型的数据
5.page对象
6.application对象
用于保存应用程序中的共有数据,在服务器启动时自动创建;所有访问同一网站的用户,都有相同的application对象,之言关闭服务器,该对象才会被收回。
Object getAttribute(String attriname) 获取指定属性值
void setAttribute(String attriname,Object attrivalue) 设置一个新的属性并保存值
void removeAttribute(String attribute) 从application对象中删除指定的属性
Enumeration getAttributeNames() 获取application对象中所有属性的形成
7.config对象
8.pageContext对象
9.exception对象