JavaWeb-05-JSP规范-01-JSP概述
1.什么是JSP规范,有什么用?
- JSP规范来自于JavaEE规范中的一种。
- JSP规范制定了如何开发JSP文件代替响应对象将处理结果写入响应体内的开发流程。
- JSP规范制定了Http服务器应该如何调用JSP文件。
2.为什么要用JSP文件代替响应对象
响应对象只适合将少量处理结果写入响应体,如果处理结果数量较多,使用响应对象会非常繁琐,增加开发难度。
比如说将“1+1=2”的结果“2”写入响应体内时,用响应对象非常方便:
int num = 1 + 1;
PrintWriter out = response.getWriter();
out.print(num);
但如果要将一个表格页面写入响应体中,使用响应对象就非常麻烦:
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<table border=‘1‘ align=‘center‘ cellspacing=‘0‘ cellpadding=‘0‘>");
//标题行
out.print("<tr>");
out.print("<th>用户编号</th>");
out.print("<th>用户姓名</th>");
out.print("<th>用户密码</th>");
out.print("<th>用户邮箱</th>");
out.print("</tr>");
//数据行
out.print("<tr>");
out.print("<td>1</td>");
out.print("<td>张三</td>");
out.print("<td>123</td>");
out.print("<td>zhangsan@qq.com</td>");
out.print("<tr>");
//
out.print("<tr>");
out.print("<td>2</td>");
out.print("<td>李四</td>");
out.print("<td>123</td>");
out.print("<td>lisi@qq.com</td>");
out.print("<tr>");
//
out.print("<tr>");
out.print("<td>3</td>");
out.print("<td>王五</td>");
out.print("<td>123</td>");
out.print("<td>wangwu@qq.com</td>");
out.print("<tr>");
out.print("</table>");
为了降低开发难度,可以在处理结果数量较多时,用JSP文件代替响应文件将处理结果写入响应体。
3.演示JSP文件的使用
3.1创建JSP文件
在idea中,每当创建一个web项目,就会在web目录下默认建一个index.jsp文件。
也可以自己创建。
我们一般都把JSP文件放在web目录下。
在web目录上右键创建
然后为JSP文件命名。
创建好的JSP文件:
其中,第8行语句:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- contentType:对应响应包中的content-type属性,我们可以指定浏览器使用何种编译器以及何种字符集对响应体中的内容进行编译。
- language:指定在jsp文件中可以使用什么命令,目前只支持java命令。
3.2使用JSP将一个表格页面写入响应体
JSP文件在执行时,会自动将文件中所有内容都写入到响应体,代替【out.print();】
我们可以在JSP文件里编写html标签命令
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<table border="1" cellspacing="0" cellpadding="0" align="center">
<tr>
<th>用户编号</th>
<th>用户姓名</th>
<th>用户密码</th>
<th>用户邮箱</th>
</tr>
<tr>
<td>1</td>
<td>张三</td>
<td>123</td>
<td>zhangsan@qq.com</td>
</tr>
<tr>
<td>2</td>
<td>李四</td>
<td>123</td>
<td>lisi@qq.com</td>
</tr>
<tr>
<td>3</td>
<td>王五</td>
<td>123</td>
<td>wangwu@qq.com</td>
</tr>
</table>
</html>
在Tomcat默认配置中,index.jsp被设为欢迎文件
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
发布网站,开启服务器:
3.3JSP文件优势
- JSP文件在互联网通信过程,是响应对象替代品
- 降低将处理结果写入到响应体的开发工作量降低处理结果维护难度
- 在JSP文件开发时,可以直接将处理结果写入到JSP文件不需要手写out.print命令,在Http服务器调用JSP文件时,根据JSP规范要求自动的将JSP文件书写的所有内容通过输出流写入到响应体
4.HTML文件与JSP文件的区别
1.作为资源文件类型不同
- HTML文件属于静态资源文件,其相关命令是需要在浏览器编译并执行的.
- JSP文件属于动态资源文件,其相关命令时需要在服务端编译并执行的
2.调用形式不同
- 如果浏览器访问HTML文件,此时Http服务器直接通过一个输出流将HTML文件中所有的内容写入到响应体
- 如果浏览器访问JSP文件。此时Http服务器根据JSP规范来操作JSP文件编辑---->编译----->调用
5.在JSP文件中编写Java命令
5.1执行标记<%%>
5.1.1执行标记内的命令才被JSP认为是Java命令
如果直接在JSP文件里写java命令:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
int a = 10;
int b = 20;
int c = a + b;
开启服务器后浏览器显示:
执行标记的作用就是通知Http服务器将JSP文件中Java命令与其他普通执行结果进行区分。
5.1.2执行标记格式
<%
//java命令
%>
在JSP中声明java语句:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
//1.声明Java变量
int a = 10;
int b = 20;
//2.运算表达式:数学运算、关系运算、逻辑运算
int c = a + b;//数学运算
int d = a > b ? a : b;//关系运算
boolean e = a > 0 && a < 20;//逻辑运算
//3.书写控制语句
if (a > b) {
} else {
}
for(int i = 0;i < 10;i++) {
}
%>
5.2输出标记<%=%>
5.2.1输出标记的作用
输出标记的作用就是通知Tomcat,将输出标记中【变量的值】或输出标记中【表达式运算结果】写入到响应体。
5.2.2输出标记格式
<%=java的变量名%>
<%=java的表达式%>
在JSP中将java命令执行结果写入响应体
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
//声明变量
int a = 10;
int b = 20;
%>
<%--在JSP文件中,通过输出标记,通知JSP将Java变量的值写入响应体--%>
变量a的值:<%=a%>
<br>
变量b的值:<%=b%>
<br>
<%--在JSP文件中,通过输出标记,通知JSP将运算结果写入写入响应体--%>
a + b = <%=a+b%>
5.4导包
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
Map map = new HashMap();
List list = new ArrayList();
%>
5.5在JSP中编写控制语句
在JSP中编写一个判断语句,
- 当年龄大于18岁时,显示欢迎光临;
- 当年龄小于18岁时,显示拒绝入内;
html标签无法嵌入执行标签内的java语句中,但是在JSP中所有执行标记可当作一个整体。
可以将java判断语句分割成数段,然后将html标签嵌入其中。
如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
int age = 20;
%>
<%
if(age > 18) {
%>
<center><font style="color:green;font-size:20px">欢迎光临</font></center>
<%
} else {
%>
<center><font style="color:red;font-size:20px">拒绝入内</font></center>
<%
}
%>
5.6在JSP中使用for循环
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.Set" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--制造数据--%>
<%
Map<Integer,String> map = new HashMap<>();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
map.put(4,"赵六");
%>
<%--输出数据--%>
<table border="1" cellpadding="0" cellspacing="0" align="center">
<tr>
<th>用户编号</th>
<th>用户名</th>
</tr>
<%
Set<Map.Entry<Integer,String>> users = map.entrySet();
for (Map.Entry<Integer,String> user:users) {
%>
<tr>
<td><%=user.getKey()%></td>
<td><%=user.getValue()%></td>
</tr>
<%
}
%>
</table>