JSP小结

1. JSP的概念

  • JSP 是 Sun Microsystems 公司的一种规范,它将 Java 与 HTML 相结合
  • JSP 是使用Java 开发基于 Web 的应用程序不可或缺的部分
  • JSP 可结合其他Java 组件一起使用

2. JSP运行方式

  • 在浏览器输入:http://www.ysu.edu.cn,此时浏览器向服务器发送请求。
    • url包括4部分:http(协议)、主机名(ysu.edu.cn)、端口号(http默认80)、文件名(缺省情况下会给,比如index.htm)
    • Web Server处理Http请求
    • 将文件内容(html)返回

  • Web Server只能处理html请求,如果请求的是jsp文件,此时,需要增加Application Server,Web Server把请求转发给Application Server

    • Application Server处理jsp请求,将处理结果以html的形式返回给Web Server。
    • Web Server将结果返回给浏览器

  • Application Server在接收到jsp(test.jsp)请求后
    • 将test.jsp转换为纯Java程序test_jsp.java
    • 编译test_jsp.java,生成类文件,test_jsp.class
    • 生成test_jsp类的对象(该对象处理客户端请求)
    • 将该对象初始化(调用该对象的init()方法)
    • 处理请求,返回html (调用该对象的service()方法)
    • 该对象一直存在,直到Application Server退出
  • 由上述处理过程可知,在第一次访问test.jsp文件后,就创建了该类的对象提供服务,因此,从第二次访问开始,将直接执行service()方法,无需重复创建

  • 一个JSP程序的执行经历了初始化、服务、退出三个步骤。
    • init() 初始化
    • service() 执行服务
    • destroy() 退出
  • 当一个JSP程序要运行时,首先被编译为一个Servlet,作为一个Servlet运行。
  • Servlet声明周期

  • JSP的优点
    • 编写一次,随处运行(和java一样)
    • 组件和标记库的重用
    • 动态内容与静态内容的分离
    • 对脚本和动作的支持
    • 多层企业应用程序体系结构的 Web 访问层
    • 表示与实现的分离
    • 持久性,只加载一次,与CGI、ASP相比速度快(最关键)

3. JSP指令

3.1 JSP简介

  • 将有关页面的特殊处理信息传送到JSP容器
<%@ directive-name
  attribute-name=attribute-value
  attribute-name=attribute-value …
%>

3.2 Jsp 类型

  • include 指令

    • 使页面能将一个文件的内容包括在另一个文件中
    • <%@ include file="localURL" %>
    • 出现在一个 JSP 页面中的 include 指令的数量不受限制
  • page 指令

    • page 指令将页面特定的信息传递给 JSP 引擎

    • <@ page attribute = "value1"
      attribute2 = "value2" attribute3 =… %>
      
      
    • page 属性

      • info
      • language 一般写java
      • contentType 内容类型, text/html等
      • extends 由哪些类派生
      • import 导入包
      • session
      • buffer
      • autoFlush
      • isThreadSafe
      • errorPage 错误由谁处理
      • isErrorPage 表明当前页面是否为异常处理界面
  • taglib 指令

    • 通知 JSP 容器,页面依赖于自定义标记库

    • 标记库是扩展 JSP 的功能的自定义标记的集合

    • <%@ taglib uri = "tagLibraryURI" 
      		     prefix = "tagPrefix" %>
      
      

4. JSP脚本元素

  • 使开发者能直接将代码嵌入 JSP 页面

  • 类型:

    • 声明

    • 代码段

    • 表达式

4.1 声明<%! declaration %>

  1. 用于定义特定于 JSP 页面的变量和方法

  2. 语法:<%! declaration %>

  3. 声明的类型

    • 变量声明

      • 定义为声明的变量成了 JSP 页面被转换和编译到的 servlet 类的实例变量

      • <%!
        		private int x=0, y=0; 
        		String name = ""; 
        %>
        
    • 方法声明

      • 定义的方法将编译成的 Servlet 类的方法

      • 可以由页面上所有脚本元素访问

      • <%! 
        	public int max (int x,int y) {
            if (x > y )
               return x ;
            else
               return y ;
         }  
        %>
        
        
    • –或者是一个内部类

4.2 表达式<%= expression %>

  1. 包含任何语言表达式
  2. 语法: <%= expression %>
  3. 不以分号结束
  4. 用于输出单个变量或某个计算的结果
    • <%= 5 * 6 %>

4.3 代码段<% code %>

  1. 包含一个或多个有效而完整的语句

  2. 语法: <% // 这里是 Java 代码 %>

  3. 只要是合法即可,不一定非要完整,如下

  4. <%
    	String name= null;
    	name = request.getParameter(“name”);
    	if(name == null) 
    	{
    %>
    

4.4 三者的区别(Target)

  • 变量声明后面必须带分号
  • 表达式可以包含任何语言表达式,并不以分号结束
  • 代码段中,如果语言要求语句以分号结束,则必须提供分号
  • Jsp程序最终会转换为 java程序,这三者转换之后的代码是不一样的

下面,我们通过具体的代码,分析表达式,代码段,以及变量声明的区别

<%@ page language="java"%>
<%!
int declareVar = 10;
int max(int x, int y) {
	return x > y ? x : y;
}
int maxArray(int[] a) {
	int ret = a[0];
	for (int i = 1; i < a.length; i ++ ) {
		ret = max(ret, a[i]);
	}
	return ret;
}
String PrintArray(int []a) {
	String ret = "The array info:a[0]=" + a[0];
	for (int i = 1; i < a.length; i ++ ) {
		ret = ret + " ,a[" + i + "]="   + a[i];
	}
	return ret;
}
%>
<%
int codeSegVar = 0;
%>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CalMax</title>
</head>

<body>
<%
	int[] a = new int[5];
	a[0] = 3;	a[1] = 7;
	a[2] = -10;	a[3] = 10;
	a[4] = 8;
%>
<%=PrintArray(a)%><br />	  	<!--输出原数组的信息  -->
<%PrintArray(a);%><br />
<% int t = 3+5; %>
<%= 3 + 5 %>


Max=<%=maxArray(a)%>			<!--不以分号结束-->
</body>
</html>

在上述代码中,我们引入了在 声明脚本元素中,声明变量、函数,

在代码段中声明声明变量和运行函数

在表达式中运行函数,做一些简单的运算,下面我们查看一下运行的结果。

同时我们发现一个有趣的事情 5 + 6; 13; 直接放在java里面是会报错的!!

通过阅读编译之后的java 文件可以发现

  • 声明的语句直接放在类面的,而且他们不是protected public private这三种,而是java里面的第四种,缺省

  • 表达式和代码段都是放在主函数里,但是表达式 直接输出到了 html 里面
  • 然后代码段却是作为了service函数中的语句, service函数中前面有介绍,处理请求调用的是service方法
  • 我们输出的规则,其实就是他们作为java文件中组成成分的规则

由此,我们不难辨别,在声明中声明变量和在代码段中声明变量的区别:

  • 在声明中声明变量是 方法变量
  • 在代码段中声明变量属于局部变量

5. 使用TomCat进行检验

求数组的最大值

<%@ page language="java"%>
<%!
int max(int x, int y) {
	return x > y ? x : y;
}
int maxArray(int[] a) {
	int ret = a[0];
	for (int i = 1; i < a.length; i ++ ) {
		ret = max(ret, a[i]);
	}
	return ret;
}
String PrintArray(int []a) {
	String ret = "The array info:a[0]=" + a[0];
	for (int i = 1; i < a.length; i ++ ) {
		ret = ret + " ,a[" + i + "]="   + a[i];
	}
	return ret;
}
%>

<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CalMax</title>
</head>

<body>
<%
	int[] a = new int[5];
	a[0] = 3;	a[1] = 7;
	a[2] = -10;	a[3] = 10;
	a[4] = 8;
%>
<%=PrintArray(a)%><br />	  	<!--输出原数组的信息  -->
Max=<%=maxArray(a)%>
</body>
</html>


安装TomCat的话,参考下面链接

TomCat下载 配置教程

下面我们讨论一下如何运行

  1. windows + r --> services.msc 进入服务之后,我们打开Apache Tomcat的那个服务

  2. 服务打开之后

    • 我们将写好的 文件名.jsp 文件复制到 Tomcat安装目录下面的
      • webapps -> ROOT -> 里面即可
  3. 之后,我们打开任意浏览器输入

    • localhost:8086/文件名.jsp 回车即可

    • 注: localhost:8086可以直接进入,查看tomcat是否安装成功

  4. 最后,我们可以查看 JSP文件生成的 Java文件和 class 文件

    • 文件在安装 tomcat 目录下面的word文件夹
    • workCatalinalocalhostROOTorgapachejsp
原文地址:https://www.cnblogs.com/lucky-light/p/14477075.html