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文件夹
    • work\Catalina\localhost\ROOT\org\apache\jsp
posted @   lucky_light  阅读(159)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示