JSP概述及执行流程
Servlet的缺点
- 静态HTML与动态的Java代码混合在一起,难以维护
- Servlet利用out.println()输出HTML代码,开发效率低下
- 在开发过程中难以发现错误,调试困难
JSP介绍
- JSP的全程为(Java Server Pages) 为Java服务器页面
- JSP是J2EE的功能模块,由Web服务器执行
- JSP将静态的HTML和动态的Java解耦,降低了动态网页开发的难度
JSP的特点
- JSP使用简单
- JSP将Java代码与HTML分离,降低了开发难度
- JSP的本质就是Servlet
- 所有JSP页面的扩展名必须是.jsp
- JSP页面应该放在web应用程序目录下
JSP页面示例
要求:
A公司的薪资底薪为1500元,
工作五年内的员工每年工资上浮150元
工作五到十年的员工从第六年起每年工资上浮300元
工作十年以上的员工从第十一年起每年工作上浮450元
要求罗列出30年以内的员工基本薪资状况
JSP程序如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table>
<tr>
<th>year</th>
<th>salary</th>
</tr>
<%
for (int i = 0; i <= 30; i++) {
out.println("<tr>");
out.println("<td>" + i + "</td>");
int sal = 1500;
if (i <= 5) {
sal = sal + 150 * i;
} else if (i > 5 && i <= 10) {
sal = sal + 150 * 5 + (i - 5) * 300;
} else {
sal = sal + 150 * 5 + 5 * 300 + (i - 10) * 450;
}
out.println("<td>" + sal + "</td>");
out.println("</tr>");
}
%>
</table>
</body>
</html>
显示结果为:
JSP的执行过程
当浏览器客户端向Tomcat服务器发出请求,首先会将JSP转译为Servlet源代码,然后和Servlet的执行过程就一样了。JSP的转译过程实际上就是将JSP页面中的HTML代码转变为out.println()输出出去,所以我们说JSP的本质就是Servlet。
JSP基本语法
JSP的语法十分简单,按照功能可以分为以下四种:
- JSP代码块
- JSP生命构造块
- JSP输出指令
- JSP处理指令
JSP代码块
- JSP代码块用于在JSP中嵌入Java代码
- JSP代码块语法:
<%Java代码%>
JSP声明构造块
- JSP声明构造块用于声明变量或方法
- JSP声明构造块语法:
<%! 声明语句%>
- 例如:
<%! public int add(int a,int b){return a + b;} %>
JSP输出指令
- JSP输出指令用于在JSP页面中显示Java代码执行结果
- JSP输出指令语法:
<%= Java代码%>
- 例如:
<%= "<b>" + name + "</b>" %>
JSP处理指令
- JSP处理指令用于提供JSP执行过程中的辅助信息
- JSP处理指令语法:
<%@ jsp指令%>
- 例如:
<%@ page import="java.util.*" %>
JSP常用的处理指令:
-
<%@ page %>
定义当前JSP页面全局设置 -
<%@ include %>
将其他JSP页面与当前JSP页面合并 -
<%@ taglib %>
引入JSP标签库
JSP中的注释
-
<%-- 注释 --%>
JSP注释,被注释的语句不做任何处理 -
// 、 /*...*/
用于注释<%%>
java代码,被注释的代码不被执行 - 普通的HTML注释,被注释的语句不会被浏览器解释
综合案例
列出1000以内的质数
要求一:使用List保存所有有效的质数
要求二:将结果打印到页面,格式为"<h1>x为质数</h1>"
代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List,java.util.ArrayList" %>
<%!
public boolean isPrime(int num) {
for (int i = 2; i < num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
%>
<%
List<Integer> list = new ArrayList<>();
for (int i = 2; i <= 1000; i++) {
if (isPrime(i)) {
list.add(i);
}
}
%>
<%
for (int p : list) {
%>
<h1 style="color:lightpink"><%= p%>是质数</h1>
<%
}
%>
部分结果显示如下:
JSP页面重用
使用<%@include file="filePath"%>
可以达到JSP页面复用的效果;
示例:
web目录下创建include目录
include目录下的header.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
要闻|推荐|财经|娱乐
include目录下的footer.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<hr>
Copyright 1999-3000
复用了header与footer的news.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="include/header.jsp"%>
<%
out.println("<h1>好好学习,天天向上</h1>");
out.println("<p>小明的妈妈告诉小明要好好学习,天天向上</p>");
%>
<%@include file="include/footer.jsp"%>
复用了header与footer的news2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="include/header.jsp"%>
<%
out.println("<h1>天下无敌</h1>");
out.println("<p>切格瓦拉偷电瓶天下无敌</p>");
%>
<%@include file="include/footer.jsp"%>
网友评论