Java Web入门之JSP的基本语法解析及实战(超详细 附源码)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: Java Web入门之JSP的基本语法解析及实战(超详细 附源码)

JSP页面是指扩展名为.JSP的文件


在一个JSP页面中 可以包括指令标识 HTML代码 JavaScript代码 嵌入的JAVA代码 注释和JSP动作标识等内容。


下面实例编写了一个JSP页面 显示当前时间

1666436146639.jpg

代码如下 配置环境为Eclipse 如不懂怎么配置的可以参考我这篇博客JAVA Web环境配置


1:指令标识


指令标识主要用于设定整个JSP页面范围内都有效的相关信息 它是被服务器解释并且执行的 会产生任何内容输出到网页中 语法如下


<%@ 指令名 属性1="属性值1" ...%>


指令名 包括page include taglib三条指令


1.1:page指令


page是JSP页面最常用的指令 用于定义整个JSP页面的相关属性 这些属性在JSP中被服务器解析成Servlet时会转换为相应的Java程序代码 语法如下


<%@ page attr1="value1" attr2="value2"...%> 常用属性如下


language 设置JSP页面使用语言 目前只支持JAVA

%@ page language="java"


import 导入类包

  <%@page import="java.util.Date" %>


pageEncoding 定义JSP页面的编码格式 GB18030支持中文

pageEncoding="GB18030"%>


contentType 设置JSP页面的MIME类型和字符编码 浏览器会据此显示网页内容

contentType="text/html;


2:include指令


文件包含指令include时JSP的另一条指令标识 通过该指令可以在一个JSP页面中包含另一个JSP页面。 语法如下

<%@ include file="path"%>


该指令只有file一个属性 指定要包含文件的路径 可以是相对路径也可以是绝对路径


实战效果如下 本质上有点类似于调用了其他JSP文件的内容

1666436384404.jpg

代码如下 总共有三个JSP文件

<%@ page pageEncoding="GB18030"%>
<img src="玫瑰少年.jpg">
<%String manager="张三";%>
管理员:<%=manager%>
<%=24+34%>
<body>
<%
String str="";
for(int i=1;i<=9;i++){
  for(int j=1;j<=i;j++){
  str+=j+"*"+i+"="+j*i;
  str+="&nbsp;";
  }
  str+="<br>";
}
%>
<table width="440" height="85" border="1" cellpadding="0" cellspacing="0" 
style="font:9pt;" bordercolordark="#666666" bordercolorlight="#FFFFFF" bordercolor="#FFFFFF">
<tr>
<td height="30" align="center"> 九九乘法表</td>
</tr>
<tr>
<td style="padding:3pt">
<%=str %>
</td>
</tr>
</table>
</body>
<%@ page 
    pageEncoding="GB18030"%>
<%
String copyright="&nbsp;All Copyright &copy; 2022 华南理工大学";
%>
<table width="778" height="61" border="0" cellpadding="0"
cellspacing="0" background="JavaScript-logo.png">
  <tr>
    <td><%=copyright %></td>
  </tr>
</table>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=GB18030">
<title>使用文件包含include指令</title>
</head>
<body>
<body style="margin:0px">
<%@ include file="top.jsp" %>
<table width="781" height="279" border="0" cellpadding="0" cellspacing="0" background="C:\Users\Admin\Desktop\玫瑰少年.jpg">
<tr>
<td>&nbsp;</td>
</tr>
</table>
<%@ include file="copyright.jsp" %>
</body>
</html>


3:taglib指令


在JSP文件中 可以通过taglib指令标识声明该页面中所使用的标签库 同时引用标签库 并指定标签的前缀 在页面中引用标签库 就可以通过前缀来引用标签库中的标签 语法如下


<%@ taglib prefix="tagPrefix" url="tagURL"%>


4:脚本标识


在JSP页面中 脚本标识使用得最为频繁 因为他们能够方便 灵活地生成页面中得动态内容 特别Scriptlet脚本程序 包括三部分 JSP表达式 声明标识 脚本程序


4.1:JSP表达式


JSP表达式用于向页面中输出信息 语法如下

<%=表达式%>


表达式可以是任意JAVA 语言的完整表达式 该表达式的最终运算结果被转换为字符串


使用JSP在页面中输出信息 代码如下

<%String manager="张三";%>
管理员:<%=manager%>
<%=24+34%>


4.2:声明标识


声明标识用于在JSP页面中定义全局的变量或方法 通过声明标识定义的变量和方法可以被整个JSP页面访问 所以通常使用该标识定义整个JSP页面需要引用的变量或方法 语法如下


<%! 声明变量或方法的代码%>

<%!
int number=0;
int count(){
  number++;
  return number;
}
%>

4.3:代码片段


所谓代码片段 就是在JSP页面中嵌入的JAVA代码或是脚本代码 代码片段在也页面请求的处理期间被执行 语法如下

<%java代码或是脚本代码%>


以下是通过代码片段和JSP表达式在JSP页面中输出九九乘法表

