大家好,我是IT修真院郑州分院第11期的JAVA学员周宏浩,一枚正直纯洁善良的java程序员。
今天给大家分享一下,什么是jsp?。
1.背景介绍
JSP全名为Java Server Pages,中文名叫java服务器页面,JSP是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。它实现了Html语法中的java扩展(以 <%, %>形式)。
JSP的根本是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
2.知识剖析
1.jsp工作原理是什么?
1)当客户第一次请求JSP页面时,JSP引擎会通过预处理把JSP文件中的静态数据(HTML文本)和动态数据(Java脚本)全部转换为Java代码。
2)JSP引擎把生成的.java文件编译成Servlet类文件(.class)。对于Tomcat服务器而言,生成的类文件默认的情况下存放在\work目录。
3)编译后的class对象被加载到容器中,并根据用户的请求生成HTML格式的响应页面。
2.jsp九大内置对象
1)request内置对象是最常用的对象之一,它代表的是java.servlet.HttpServletRequest类的对象。request内置对象中包含了有关浏览器请求的信息,并提供了多个用于获取cookie、header以及session内数据的方法。
2)response对象与request对象相对应,它是用于响应客户请求,向客户端输出信息。response是javax.servlet.HttpServletResponse类的对象。response对象提供了多个方法用来处理HTTP响应,可以调用response中的方法修改ContentType中的MIME类型以及实现页面的跳转等。
3)page对象有点类似于Java编程中的this指针,就是指当前JSP页面本身。page是java.lang.Object类的对象。
4)session是与请求有关的会话期,它是java.servlet.http.HttpSession类的对象,用来表示和存储当前页面的请求信息。
5)application是javax.servlet.ServletContext类对象的一个实例,用于实现用户之间的数据共享,application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。
6)out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
7)exception内置对象是用来处理页面出现的异常错误,它是java.lang.Throwable类的一个对象。Jsp页面文件必须在isErrorPage=true的情况下才可以使用该对象;该对象一般配合Page指令一起使用,通过指定某个页面为错误处理页面,把所有的错误都集中到那个页面进行处理,可以使整个系统的性能得到加强。
8)config内置对象是ServletConfig类的一个实例。在Servlet初始化的时候,JSP引擎通过config向它传递信息。这种信息可以是属性名/值匹配的参数,也可以是通过ServletContext对象传递的服务器的有关信息。
9)pageContext对象是一个比较特殊的对象。它相当于页面中所有其他对象功能的最大集成者,即用它可以访问到本页面中所有其他对象。
3.jsp四大作用域
1)如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
2)如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
3)如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话。
4)如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户共用。
3.常见问题
1.jsp连接db及curd操作
2.jsp页面之间的引用及变量作用域
4.编码实战
5.扩展思考
1.JSP与HTML的区别
1) HTML能直接打开,jsp只能发布到Tomact等服务器上才能打开 。
2) 定义上HTML页面是静态页面可以直接运行,JSP页面是动态页它运行时需要转换成servlet。
3) 他们的表头不同,这个是JSP的头“ <%@ page language=”java” import=”java.util.*” pageEncoding=”gbk”%>”在表头中有编码格式和导入包等。
4) jsp中用<%%>就可以写Java代码了,而html没有<%%>。
2.为什么一般不建议在jsp中写java代码?
1) 可读性很差,<% ..%>将java代码和html都写在一起,并且还要尖括号的表达式,看起来很复杂难懂。
2) jsp难于调试,不能进行单元测试,不能进行debug,可维护性差。
3) jsp内写java代码,安全性低,代码都在jsp中可以被看到。
3.jsp中的<%@include…@%>和tiles有什么区别?
如果我们一个网站的布局基本一致,这个时候,我们最好定义一个模板,如layout.jsp包括header,footer,content;content下面又包含其他页面部分,如果我们不使用tiles,则在每个页面按位置 用include引入相关的页面,当页面布局发生改变的时候,我们去掉不需要的一部分,这个时候需要到每个页面上去删除相应的include语句;但如果我们采用tiles的话,就只需要更改layout.jsp就行了。
tiles为了规范网站布局,通过复用基础模板,其他页面继承基础模板这个机制,当有成千上万的页面的时候,tiles框架的页面管理机制使布局维护更简单。
6.参考文献
https://blog.csdn.net/kyi_zhu123/article/details/54381221
http://www.iteye.com/topic/574788
https://www.cnblogs.com/mengzhen123/p/5968831.html
7.更多讨论
1.JSP和servlet区别
jsp是先部署后编译,而servlet是先编译后部署。
2.JSP的缺点
(1)增大了服务器的压力。
(2)过于依赖java运行环境。
(3)复用较低。
3.EL表达式可以用在ajax中吗?
不能,EL表达式只能用在jsp页面中。