JSP 基础(一)

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 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11
12     <title>My JSP 'index.jsp' starting page</title>
13     <meta http-equiv="pragma" content="no-cache">
14     <meta http-equiv="cache-control" content="no-cache">
15     <meta http-equiv="expires" content="0">
16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
17     <meta http-equiv="description" content="This is my page">
18     <!--
19     <link rel="stylesheet" type="text/css" href="styles.css">
20     -->
21   </head>
22
23   <body>
24     <%
25          out.print("Hello Jsp");
26     %>
27   </body>
28 </html>

执行了上面的这个.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("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");
63       out.write("<html>\r\n");
64       out.write("  <head>\r\n");
65       out.write("    <base href=\"");
66       out.print(basePath);
67       out.write("\">\r\n");
68       out.write("    \r\n");
69       out.write("    <title>My JSP 'index.jsp' starting page</title>\r\n");
70       out.write("\t<meta http-equiv=\"pragma\" content=\"no-cache\">\r\n");
71       out.write("\t<meta http-equiv=\"cache-control\" content=\"no-cache\">\r\n");
72       out.write("\t<meta http-equiv=\"expires\" content=\"0\">    \r\n");
73       out.write("\t<meta http-equiv=\"keywords\" content=\"keyword1,keyword2,keyword3\">\r\n");
74       out.write("\t<meta http-equiv=\"description\" content=\"This is my page\">\r\n");
75       out.write("\t<!--\r\n");
76       out.write("\t<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">\r\n");
77       out.write("\t-->\r\n");
78       out.write("  </head>\r\n");
79       out.write("  \r\n");
80       out.write("  <body>\r\n");
81       out.write("    ");
82
83          out.print("Hello Jsp");
84
85       out.write("\r\n");
86       out.write("  </body>\r\n");
87       out.write("</html>\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("<h1>Sum="+sum+"</h1>");
10
11       out.print("Hello Jsp");
12     %>

 

  4.2 脚本表达式

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

               <%= 变量或表达式 %>

eg:

 

 1 <body>
 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     <div class="red"><%=temp%></div>
20
21     <%
22              }
23         }
24     %>
25     <div class="blue"><%=r.nextInt(16) + 1%></div>
26 </body>

 

 

 

 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隐式对象

 

时间: 2024-11-29 16:48:43

JSP 基础(一)的相关文章

jsp基础语法 一 scriptlet

jsp作为WEB的开发基础,有其重要的地位,那么熟练掌握JSP的语法及应用就成了重中之重. 首先我们一起先从JSP的基本语法学起:(以下内容来自李兴华视频手稿整理) scriptlet简介 script表示的是脚本小程序,像之前out.println()这个语句是缩写在<%%>之中的,很明显,这里面 缩写的语句就是一个script. 在jsp中最重要的部分就是Scriptlet(脚本小程序),所有嵌入在HTML代码中的java程序都必须使用 Scriplet标记出来,在jsp中一共有三种scr

jsp基础语法 六 jsp+jdbc访问数据库

学习过了jsp基础语法以及HTML和javascript的用法之后,jsp+jdbc连接数据库开发动态WEB网页就可以实现了. 对于学过java SE的同学来说,数据库的操作并不陌生,如果有忘记的或者不会的可以到http://zhaoyuqiang.blog.51cto.com/6328846/1127658  学习. jsp中的数据库连接又是如何呢? 怎样才能利用上我们学过的HTML和javascript的知识呢? 这就是我们这一篇文章的学习内容----jsp+jdbc访问数据库. 我们就以一

jsp基础语法 五 跳转指令

跳转的作用: 使用跳转指令可以将一个用户的请求,从一个页面传递到另外一个页面. 例如:用户登录QQ空间,如果用户名和密码正确的话就会跳转到空间首页,否则就会跳转到失败页. 跳转指令的语法: 不传递参数   <jsp:forward page=""/> 传递参数:  <jsp:forward page=""> <jsp:param name="参数名称" value="参数内容"> </

jsp基础语法 四 包含指令

什么是包含: 在页面开发的时候,一些代码难免会有重复使用的情况,比如说A页面有一段代码a,B页面和C页面都能用到a这段代码,那么B和C页面就把A页面包含进来,自然的a这段代码也被包含进BC页面了,这样就实现了B.C页面能用到a代码了,避免了重复的书写a代码. 包含的意义: 使用包含操作,可以将一些重复的代码包含进来继续使用. 一般分为如上四个区域. 真正在改变的地方只是具体内容,因为根据不同的用户浏览的不同,那么肯定这上面会存在差别  现在就有两种做法实现以上一种功能 方法一:在没有一个jsp页

jsp基础语法 三 page指令

page指令 page指令是在jsp开发中较为重要,使用此属性,可以定义一个jsp页面的相关属性,包括 设置MIME类型.定义需要导入的包.错误页的指定等 page指令的语法:<%@ page 属性="内容"%> page的主要属性: 设置MIME 先来观察一道程序: <html> <head> <title> New Document </title> </head> <body> <cente

jsp基础语法 二 注释的使用

我的一个同学问我,java中有"//"这个样的注释,用起来挺方便的,jsp的注释难道不是这个吗?用"//"在jsp中不行. 对于学习了这么长时间的jsp,注释是最基本的.jsp中的注释不同于java. 在jsp中支持两种注释,一种是显示注释,这种注释客户端是允许看见的,另外一种注释是隐式注释,此种注释客户端是无法看见的. 显示注释语法: <!--注释内容--> 隐式注释语法: 格式一:// 注释,单行注释: 格式二:  /* 注释 */,多行注释: 格式

JSP基础与提高(一)

JSP基础 JSP的由来 1.1. 为什么有JSP规范 Servlet技术产生以后,在使用过程中存在一个很大的问题,即为了表现页面的效果而需要输出大量的HTML标签,这些标签在Servlet中表现为一个个的字符串常量.这种输出页面的方式不仅仅增加了开发时对页面的控制难度,也不利于后期的维护. 为了能够将Servlet中用于表现的功能分离出来,提高视图的开发效率,推出了JSP这种技术,主要用于将Servlet中负责显示的语句抽取出来. 1.2. 什么是JSP JSP(Java Server Pag

JSP基础--JAVA遇见HTML

1.手工编写第一个WEB应用程序 2.默认访问服务器网页首页欢迎界面是 index.jsp,就是网页链接访问其所在的文件夹目录,不访问这个文件,也会自动访问的.如果这个文件夹目录下没有index.jsp或者有其他的比如 xx.jsp 链接直接访问这个 xx.jsp 也是没有用.换句话说,默认首页欢迎界面 就是 index.jsp 然后如果要修改默认首页欢迎界面,方法如下: 打开这个web.xml文件,然后添加以下代码: 1 <welcome-file-list> 2 <welcome-f

JSP基础2

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*" errorPage="" %> <html> <head> <title>JSP练习</title> </head> <%! int count = 0; //当一个线程调用时,另