<body>
<%
String str="";
for(int i=1;i<=9;i++){
  for(int j=1;j<=i;j++){
  str+=j+"*"+i+"="+j*i;
  str+="&nbsp;";
  }
  str+="<br>";
}
%>
<%!
int number=0;
int count(){
  number++;
  return number;
}
%>
<table width="440" height="85" border="1" cellpadding="0" cellspacing="0" 
style="font:9pt;" bordercolordark="#666666" bordercolorlight="#FFFFFF" bordercolor="#FFFFFF">
<tr>
<td height="30" align="center"> 九九乘法表</td>
</tr>
<tr>
<td style="padding:3pt">
<%=str %>
</td>
</tr>
</table>
</body>


5:JSP注释


JSP注释与JAVA和C++比较相似


单行注释//


多行注释/*  */


提示文档注释/**            */


隐藏注释 在文档中添加的注释在查看HTML源码时是可以看到的 这样不太安全 JSP提供一种隐藏注释 这样在浏览器中看不到 在查看HTML源代码时也看不到 语法如下


<%--注释内容--%> 效果如下

1666436586508.jpg

代码如下 要注意代码中两行隐藏的注释没有显示出来


<%--显示用户信息开始 --%>
用户名:玫瑰少年<br>
部门: JAVA Web部门<br>
权限: 系统管理员
<%--显示用户信息结束 --%>

6:动作标识


6.1:包含文件标识<jsp:include>


其作用跟前面讲的include比较相似 都是向当前页面包含其他的文件 语法如下


<jsp:include page="url" flush="false/true"/>

其与include区别有以下几点


1:include通过file属性指定被包含的文件 且不支持任何表达式 <jsp:include>的属性明显更多 更加灵活


2:使用include指令时 被包含文件的内容会原封不动的插入到包含页中 然后JSP编译器将合成后的文件最终编译成一个JAVA 文件 使用<jsp:include>包含文件时,程序会将请求转发到被包含的页面,并将执行结果输出到浏览器中,然后返回包含页,继续执行后面的代码 然后JSP编译器在分别编译


3:在应用include时 变量或方法不能重名  因为他们最终是一个文件 而使用<jsp:include>时因为每个文件时单独编译的  所以可以重名


6.2:请求转发标识<jsp:forward>


通过转发标识可以将请求转发到其他的web资源 例如另一个JSP页面 HTML页面等等 当前页面不再被执行 而去执行该标识指定的目标页面 语法如下

<jsp:forward page="url"/>


效果如下 分为两个JSP文件

1666436673583.jpg

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<html>
<head>
<meta  http-equiv="Content-Type" content="text/html;charset=GB18030">
<title>中转页</title>
</head>
<body>
<jsp:forward page="login.jsp"/>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>用户登录</title>
</head>
<body>
<form name="form1" method="post" action="">
用户名:<input name="name" type="text" id="name" style="width:120px"><br>
密&nbsp;&nbsp;码:<input name="pwd" type="password" id="pwd" style="width: 120px"><br>
<br>
<input type="submit" name="Submit" value="提交">
</form>
</body>
</html>


7:传递参数标识<jsp:param>


该标识可以作为其他标识的子表示 用于为其他标识传递参数 语法如下

<jsp:param name="参数名" value="参数值"/>


代码如下

在实现请求转发的同时 传递了参数userid 其参数值为7

<jsp:forward page="modify.jsp">
 <jsp:param name="userid" value="7"/>
</jsp:forward>


创作不易觉得有帮助请点赞关注收藏~~~



相关文章
|
10天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
35 2
|
27天前
|
移动开发 开发者 HTML5
构建响应式Web界面:Flexbox与Grid的实战应用
【10月更文挑战第22天】随着互联网的普及,用户对Web界面的要求越来越高,不仅需要美观,还要具备良好的响应性和兼容性。为了满足这些需求,Web开发者需要掌握一些高级的布局技术。Flexbox和Grid是现代Web布局的两大法宝,它们分别由CSS3和HTML5引入,能够帮助开发者构建出更加灵活和易于维护的响应式Web界面。本文将深入探讨Flexbox和Grid的实战应用,并通过具体实例来展示它们在构建响应式Web界面中的强大能力。
35 3
|
22天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
120 45
|
10天前
|
存储 安全 Linux
Golang的GMP调度模型与源码解析
【11月更文挑战第11天】GMP 调度模型是 Go 语言运行时系统的核心部分,用于高效管理和调度大量协程(goroutine)。它通过少量的操作系统线程(M)和逻辑处理器(P)来调度大量的轻量级协程(G),从而实现高性能的并发处理。GMP 模型通过本地队列和全局队列来减少锁竞争,提高调度效率。在 Go 源码中,`runtime.h` 文件定义了关键数据结构,`schedule()` 和 `findrunnable()` 函数实现了核心调度逻辑。通过深入研究 GMP 模型,可以更好地理解 Go 语言的并发机制。
|
18天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
32 1
|
20天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
39 1
|
23天前
|
消息中间件 缓存 安全
Future与FutureTask源码解析,接口阻塞问题及解决方案
【11月更文挑战第5天】在Java开发中,多线程编程是提高系统并发性能和资源利用率的重要手段。然而,多线程编程也带来了诸如线程安全、死锁、接口阻塞等一系列复杂问题。本文将深度剖析多线程优化技巧、Future与FutureTask的源码、接口阻塞问题及解决方案,并通过具体业务场景和Java代码示例进行实战演示。
40 3
|
23天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
34 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
70 0
|
1月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
57 0

推荐镜像

更多
下一篇
无影云桌面