JSP的使用
JSP(Java Server Page)是基于Java Servlet的用于开发动态Web应用的一项技术。具有简单易学和跨平台等特性。通过在HTML页面中嵌入脚本程序和各种JSP标签(包括自定义标签)从而实现动态地提供网页内容。
JSP的技术特点
- 跨平台:能够在任何Web或应用程序服务器上运行。当从一个应用平台移植到另一个应用平台时,JSP和JavaBean的代码并不需要重新编译。原因是Java的字节码是与平台无关的。(Java是跨平台的语言,能够一次编译,处处运行)
- 分离程序逻辑和界面显示:使用JSP技术开发Web应用时,开发人员可以使用HTML来设计界面,使用JSP标签和脚本语言来生成网页上的动态内容。在服务器端,JSP引擎负责解释JSP标签和脚本程序,将生成的请求内容以HTML页面的形式返回给浏览器。界面显示与程序逻辑的分离利于开发人员的分工。
- 使用标签简化页面开发:JSP中的许多功能封装在标签中,通过使用标签可以简化开发页面。使用JSP标签可以执行访问和实例化JavaBean组件、设置或检索组件属性以及下载Applet等功能。
- 组件可重用:可以利用可重用的、跨平台的组件(JavaBeans或Enterprise JavaBeans)来执行应用程序中所要求的复杂处理。组件可以分享给更多的用户使用,通过组件的使用,可以提高开发效率。
JSP运行机制
JSP运行过程:
- 当Web容器接收到用户的第一个jsp页面请求时,jsp引擎将这个jsp页面转换为java源代码(Java Servlet源程序),若在转换过程中发现jsp文件中有任何语法错误,转换过程将中断,并向服务器和客户端返回错误信息。
- 转换成功后,jsp引擎用javac将java源代码编译成相应的字节码文件*.class(一个Servlet)。然后由Servlet容器处理。
- Servlet容器加载*.class文件,创建该Servlet实例,并执行Servlet的jspInit()方法(该方法在Servlet整个生命周期中只执行一次。它的作用是可以在其里面进行一些初始化设置,诸如建立与数据库的连接、建立网络连接、获取配置文件的参数等)。
- 执行_jspService()方法来处理客户端的请求。对于每一个请求,JSP引擎都会创建一个新的线程来处理。
- 如果.jsp文件被修改了,则服务器会根据设置决定是否对该文件重新编译,如果需要重新编译则将编译后的结果取代内存中的Servlet,并继续上述过程。
- 虽然JSP的效率很高,但在第一次调用是往往由于需要转换和编译过程而产生一些轻微的延迟。此外,可能由于系统资源不足等原因,JSP容器会以某种不确定的方式将Servlet从内存中移去。在这种情况下,将会调用jspServlet()方法进行清除工作,接着Servlet实例便被加入到“垃圾收集”收集。
- 当请求处理完成后,响应对象由JSP容器接受,并将HTML格式的响应信息发送回客户端。
JSP语法
四种基本语法
- <%--注释内容--%>
- <%! 变量或方法定义 %>
- <%=表达式 %>
- <% Java代码%>
3种编译指令
<%@指令标记 [属性=”值” 属性=”值”]%>
- page指令:页面指令,用来定义JSP页面的全局属性,该配置会作用于整个JSP页面
- include指令:文件加载指令,用于在JSP文件中插入一个包含文本或代码的文件。它把文件插入后与原来的JSP合并成一个新的JSP页面。若被插入的文件发生变化,则包含这个文件的JSP文件需要被重新编译。
- tablig指令:用来引用标签库并设置标签库的前缀。这个指令允许JSP页面使用用户自定义的标签,也可以为标签库命名。
JSP四大属性作用域
- page:仅对当前请求的页面有效;
- request:仅对本次请求有效(即当前请求周期);
- session:仅对一次会话有效;
- application:在整个Web应用中都有效。
作用:实现JSP和Servlet之间的数据交换
一次用户会话:从浏览器连接服务器时开始,到浏览器与服务器断开为止的过程。
请求周期:指从http请求发起,到服务器处理结果并返回响应的整个过程。
JSP九个内置对象
为了简化Web应用程序的开发,在JSP中定义了一些由JSP容器实现和管理的内置对象,这些对象可以没有对其实例化的情况下直接在JSP中使用。它们都是Servlet API接口的实例。
内置对象名称 | 对应的类 | 作用域 |
---|---|---|
application | javax.servlet.ServletContext | application |
config | javax.servlet.ServletConfig | page |
request | javax.servlet.ServletRequest | request |
response | javax.servlet.ServletResponse | page |
pageContext | javax.servlet.jsp.pageContext | page |
out | javax.servlet.jsp.JspWriter | page |
session | javax.servlet.http.HttpSession | session |
page | java.lang.Object | page |
exception | java.lang.Throwable | page |
application对象:生命周期是从服务器启动到服务器关闭为止。封装了JSP所在Web应用中的信息。用途:如统计网页的访问量。
config对象:代表当前JSP配置信息。但在JSP中作用不大,反而在Servlet中的用处大。在Servlet初始化时,可以通过config向Servlet传递信息。用途:在编写Servlet并需要重载init()方法时使用、获取在web.xml中配置的Servlet信息。
request对象:每当客户端请求一个页面时,JSP引擎就会制造一个新的request对象来代表这个请求,该对象封装了请求的所有信息。请求结束后,则会销毁request对象。用途:获取请求头/请求参数、操作request范围内的属性、执行forward或include(代替JSP所提供的forward和include动作指令)。
response对象:响应对象,代表服务器对客户端的响应。在服务器创建request对象的同时也会创建用于响应这个客户端的response对象。通常情况下使用out对象生成相应,但在输出非字符内容时则使用response对象。用途:生成非字符响应、重定向、增加cookie等。
pageContext对象:代表页面上下文。不仅可以访问page、request、session和application四个范围内的属性,还可以访问本页面中的其他内置对象。
out对象:响应对象,代表页面输出流。一般在可以使用输出表达式的地方都可以使用out对象来达到同的效果。用途:向客户端输出各种数据。
session对象:代表一次用户会话。当打开第一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID发送给客户端,存放在Cookie中,使得session对象和客户之间建立一种一一对应的关系。当一个客户在几个页面之间反复访问、刷新,服务器也知道这是同一个客户。
page对象:是页面实例的引用,能用page的地方就可用this。
exception对象:代表JSP脚本中产生的错误和异常,是JSP页面异常机制的一部分。JSP脚本所有可能出现的异常,即使是检查异常都可以交给错误页面处理。只有在当页面是错误页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用,在一般的JSP页面中使用该对象将会导致无法编译。
当利用request.getParameter()获取提交的表单内容时,默认情况下其字符编码是ISO-8859-1,有时候这种编码不能正确显示汉字,即出现乱码。所以在获取参数前使用request的setCharacterEncoding()方法来设置编码格式。
网友评论