JavaEE学习之路—–JSP(一)

本文介绍了JSP的基本原理及其四种基本语法,包括JSP注释、声明、输出表达式和脚本。JSP作为HTML中嵌入Java代码的方式,能够实现动态网页的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. JSP的基本原理

JSP的本质是Servlet,JSP的出现弥补了Servlet所有的表现逻辑都必须耦合在Java代码中的不足,JSP通过在标准的HTML页面中嵌入Java代码,其静态部分不需要Java程序控制,只有那些需要从数据库读取或需要动态生成的页面内容,才使用Java脚本控制。

JSP主要由两部分组成:

  • 静态部分:标准的HTML标签、静态的页面内容,这些内容与静态HTML页面相同。
  • 动态部分:收Java程序控制的内容,这些内容由Java脚本动态生成。
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<html>
    <head>
        <title>欢迎</title>
    </head>
    <body>
        欢迎学习Java Web知识,现在时间是:
        <%out.println(new java.util.Date());%>
    </body>
</html>

在上面的JSP代码中,<%和%>之间的是Java脚本,通过这种方式把Java代码嵌入到HTML页面中,就成了动态的JSP页面。

因为JSP本质上是一个Servlet,因此JSP必须放在Web项目中并且部署到Web容器中才能被客户端浏览器访问。JSP看似脱离了Java类,但是其实JSP只是一个简化了的Servlet,JSP页面都会由Web容器生成相应的Servlet。

总结:

  • JSP文件必须在JSP服务器内运行。
  • JSP文件必须生成Servlet才能执行。
  • 每个JSP页面的第一个访问着速度很慢,因为必须等待JSP编译成Servlet。
  • JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的环境,因为JSP页面输送到客户端的是标准的HTML页面。

2. JSP的四种基本语法

既然JSP是HTML中嵌入Java代码,那么JSP的编写也大致分两步走:

  • 编写一个静态HTML页面;
  • 在页面合适的位置嵌入Java代码。

2.1 JSP基础语法一 —– JSP注释

跟其他语言的注释一样,JSP注释只是提供给开发人员参考的开发提示,不会输出到客户端。
JSP注释格式:

<%-- 注释内容 --%>

与之形成对比的是HTML的注释:

<!-- 注释内容 -->

JSP和HTML注释的区别除了写法不同外还有:JSP注释不会输出到客户端,但HTML注释虽然不会显示到界面,但是在客户端浏览器的源代码中看到。

2.2 JSP基本语法二 —– JSP声明

JSP声明用于声明变量和方法,JSP声明将会转换成Servlet的成员变量或成员方法。
JSP声明的语法格式如下:

<%! 声明部分 %>

下面看个实例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<%! public int count;
    public String info() {
        return "hello";
    }
%>
<body>
    <%out.println(count++);%>
    <%out.println(info()); %>
</body>
</html>

在上面的JSP页面中声明了一个成员变量和一个成员方法,并输出了成员变了的值和成员方法的返回结果。也面每刷新一次,成员变量的值增加一次,这是因为:JSP页面会被编译成一个Servlet类,每个Servlet在容器中只有一个实例;在JSP中声明的变量是成员变量,成员变量只是在创建实例时初始化,该变量的值将一直保存,直到实例销毁。
info()方法实际上是Servlet实例中的方法,Java里的方法是不能独立存在的,即使实在JSP中也不行。

2.3 JSP基础语法三 —– 输出JSP表达式

JSP提供了一种输出表达式值的简单方法,输出表达式值的语法格式如下:

<%=表达式%>

表达式实例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<%! public int count;
    public String info() {
        return "hello";
    }
%>
<body>
    <%=count++ %>
    <%=info() %>
</body>
</html>

由此可见可以直接使用表达式输出,输出表达式结果。

2.4 JSP基础语法四 —– JSP脚本

JSP脚本里可以包含任何可执行的Java代码,通常来说,所以可执行的Java代码都可以通过JSP脚本嵌入到HTML页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table bgcolor="#cccccc" border="1">
<% for(int i = 0;i < 10;i++) {%>
    <tr>
        <td>循环值</td>
        <td><%=i %></td>
    </tr>
<%} %>
</table>

</body>
</html>

上面的代码实例,使用JSP脚本控制HTML静态内容,循环生成了10行的表格,并在表格中输出表达式的值。

在JSP小脚本处也能声明变量,但是在JSP小脚本出声明的变量是局部变量,不能使用访问控制符:public、private等修饰,也不能使用static修饰。
JSP脚本中的内容会被编译到_jspServer方法中,由于Java中不允许方法中定义方法,所以JSP脚本中不能定义方法。

JSP脚本中可包含任何可执行Java语句,比如连接数据库和数据库操作:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
    // 注册数据库驱动
    Class.forName("com.mysql.jdbc.Driver");
    // 获取数据库连接
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/javaee","root","123456");
    // 创建Statement
    Statement stmt = conn.creatStatement();
    // 执行查询
    ResultSet rs = stmt.executeQuery("select * from news_inf");
%>
<%
    while(rs.next()) {

%>
<%
        <tr>
            <td><%=rs.getString(1) %></td>
            <td><%=rs.getString(2) %></td>
        </tr>
    }
%>
</body>
</html>

使用上面的代码必须要将MySql驱动程序的Jar复制到lib下,并且创建news_inf表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值