JSP
文件头
<%@page contentType="text/html;charset=utf-8" language="java"%>
JSP 基本使用
jsp 页面不能像 HTML 页面, 直接用浏览器运行。只能通过浏览器访问 Tomcat 来访问 jsp 页面
<html>
<head>
<title>求和计算器</title>
</head>
<body>
<h1>计算器</h1>
<%
//在该标签中可以写java代码
int i = 10;
int j = 20;
int res = i + j;
//输出也可以 PrintWriter writer = response.getWrite(),已经内置了对象
out.print(i + "+" + j + "=" + res);
%>
</body>
</html>
运行原理
jsp 页面本质是一个 Servlet 程序, 其性能是和java关联的
第1次访问 jsp 页面的时候。Tomcat 服务器会把 jsp 页面解析成为一个 java 源文件。 并且对它进行编译成 为.class 字节码程序。看下 Cal.jsp 对应的 cal_jsp.java 和cal_jsp.class 文件
JSP 三种常用脚本
声明脚本
格式:<%! 声明java代码 %>
作用:定义jsp需要的属性、方法、静态代码块和内部类等
<body>
<h1>jsp声明脚本</h1>
<%!
//定义成员
//声明jsp需要使用的属性,方法,静态代码块,内部类
private String name = "jack";
private int age;
private static String company;
public String getName() {
return name;
}
static {
company = "字节跳动";
}
%>
</body>
表达式脚本
代码脚本
应用
注释
JSP内置对象(inbuild)
JSP域对象
pageContext (域对象,存放的数据只能在当前页面使用)
request (域对象,存放的数据在一次request请求有效)
session(域对象,存放的数据在一次会话有效)
application(域对象,存放的数据在整个web应用运行期间有效, 范围更大)
注意事项和细节
JSP请求转发标签
<jsp:forward page="/bb.jsp"> //服务器解析/
等价于 request.getRequestDispatcher("/bb.jsp").forward(request,response);
地址仍然保留在aa.jsp
EL
EL 表达式主要是代替 jsp 页面的表达式脚本<%=request.getAttribute("xx")%>
EL表达式基本语法:${key1},key1相当于xx
<body>
<%request.setAttribute("name","hsp");%>
<!--如果name是null,jsp方式返回null字符串,el方式返回"" -->
名字:<%=request.getAttribute("name") == null ? "" : request.getAttribute("name")%>
名字:${name}
</body>
EL常用输出形式
public class Book {
private String name;
private String[] writer;//作者
private List<String> reader;//读者
private Map<String, String> topics;//话题
}
<body>
<%
Book book = new Book();
book.setName("昆虫总动员");
book.setWriter(new String[]{"jack", "tom"});
ArrayList<String> readers = new ArrayList<>();
readers.add("汤姆");
readers.add("玛丽");
book.setReader(readers);
HashMap<String, String> topics = new HashMap<>();
topics.put("key1", "这是我看过的最好的动画片");
topics.put("key2", "非常期待..");
book.setTopics(topics);
request.setAttribute("bookkey", book);
%>
<h1>EL 输出数据</h1><hr/>
book 信息:${bookkey}<br/>
book.name:${bookkey.name}<br>
book.writer 的第 1 个元素:${bookkey.writer[0]}<br>
book.reader 集合:${bookkey.reader}<br>
book.reader 集合第二个元素:${bookkey.reader[1]}<br>
book.reader 集合第二个元素:${bookkey.reader.get(1)}<br>
book 的Map集合:${bookkey.topics}<br>
book 的Map集合key1的值:${bookeyk.topics["key1"]}<br>
</body>
</html>
EL 的 empty 运算
empty 运算可以判断一个数据是否为空,如果为空,返回true,否则返回false
EL 获取四个特定域中的属性
pageContext对象的使用
java获取http协议的方式
通过pageContext获取
JSTL
JSTL是为了替换代码脚本
文件头
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>