Jsp简介
2016-12-23 15:28
453 查看
为什么会出现JSP
我们在Servlet技术开发的时候,如果写太多的Html代码,是不是看着很头疼呢?因此就出现了Jsp技术,用Java语言(+Html语言)开发动态资源的技术。Jsp的本质就是Servlet。 Jsp的运行是交给Tomcat服务器运行的,tomcat的work目录,存放jsp运行时的临时文件。为什么Jsp就是Servlet
//jsp被tomcat翻译为Java文件,继承HttpJSPBase类(该类继承自HttpServlet), public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { HttpJspBase类: public abstract class org.apache.jasper.runtime.HttpJspBase extends javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {
总结:Jsp本质就是Servlet。Servlet的技术可以在Jsp程序中使用,但是Jsp技术并不是全部适用于servlet程序
Jsp页面的执行过程
第一步:访问到hello.jsp页面,tomcat扫描到jsp文件,在%tomcat%/work把jsp文件翻译成java源文件(hello.jsp -> hello_jsp.java) (翻译)第二歩: tomcat服务器把java源文件编译成class字节码文件 (编译)(hello_jsp.java -> hello_jsp.class)
第三歩: tomcat服务器构造hello_jsp类对象
第四歩: tomcat服务器调用hello_jsp类里面方法,返回内容显示到浏览器
总结:如果页面是第一访问Jsp,执行顺序为第一步,第二步,第三步,第四步。如果是第n次访问Jsp页面,则只执行第四步。
Jsp和Servlet的声明周期对比
Servlet的生命周期构造方法(第1次访问)
init方法(第1次访问)
service方法
destroy方法
Jsp的生命周期
翻译: jsp->java文件
编译: java文件->class文件(servlet程序)
构造方法(第1次访问)
init方法(第1次访问):_jspInit()
service方法:_jspService()
destroy方法:_jspDestroy()
Jsp语法
Jsp表达式Jsp脚本
Jsp声明
hello.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'hello.jsp' starting page</title> </head> <body> <%-- Jsp脚本 :可以写Java代码 原理把脚本中java代码原封不动拷贝到_jspService方法中执行。 --%> <% String name="Tom"; %> <%-- Jsp表达式: 向浏览器输出变量的值或表达式计算的结果 注意: 1)表达式的原理就是翻译成out.print(“变量” );通过该方法向浏览器写出内容 2)表达式后面不需要带分号结束。 --%> <%=name%> <%-- Jsp声明:声明变量或方法:变量翻译成成员变量,方法翻译成成员方法。 --%> <%! String hobby="play PingPong"; public String getHobby(){ return hobby; } %> </body> </html>
翻译后的hello.java
String hobby="play PingPong"; public String getHobby(){ return hobby; } public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { ........... String name="Tom"; ........ out.print(name); ........ }
Jsp的三大指令
include指令
作用: 在当前页面用于包含其他页面 语法: <%@include file="common/header.jsp"%> 注意: 1)原理是把被包含的页面(header.jsp)的内容翻译到包含页面(index.jsp)中,合并成翻译成一 个java源文件,再编译运行!,这种包含叫静态包含(源码包含) 2)如果使用静态包含,被包含页面中不需要出现全局的html标签了!!!(如html、head、 body)
page指令
作用: 告诉tomcat服务器如何翻译jsp文件 <%@ page language="java" --告诉服务器使用什么动态语言来翻译jsp文件 import="java.util.*" --告诉服务器java文件使用什么包,导入包,多个包之间用逗号分割 pageEncoding="utf-8" --告诉服务器使用什么编码翻译jsp文件(成java文件) contentType="text/html; charset=utf-8" --服务器发送浏览器的数据类型和内容编码 注意:在开发工具中,以后只需要设置pageEncoding即可解决中文乱码问题 errorPage="error.jsp" --指定当前jsp页面的错误处理页面。 isErrorPage="false" --是否是错误页面,即能否使用Exception内置对象 buffer="8kb" --jsp页面的缓存区大小。 session="true" --false,不能用session内置对象;true,可以使用session内置对象。 isELIgnored="false" --是否使用El表达式 %>
全局配置错误页面
<!-- 全局错误处理页面配置 --> <error-page> <error-code>500</error-code> <location>/common/500.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/common/404.html</location> </error-page>
Jsp的内置对象
request HttpServletRequestresponse HttpServletResponse
config ServletConfig
application ServletContext
session HttpSession
exception Throwable
page Object(this)
out JspWriter
pageContext PageContext
Out对象
out对象类型,JspWriter类,相当于带缓存的PrintWriter。PrintWriter的 wrier(内容)方法直接向浏览器写出内容。JspWriter的writer(内容)方法: 向jsp缓冲区写出内容。当满足以下条件之一,缓冲区内容写出:
缓冲区满了
刷新缓存区
关闭缓存区
执行完毕jsp页面
pageContext对象
内置对象封装在service方法中,我们怎么在其他方法中使用这些内置对象呢?pageContext对象的类型是PageContext,叫jsp的上下文对象。public class 01_hello_jsp { public void _jspService(request,response){ 创建内置对象 HttpSession session =....; ServletConfig config = ....; 把8个经常使用的内置对象封装到PageContext对象中 PageContext pageContext = 封装; 调用method1方法 method1(pageContext); } public void method1(PageContext pageContext){ 希望使用内置对象 从PageContext对象中获取其他8个内置对象 JspWriter out =pageContext.getOut(); HttpServletRequest rquest = pageContext.getRequest(); ........ } }
使用场景: 在自定义标签的时候,PageContext对象频繁使用到!!!
Jsp的四个域对象
ServletContext context域 只能在同一个web应用中使用。(全局的)
HttpServletRequet request域 只能在同一个请求中使用(转发)
HttpSession session域 只能在同一个会话(session对象)中使用(私有的)
PageContext page域 只能在当前jsp页面中使用(当前页面)
保存数据 1)默认情况下,保存到page域 pageContext.setAttribute("name"); 2)可以向四个域对象保存数据 pageContext.setAttribute("name",域范围常量) 获取数据 1)默认情况下,从page域获取 pageContext.getAttribute("name") 2)可以从四个域中获取数据 pageContext.getAttribute("name",域范围常量) 域范围常量: PageContext.PAGE_SCOPE PageContext.REQUEST_SCOPE PageContext..SESSION_SCOPE 3)自动在四个域中搜索数据 pageContext.findAttribute("name"); 顺序: page域 -> request域 -> session域- > context域(application域)
相关文章推荐
- Servlet&JSP 第一章 Web应用程序简介
- jsp内置9大对象简介
- JSP入门简介
- jsp上传组件SmartUpload简介
- JSP中EL表达式简介
- 我与你一起学习JSP(五)——JSP 目录结构简介
- moon 14 JSP简介 及运行原理
- javaweb-05-jsp九大隐式对象简介
- JSP简介及入门(含Eclipse for Java EE及Tomcat,简易servlet的配置)
- JSP基础(一)--相关基本概念和常见Web服务器简介
- JSP简介
- JSP指令简介
- JSP简介及入门(含Eclipse for Java EE及Tomcat的配置)
- JSP:B/S技术、http协议、Tomcat服务器、jsp的九大内置对象简介
- 简介JSP与FreeMarker及Volicity区别
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之01.JDBC简介 推荐
- JSP 最佳实践: taglib简介
- JSP学习之简介
- 深入体验JavaWeb开发内幕——pageContext对象与JSP中标签的简介和相关应用
- JSP简介_赵雅智的个人总结(第八次课)