深入理解JSP 小咪咪 2022-08-20 03:21 170阅读 0赞 JSP(Java server page)是Java EE规范最基本成员,他是Java Web开发的重点知识,虽然我们一直在用,但其原理知之甚少。今天重点研究一些JSP核心内容以及其工作原理。 JSP和Servlet的本质是一样的,因为JSP最终需要编译成Servlet才能运行,换句话说JSP是生成Servler的草稿文件。 JSP比较简单,就是在HTML中嵌入Java代码,或者使用JSP标签,包括使用用户自定义标签,从而可以动态的提供内容。早起JSP应用比较广泛,一个web应用可以全部由JSP页面组成,只需要少量的JavaBean即可,但是这样导致了JSP职责过于复杂,这是Java EE标准的出现无疑是雪中送炭,因此JSP慢慢发展成单一的表现技术,不再承担业务逻辑组件以及持久层组件的责任。 ## JSP基本原理 ## JSP的本质是servlet,当用户指定servlet发送请求时,servlet利用输出流动态生成HTML页面。由于包含大量的HTML标签。静态文本等格式导致servlet的开发效率极低,所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在Java代码中,起静态的部分无需Java程序控制,只有那些需要从数据库读取或者需要动态生成的页面内容才使用Java脚本控制。 ### 因此JSP页面内容有以下两部分组成 ### 静态部分:HTML标签 动态部分:Java脚本 ## JSP的4种基本语法 ## ### JSP注释 ### JSP注释用于标注程序开发过程中的开发提示,不会输出到客户端。<%-- 注释内容 --%> ### JSP声明 ### JSP声明用于声明变量和方法,在JSP中声明方法看起来很特别,似乎不需要定义类就可以直接定义方法,方法似乎可以脱离类独立存在。实际上JSP声明会转换成servlet的成员变量或成员方法,因此JSP声明仍然符合Java语法。<%! 声明部分 %> 输出JSP表达式 <%=表达式 %> ### JSP脚本 ### 以前JSP应用非常广泛,通俗点讲任何可以执行的Java代码都可以通过JSP脚本嵌入到HTML页面中。<% Java脚本 %> ## JSP的3个预编译指令 ## ### page指令 ### 该指令是针对当前页面的指令,通常位于JSP页面的顶端,一个JSP页面可以使用多条page指令。 ### include指令 ### 用于指定包含另一个页面的指令,使用include指令可以将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP。include即可以包含静态文本,又可以包含动态JSP页面。 ### taglib指令 ### 用于定义和访问自定义标签。 ## JSP的7个动作指令 ## ### forword指令 ### 用于将页面响应转发到另一个页面,既可以转发到静态的HTML,也可以转发到动态的JSP页面,或者转发到容器中的servlet。 ### param指令 ### 用于执行参数,必须与其支持参数的标签一起使用。本身不能单独使用,因为单独的param指令没有实际意义。 ### include指令 ### 用于动态引入一个JSP页面,它是一个动态include指令,也用于包含某个页面,不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。 ### plugin指令 ### 用于下载JavaBean或applet到客户端执行。 ### useBean指令 ### 创建一个JavaBean的实例 ### setProperty指令 ### 设置JavaBean实例的属性值 ### getProperty指令 ### 输出JavaBean实例的属性值 ## JSP脚本中的9个内置对象 ## ### application对象 ### javax.servlet.ServletContext的实例,该实例代表JSP所属的web应用本身,可以用于JSP页面,或者servlet之间交换信息。 ### config对象 ### javax.servlet.ServletConfig的实例,该实例代表JSP的配置信息 ### exception对象 ### java.lang.Throwable的实例,该实例代表其他页面中的异常和错误。 ### out对象 ### javax.servlet.jsp.JspWriter的实例,该实例代表JSP的输出流,用于输出内容,形成HTML页面。 ### page对象 ### 代表页面本身,通常没有太大用处。 ### pageContext对象 ### javax.servlet.jsp.PageContext的实例。该对象代表JSP页面的上下文,使用该对象可以访问页面中的共享数据。 ### request对象 ### javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端请求的参数都被封装在这个对象里。 ### response对象 ### javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的响应,通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。 ### session对象 ### javax.servlet.http.HttpSession的实例,该对象代表一次会话,当客户端浏览器与站点连接时,会话开始,当客户端关闭浏览器是会话结束。
还没有评论,来说两句吧...