JSP
来源:互联网 发布:linux 修改文件时间戳 编辑:程序博客网 时间:2024/05/06 22:48
转自:http://blog.csdn.net/xcymorningsun/article/details/68942222?locationNum=5&fps=1
一、引言
一句话:jsp本质就是一个servlet。
程序员在开发过程中,发现Servlet做界面非常不方便,所以产生了jsp技术。JSP其实是对Servlet进行了包装而已。
jsp + Java类(service、javabean)+ servlet,就会构成mvc的开发模式,mvc模式是目前软件公司中相当通用的开发模式。
二、JSP
JSP工作原理:
当客户端浏览器向服务器请求一个 JSP 页面时,服务器收到该请求后,首先检查所请求的这个JSP 文件内容 ( 代码 ) 是否已经被更新,或者是否是 JSP 文件创建后的第一次被访问:
1. 如果是,那么,这个 JSP 文件就会在服务器端的 JSP 引擎作用下转化为一个 Servlet 类的 Java 源代码文件,这个 Servlet 类会在 Java 编译器的作用下被编译成一个字节码文件,并装载到 jvm 解释执行。剩下的就等同于 Servlet 的处理过程了。
2. 如果被请求的 JSP 文件内容 ( 代码 ) 没有被修改,那么它的处理过程也等同于一个 Servlet 的处理过程。即直接由服务器检索出与之对应的 Servlet 实例来处理。
需要注意的是,JSP 文件不是在服务器启动的时候转换成 Servlet 类的。而是在被客户端访问的时候才可能发生转换的 ( 如 JSP 文件内容没有被更新等,就不再发生 Servlet 转换 )。就 Tomcat 而言,打开目录 %Tomcat%/work/%您的工程文件目录%,然后会看到里面有 3个子目录:org/apache/jsp,若没有这 3 个目录,说明项目的 JSP 文件还没有被访问过,打开进到 jsp 目录下,会看到一些 *_jsp.java 和 *_jsp.class 文件,这就是 JSP 文件被转换成Servlet 类的源文件和字节码文件了。
jsp文件
- <%@page import="java.util.Date"%>
- <%@page language="java" pageEncoding="UTF-8"%>
-
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>showTime</title>
-
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
-
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- </head>
- <body>
- <%
- // 在<% 之间可以写我们的Java代码,就和我们在Java文件中写Java代码是一样的
- // 为什么可以直接使用out对象,因为out是jsp的内置对象
- // 内置对象就是不需要我们创建就能使用的对象,jsp有9大内置对象
- out.println("当前时间是:"+new Date().toLocaleString());
- %>
- </body>
- </html>
对应转换的servlet类中_jspService方法
- public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
- throws java.io.IOException, javax.servlet.ServletException {
-
- final java.lang.String _jspx_method = request.getMethod();
- if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
- response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
- return;
- }
-
- final javax.servlet.jsp.PageContext pageContext;
- javax.servlet.http.HttpSession session = null;
- final javax.servlet.ServletContext application;
- final javax.servlet.ServletConfig config;
- javax.servlet.jsp.JspWriter out = null;
- final java.lang.Object page = this;
- javax.servlet.jsp.JspWriter _jspx_out = null;
- javax.servlet.jsp.PageContext _jspx_page_context = null;
-
-
- try {
- response.setContentType("text/html;charset=UTF-8");
- pageContext = _jspxFactory.getPageContext(this, request, response,
- null, true, 8192, true);
- _jspx_page_context = pageContext;
- application = pageContext.getServletContext();
- config = pageContext.getServletConfig();
- session = pageContext.getSession();
- out = pageContext.getOut();
- _jspx_out = out;
-
- out.write("\r\n");
- out.write("\r\n");
- out.write("<!-- lanuage表示嵌在JSP的的片段语言是什么,pageEncoding表示本页面的编码方式是什么 -->\r\n");
- out.write("\r\n");
- out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");
- out.write("<html>\r\n");
- out.write(" <head>\r\n");
- out.write(" <title>showTime</title>\r\n");
- out.write(" <!-- 控制让浏览器不要缓存 -->\r\n");
- out.write("\t<meta http-equiv=\"pragma\" content=\"no-cache\">\r\n");
- out.write("\t<meta http-equiv=\"cache-control\" content=\"no-cache\">\r\n");
- out.write("\t<meta http-equiv=\"expires\" content=\"0\"> \r\n");
- out.write("\t<!-- keywords是让搜索引擎看的 --> \r\n");
- out.write("\t<meta http-equiv=\"keywords\" content=\"keyword1,keyword2,keyword3\">\r\n");
- out.write("\t<meta http-equiv=\"description\" content=\"This is my page\">\r\n");
- out.write(" </head>\r\n");
- out.write(" <body>\r\n");
- out.write(" ");
-
-
-
-
- out.println("当前时间是:"+new Date().toLocaleString());
-
- out.write("\r\n");
- out.write(" </body>\r\n");
- out.write("</html>\r\n");
- } catch (java.lang.Throwable t) {
- if (!(t instanceof javax.servlet.jsp.SkipPageException)){
- out = _jspx_out;
- if (out != null && out.getBufferSize() != 0)
- try {
- if (response.isCommitted()) {
- out.flush();
- } else {
- out.clearBuffer();
- }
- } catch (java.io.IOException e) {}
- if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
- else throw new ServletException(t);
- }
- } finally {
- _jspxFactory.releasePageContext(_jspx_page_context);
- }
- }
三、总结
0 0