博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP 基础(一)
阅读量:7053 次
发布时间:2019-06-28

本文共 6333 字,大约阅读时间需要 21 分钟。

JavaServletPage(JSP)

一 JSP简介

      Servlet的缺陷
      –Servlet的编码、部署和调试任务繁琐
      –生成动态网页繁琐,不利于项目分工
    为了弥补Servlet的这些缺陷,SUN公司在Servlet的基础上推出了JSP技术作为解决方案
 
    采用JSP技术编写动态页面  
     –由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件
     –JSP页面的扩展名必须为.jsp
 

二 JSP运行机制与生命周期

JSP的执行包括7个阶段

 2.1 JSP页面翻译阶段:Web容器第一次接收到某个JSP页面的请求后,首先把自动将该页面翻译成Servlet代码。

  

1 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6  7  8  9   10     11     12     My JSP 'index.jsp' starting page13     
14
15
16
17
18
21 22 23 24 <%25 out.print("Hello Jsp");26 %>27 28

执行了上面的这个.jsp后,会在D:\apache-tomcat-6.0.20\work\Catalina\localhost\项目名\org\apache\jsp下发现一个index_jsp.class文件和一个index_jsp.java文件

打开java文件

1 package org.apache.jsp; 2  3 import javax.servlet.*; 4 import javax.servlet.http.*; 5 import javax.servlet.jsp.*; 6 import java.util.*; 7  8 public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase 9     implements org.apache.jasper.runtime.JspSourceDependent {10 11   private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();12 13   private static java.util.List _jspx_dependants;14 15   private javax.el.ExpressionFactory _el_expressionfactory;16   private org.apache.AnnotationProcessor _jsp_annotationprocessor;17 18   public Object getDependants() {19     return _jspx_dependants;20   }21 22   public void _jspInit() {23     _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();24     _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());25   }26 27   public void _jspDestroy() {28   }29 30   public void _jspService(HttpServletRequest request, HttpServletResponse response)31         throws java.io.IOException, ServletException {32 33     PageContext pageContext = null;34     HttpSession session = null;35     ServletContext application = null;36     ServletConfig config = null;37     JspWriter out = null;38     Object page = this;39     JspWriter _jspx_out = null;40     PageContext _jspx_page_context = null;41 42 43     try {44       response.setContentType("text/html;charset=ISO-8859-1");45       pageContext = _jspxFactory.getPageContext(this, request, response,46                   null, true, 8192, true);47       _jspx_page_context = pageContext;48       application = pageContext.getServletContext();49       config = pageContext.getServletConfig();50       session = pageContext.getSession();51       out = pageContext.getOut();52       _jspx_out = out;53 54       out.write('\r');55       out.write('\n');56 57 String path = request.getContextPath();58 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";59 60       out.write("\r\n");61       out.write("\r\n");62       out.write("\r\n");63       out.write("\r\n");64       out.write("  \r\n");65       out.write("    \r\n");68       out.write("    \r\n");69       out.write("    My JSP 'index.jsp' starting page\r\n");70       out.write("\t
\r\n");71 out.write("\t
\r\n");72 out.write("\t
\r\n");73 out.write("\t
\r\n");74 out.write("\t
\r\n");75 out.write("\t
\r\n");78 out.write(" \r\n");79 out.write(" \r\n");80 out.write(" \r\n");81 out.write(" ");82 83 out.print("Hello Jsp");84 85 out.write("\r\n");86 out.write(" \r\n");87 out.write("\r\n");88 } catch (Throwable t) {89 if (!(t instanceof SkipPageException)){90 out = _jspx_out;91 if (out != null && out.getBufferSize() != 0)92 try { out.clearBuffer(); } catch (java.io.IOException e) {}93 if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);94 }95 } finally {96 _jspxFactory.releasePageContext(_jspx_page_context);97 }98 }99 }

 

 2.2 JSP页面编译阶段:index_jsp.java文件编译成index_jsp.class文件。

 2.3 JSP页面类装载阶段:Web容器装载新生成的Servlet类。

 2.4 JSP页面实例化阶段:Web容器创建实例。

 2.5 JSP页面初始化阶段:web容器调用Servlet示例的_jspInit()方法。

 2.6 JSP页面服务阶段:容器创建一个新线程来处理客户的请求,Servlet对象的_jspService()方法运行。

 2.7 JSP页面的销毁:servlet对象的_jspDestory()方法。 

如果一个Web应用程序中包含有JSP页面,部署这个应用时,在JSP生命周期中,整个翻译和编译步骤只发生一次。JSP一旦被翻译和编译,就像其他Servlet一样了。其实只有在第一次执行的时候有性能上的差别。

JSP通常用于简化创建产生文本的Servlet,二Servlet更适合用于发送原生字节到客户端或所需要用java源代码完全控制源代码的场合。

三 JSP语法与语义

   JSP网页主要有元素(Element)和模板数据(Template Data)两部分组成。

  元素可以分成三个不同的类别:脚本元素,指令,动作。(下面进行解释) 

四 脚本元素

 在JSP中有三种不同类型的脚本元素:scriptlet,脚本表达式,声明。

  4.1 Scriptlet     

JSP脚本片断(scriptlet)用于在JSP页面中编写多行Java代码。语法格式:

    <%  多行java代码  %>

  在<% %>中可以定义变量、编写语句,不能定义方法。

eg:

1  <% 2       /*声明变量*/  3       int sum=0; 4   5      /*编写语句*/ 6      for (int i=1;i<=100;i++){ 7          sum+=i; 8     } 9       out.println("

Sum="+sum+"

");10 11 out.print("Hello Jsp");12 %>

 

  4.2 脚本表达式

 JSP脚本表达式(expression)用于将程序数据输出到客户端。语法:

               <%= 变量或表达式 %>

eg:

 

1  2  3     <% 4         int[] balls = new int[6]; 5         Random r = new Random(); 6         for (int i = 0; i < 6;) { 7             boolean flag = true; 8             int temp = r.nextInt(33) + 1; 9             for (int j = 0; j <= i; j++) {10                 if (balls[j] == temp) {11                     flag = false;12                     break;13                 }14             }15             if (flag) {16                 balls[i] = temp;17                 i++;18     %>19     
<%=temp%>
20 21 <%22 }23 }24 %>25
<%=r.nextInt(16) + 1%>
26

 

 

 

 JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(…) 将数据输给客户端。

JSP脚本表达式中的变量或表达式后面不能有分号(;)

4.3 声明

   JSP页面中编写的所有代码,默认会翻译到servlet的service方法中, 而Jsp声明中的java代码被翻译到_jspService方法的外面。语法:

    <%! java代码  %>
  所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法 。 
  多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。
  JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象。

可以在JSP程序中声明一个或多个变量。但是每一个声明语句都必须以分号结束

eg:

1 <%! String s="hello"; %>2 <%! int a,b,c; %>3 <%! java.util.Date date=new java.util.Date(); %>

 

1 <%!2         public void method(){3                 4         }5      %>

 

五 注释 

六 JSP指令

七 JSP标准动作

八 JSP隐式对象

 

转载于:https://www.cnblogs.com/hellokitty1/p/4939230.html

你可能感兴趣的文章
锋利jquery第三章案例 总结
查看>>
Cocos Creator Animation 组件
查看>>
RH033读书笔记(1)-Lab2 Linux Usage Basics
查看>>
window对象 (浏览器对象模型)
查看>>
Loadrunner 关于参数赋值取值的操作
查看>>
C# 实现保留两位小数的方法
查看>>
Http协议4个新的http状态码:428、429、431、511;
查看>>
C#类型简述
查看>>
Go:字符串操作
查看>>
EXCEL 2010学习笔记 —— VLOOKUP函数 嵌套 MATCH 函数
查看>>
android graphics: 2D animation
查看>>
升级 python 2.6.6 系统到 2.7.10 版本
查看>>
start with connect by prior 递归查询用法
查看>>
OS X 10.11 安装Cocoapods
查看>>
MATLAB测试机器零阈值的大小
查看>>
优化查询
查看>>
odoo开发笔记-自定义发送邮件模板
查看>>
19、集合概述
查看>>
茄子烧豆角
查看>>
Jmeter(三)-简单的HTTP请求(非录制)
查看>>