JSP入门
JSP入门
- 了解JSP的用途
- 了解JSP执行原理
- 掌握JSP基本语法
1. 为什么引入JSP?
Servlet开发一个网页,主要使用的就是out.println(),但如果全部都使用out.println()工作量就太大了。
Servlet的缺点:
静态的HTML和动态的Java代码混合在一起,难以维护
Servlet使用out.println()语句输出,开发效率低下
Eclipse很难在开发中发现错误,调试困难
2. JSP介绍
- JSP的全称是(Java Server Pages),Java服务器页面
- JSP是J2EE的功能模块,由Web服务器执行
- JSP的作用就是降低动态网页开发难度
- JSP的特点
- JSP使用简单,短时间便可上手
- JSP可将Java代码与HTML分离,降低开发难度
- JSP本质就是Servlet
3. JSP运行要求
- 可正常运行的Tomcat
- 所有JSP页面的扩展名必须是
.jsp
- JSP页面应该放在WEB应用程序目录下面
4. 第一个JSP
案例描述:
公司的薪资制度:新入职员工:基本工资1500元;工作五年内员工:每年工资上浮基本工资的10%;工作5~10年员工:每年工资上浮基本工资的20%;工作10年以上:每年工资上浮基本工资的25%。
- 先在Web Content下新建HTML,salary.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<th>year</th>
<th>salary</th>
</tr>
<tr>
<td>0</td>
<td>1500</td>
</tr>
<tr>
<td>1</td>
<td>1650</td>
</tr>
<tr>
<td>2</td>
<td>1800</td>
</tr>
<tr>
<td>3</td>
<td>1950</td>
</tr>
<tr>
<td>4</td>
<td>2100</td>
</tr>
<tr>
<td>5</td>
<td>2250</td>
</tr>
<tr>
<td>6</td>
<td>2550</td>
</tr>
<tr>
<td>7</td>
<td>2850</td>
</tr>
<tr>
<td>8</td>
<td>3150</td>
</tr>
<tr>
<td>9</td>
<td>3450</td>
</tr>
<tr>
<td>10</td>
<td>3750</td>
</tr>
<tr>
<td>11</td>
<td>4125</td>
</tr>
</table>
</body>
</html>
显示:
如果有30多年的老师傅这样的写法很繁杂,所以我们把静态HTML改成动态的JSP
JSP语法块代码:<% %> 在中间填写Java代码
2.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<th>year</th>
<th>salary</th>
</tr>
<%
for (int i =0; i <= 50; i++){
out.println("<tr>");
out.println("<td>"+ i + "</td>");
out.println("<td>--</td>");
out.println("</tr>");
}
%>
</table>
</body>
</html>
显示:
修改代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<th>year</th>
<th>salary</th>
</tr>
<%
for (int i =0; i <= 50; i++){
out.println("<tr>");
out.println("<td>"+ i + "</td>");
int sal = 0;
if (i<= 5){
sal = 1500 + i * 150;
}else if (i > 5 && i <=10){
sal = 1500 + 150 * 5 + 300 * (i-5);
}else if (i > 10){
sal = 1500 + 150 * 5 + 300 * 5 + 375 * (i - 10);
}
out.println("<td>" + sal +"</td>");
out.println("</tr>");
}
%>
</table>
</body>
</html>
显示:
JSP的执行过程
5. JSP的基本语法
- JSP代码块
- JSP声明构造块
- JSP输出指令
- JSP处理指令
A .JSP代码块
- JSP代码块用于在JSP中嵌入Java代码
- JSP语法块代码:<% Java代码 %>
- 区别
System.out.print()
和oue.print()
:一个是向控制台输出,一个是向当前页面输出。
B. JSP声明构造块
- JSP声明构造块用于声明变量或方法
- JSP声明构造块语法:<%! 声明语句 %>
- 例如:
<%! public int add(int a,int b){return a+b;}%>
C. JSP输出指令
- JSP输出指令用于在JSP页面中显示Java代码的执行结果
- JSP输出指令语法:<%= Java代码 %>
- 例如:
<%= "<b>" + name + "</b>"%>
,这里代码含义是将name值加粗显示在页面里
D. JSP处理指令
- JSP处理指令用于提供JSP执行过程中的辅助信息
- JSP处理指令语法:<%@ JSP指令 %>
- 例如:
<%@ page import="java.util.*"%>
,这里的代码含义是在当前页面导入util包
JSP中常用的处理指令:
| 代码 | 含义 |
| -------- | :----- |
|<%@ page %> | 定义当前JSP页面全局设置 |
|<%@ include %>| 将其他JSP页面与当前JSP页面合并|
|<%@ taglib %>| 引入JSP标签库|
E. JSP中注释的区别
代码 | 含义 |
---|---|
<%–注释–%> | JSP注释,被注释语句不被处理 |
//、 /……/ | 用于注释<% %>Java代码,注释代码不被执行 |
<!–HTML–> | HTML注释,被注释的语句不会被浏览器解释 |
6. JSP综合训练:质数训练
题干:列出1000内的质数(除1以外,只能被1和自身整除的自然数)要求:
- 使用List保存所有有效的质数
- 将结果打印到页面,格式为:“
X是质数
”
代码:
<%
for (int i =2; i <= 1000; i++){
boolean flag = true;
for (int j = 2; j < i; j++){
if (i % j == 0){
flag = false;
break;
}
}
if (flag == true){
out.println("<h1>"+ i + "</h1>");
}
}
%>
结果:
优化:
<%@page import="java.util.*"%>
<%!
boolean isPrime(int num){
boolean flag = true;
for (int j = 2; j < num; j++){
if (num % j == 0){
flag = false;
break;
}
}
return flag;
}
%>
<%
List<Integer> primes = new ArrayList();
for (int i =2; i <= 1000; i++){
boolean flag = isPrime(i);
if (flag == true){
//out.println("<h1>"+ i + "</h1>");
primes.add(i);
}
}
%>
<%
for (int p :primes){
out.println("<h1>"+ p + "是质数</h1>");
}
%>
为什么出现乱码?因为在Tomcat中默认字符集是ISO-8859-1,即欧洲字符集,不支持中文,所以要改字符集。
再优化:
<%@page import="java.util.*" contentType="text/html;charset=utf-8"%>
<%!
boolean isPrime(int num){
boolean flag = true;
for (int j = 2; j < num; j++){
if (num % j == 0){
flag = false;
break;
}
}
return flag;
}
%>
<%
List<Integer> primes = new ArrayList();
for (int i =2; i <= 1000; i++){
boolean flag = isPrime(i);
if (flag == true){
//out.println("<h1>"+ i + "</h1>");
primes.add(i);
}
}
%>
<%
for (int p :primes){
//out.println("<h1>"+ p + "是质数</h1>");
%>
<h1 style="color:blue;"><%=p %>是质数</h1>
<%
}
%>
结果:
7. JSP页面重用
很多网站的页头、页脚是不变的,所以使用JSP重用指令便捷完成这一操作。
<%@page contentType="text/html;charset=utf-8"%>
要闻|推荐|财经|娱乐
<%
out.println("<h1>新闻标题</h1>");
out.println("<p>新闻正文</p>");
%>
<hr/>
Copyright 1999-2021
显示:
这样页头、页脚的代码复用率不高,我们使用include代码进行优化:
- 先在WebContent里新建文件夹include用于存放页头和页脚
- 在文件夹里创建页头和页脚的jsp文件,代码如下:
<%@page contentType="text/html;charset=utf-8"%>
要闻|推荐|财经|娱乐
<%@page contentType="text/html;charset=utf-8"%>
<hr/>
Copyright 1999-2050
- 在新闻页面引入页头和页脚:
<%@page contentType="text/html;charset=utf-8"%>
<%@include file="include/header.jsp" %>
<%
out.println("<h1>新闻标题</h1>");
out.println("<p>新闻正文</p>");
%>
<%@include file="include/footer.jsp" %>
结果: