JSP-Java Server Pages,是一种动态网页开发技术。可使用JSP标签在HTML网页中插入Java代码。JSP与Servlet一样,是在服务器端执行的。
JSP处理:
1.Web服务器识别这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。
2.JSP引擎从磁盘中载入JSP文件,然后将她们转换为Servlet。这种转换只是简单的将所有模板文本改用println()语句,并且将所有的JSP元素转换成Java代码。
3.JSP引擎将Servlet编译成可执行的类,并且将原始请求传递给Servlet引擎。
4.Web服务器的某组件将会调用Servlet引擎,然后载入并执行servlet类。在执行过程中,Servlet产生HTML格式的输出并将其内嵌于HTTP response中上交给Web服务器。
5.Web服务器以静态HTML网页的形式将HTTP response返回到浏览器中。
6.最终,Web浏览器处理HTTP response中动态产生的HTML网页。
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。
当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。
jspDestroy()方法在JSP中等价于servlet中的销毁方法.
JSP语法:
脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。
html中格式:
<%代码%>
XML语句:
代码片段
JSP声明语句,可以声明变量、方法。
html中格式:
<%!代码%>
XML语句:
代码片段
JSP表达式中包含的脚本语言表达式,先被转换成String,然后插入到表达式出现的地方。
<%=代码%>
代码片段
JSP注释:
<%-- 注释 --%> | JSP注释,注释内容不会被发送至浏览器甚至不会被编译 |
HTML注释,通过浏览器查看网页源代码时可以看见注释内容 |
JSP指令:
指令 | 描述 |
---|---|
<%@ page ... %> | 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等 |
<%@ include ... %> | 包含其他文件 |
<%@ taglib ... %> | 引入标签库的定义,可以是自定义标签 |
page指令为容器提供当前页面的使用说明:
JSP可以通过include指令来包含其他文件。被包含的文件会被同时编译。
taglib使用标签库定义新的自定义标签,在JSP页面中启用定制行为。
JSP内置对象:
JSP内置对象是Web容器创建的一组对象,不使用关键字new就可以使用的对象。
1.out对象:
out对象是javax.servlet.JspWriter类的实例,用来在response对象中写入内容。
void println() 向客户端打印字符串
void clear() 清除缓冲区的内容,如果在flush之后调用会抛异常。
void clearBuffer():清除缓存区内容,在flush之后调用不会抛异常。
void flush():将缓冲区内容输出到客户端。
int getBufferSize():返回缓冲区字节大小,如果没有缓冲区,则为0
int getRemaining():返回缓冲区还剩余多少字节可用
boolean isAutoFlush():返回缓冲区满时,是自动清空还是抛出异常。
void close():关闭输出流
首先,缓冲区就是内存的一块区域,用来保存临时数据。
2.request对象:
客户端的请求信息被封装在request对象中,通过这个对象可以了解到客户端的请求,然后做出响应。
request是HttpServletRequest类的实例。request对象的请求域为:每当客户端请求JSP页面时,JSP引擎就会创建一个新的request来表达这个请求,完成客户端的请求之前,该对象一直有效。
String getParameter(String name) : 返回name指定参数的参数值
String[] getParameterValues(String name) : 返回包含参数name的所有值的数组
void setAttribute(String name,Object value) : 存储此请求中的属性
Object getAttribute(String name) : 返回指定属性的属性值
String getProtocol() : 返回请求用的协议类型以及版本号
String getServerName() : 返回接受请求的服务器主机名
int getServerPort() : 返回服务器接受此请求所用的端口号
String getCharacterEncoding() : 返回字符编码方式
void setCharacterEncoding() : 设置请求的字符编码方式
int getContentLength() : 返回请求体的长度(以字节数)
String getRemoteAddr() : 返回发送此请求的客户端IP地址
String getRealPath(String path) : 返回虚拟路径的真实路径
String request.getContextPath() : 返回上下文路径
3.response对象:
response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。
String getCharacterEncoding() : 返回响应用的字符集编码
PrintWriter getWriter() : 返回可以向客户端输出字符的一个对象(注意比较PrintWriter与内置对象out的区 别)
sendRedirect(String location) : 重新定向客户端请求。
请求重定向:客户端行为,response.sendRedirect(),本质上相当于两次请求,前一次请求对象不会保存,地址栏的URL地址会改变。
请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp);本质上是一次请求,转发后请求对象会保存,地址栏URL地址不会变。
4.session对象
session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。session对象用来跟踪在各个客户端请求间的会话。
session对象在第一个JSP页面被装载时自动创建,完成会话期管理
long getCreationTime() : 返回Session创建时间
String getId() : 返回Session创建时JSP引擎为它创建的唯一ID号
Object setAttribute(String name,Object value) : 使用指定名称将对象绑定到此会话
Object getAtttribute(String name) : 返回与此会话中指定名称绑定在一起的对象,如果没有对象绑定在该名称下,返回null
String[] getValueNames() : 返回一个包含此Session中所有可用属性的数组
int getMaxInactiveInterval() : 返回两次请求间隔多长时间此Session被取消(以秒为单位)。
5.application对象
application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。在用户的前后连接或不同用户的连接中,可以对application对象的同一属性进行操作。
在任何地方对application对象属性的操作,都将影响其他用户对此的访问。
void setAttribute(String name, Object value)使用指定名称将对象绑定到此会话。
Object getAttribute(String name)返回与此会话中指定的名称绑定在一起的对象,如果没有对象绑定在该名 称下,返回null。
Enumeration
String getServerInfo()返回JSP(Servlet)引擎名与版本号。
6.page对象
page对象就是指向当前JSP页面本身,就是this对象的同义词。
7.pageContext对象
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问。
pageContext对象可以访问到本页面所在的application的某一属性值。
JspWriter getOut()返回当前客户端响应被使用的输出流(out)
HttpSession getSession()返回当前页中的HttpSession对象(session)
Object getPage()返回当前页的Object对象(page)
ServletRequest getRequest()返回当前页的ServletRequest对象(request)
ServletResponse getResponse()返回当前页的ServletResponse对象(response)
int getAttributesScope(String name)返回某属性的作用范围
void forward(String relativeUrlPath)使当前页面重定向到另一页面
void include(String relativeUrlPath)在当前位置包含另一文件
8.config对象
config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。
这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。
ServletContext getServletContext()返回含有服务器相关信息的ServletContext对象
String getInitParameter(String name)返回初始化参数的值
Enumeration
9.exception对象
exception 对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。
String getMessage()返回描述异常的信息。
String toString()返回关于异常的简短描述信息
void printStackTrace()显示异常及其堆栈
Throwable FillInStackTrace()重写异常的执行堆栈
JSP动作元素:
语法 | 描述 |
---|---|
jsp:include | 在页面被请求的时候引入一个文件。(插入文件的时候是在页面被请求的时候) |
jsp:useBean | 寻找或者实例化一个JavaBean。 |
jsp:setProperty | 设置JavaBean的属性。 |
jsp:getProperty | 输出某个JavaBean的属性。 |
jsp:forward | 把请求转到一个新的页面。 |
jsp:plugin | 根据浏览器类型为Java插件生成OBJECT或EMBED标记。 |
jsp:element | 定义动态XML元素 |
jsp:attribute | 设置动态定义的XML元素属性。 |
jsp:body | 设置动态定义的XML元素内容。 |
jsp:text | 在JSP页面和文档中使用写入文本的模板 |
jsp:param | 获取参数值 |
所有的动作要素都有两个属性:
id:id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用。
scope:该属性用于识别动作元素的生命周期。scope属性定义了相关联id对象的寿命。
scope属性有四个可能的值: (a) page, (b)request, (c)session, 和 (d) application。