笔者对于JSP也是初学,写这篇文章的主要目的是方便自己去理解JSP的相关内容,所以有些描述并不是那么专业和全面,请多多包涵。
一、JSP概述
JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
JSP,中文名称为Java服务器页面,相应的其对应的便是jsp文件。在jsp文件里面可以编写Java代码也可以编写HTML代码,简单的理解就是jsp就是可以写java代码的html,,当然这里面也可以有xml、xhtml等等。通过编写jsp文件,我们可以在HTML网页中动态嵌入元素,调用Java的一些API等等,很灵活。
二、JSP实例学习
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%--下面是一句Java代码--%>
<%
System.out.println("hello world");
%>
</body>
</html>
上面就是一个非常简单的jsp文件,很容易看出它和html文件非常相似,只是多了配置说明和Java语句。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
上面这一句是jsp文件的配置说明,注意语句格式是==<%@ … %>==
-
page contentType=“text/html;charset=UTF-8”
表示文档类型,“text/htm”表示是文本html,“charset=UTF-8”表示字符集为UTF-8,编程一般涉及中文都默认用UTF-8。 -
language=“java”
说明是Java语言的,其实这一句有点多余,默认就是java语言,这一句可以删除。
在jsp文件里面,注释是用==<%–注释–%>==,比html的注释多了个百分号。
在jsp里面写Java代码,也并不是就直接写,也要有限定,主要限定如下:
-
<%!Java代码 %>
申明变量或方法,这里面申明的变量是全局的 -
<% Java代码 %>
申明变量或方法,这里面申明的变量是局部的 -
<%= Java表达式 %>
用于输出表达式到浏览器,这里面的表达式不能跟分号
三、EL表达式学习
EL(Expression Language)表达式,是为了简化jsp中的Java代码的一种语言格式。其一般格式为
${表达式}
jsp默认支持el表达式的,如果要忽略el表达式,则可以
- 设置jsp中page指令中:isELIgnored=“true” 忽略当前jsp页面中所有的el表达式
- ${表达式} :忽略当前这个el表达式
(1)EL表达式的运用
el表达式的用处主要体现在
-
运算
直接写运算表达式即可。 -
获取值
注意el表达式获取值只能通过域对象获取。语法为
${域名称.键名}:从指定域中获取指定键的值
${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
相应的所涉及的四大域域名称为:
pageScope --> pageContext
requestScope --> request
sessionScope --> session
applicationScope --> application(ServletContext)
(2)完整代码实例学习
下面是一个关于使用el表达式的完整代码,可参考参考。
<%@ page import="com.study.domain.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//在存储域中存储数据
request.setAttribute("name", "xiaoming");
session.setAttribute("name", "xiaohong");
session.setAttribute("password", "123");
%>
<%
User user = new User();
user.setName("xiaoming");
user.setAge(10);
request.setAttribute("user", user);
%>
<%
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
request.setAttribute("list", list);
%>
<%
Map map = new HashMap();
map.put("name", "xiaogang");
map.put("gender", "man");
request.setAttribute("map", map);
%>
<%
int[] arr = new int[]{1, 2, 3};
String str = "abc";
User[] users = new User[0];
request.setAttribute("arr", arr);
request.setAttribute("str", str);
request.setAttribute("users", users);
%>
<%--用el表达式来计算--%>
<h3>计算</h3>
${1+2}<br>
${1<2}<br>
<h3>empty运算符判断是否为空或者长度是否为0</h3>
${empty requestScope.arr}<br>
${empty requestScope.str}<br>
${empty requestScope.users}<br>
<h3>获取值</h3>
${requestScope.name}<br>
${sessionScope.password}<br>
<%--依次从最小的域中查找是否有该键对应的值,直到找到为止。--%>
${name}<br>
<h3>获取对象</h3>
${requestScope.user}<br>
${requestScope.user.name}<br>
<h3>获取list的值</h3>
${requestScope.list}<br>
${requestScope.list[0]}<br>
${requestScope.list[1]}<br>
<h3>获取map的值</h3>
${requestScope.map}<br>
${requestScope.map.name}<br>
${requestScope.map["name"]}<br>
</body>
</html>
四、JSTL学习
JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
和el表达式一样,jstl也是为了简化jsp里面的java代码的。
注意使用jstl要导入相应的包,包的下载及导入可参考大佬的博客jstl的jar包的下载。
(1)JSTL的运用
常用的jstl标签有:
- if:相当于java代码的if语句
c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签 - choose:相当于java代码的switch语句
使用choose标签声明 相当于switch声明
使用when标签做判断 相当于case
使用otherwise标签做其他情况的声明 相当于default
- foreach:相当于java代码的for语句
- 完成重复的操作
* 属性:
begin:开始值
end:结束值
var:临时变量
step:步长
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
- 遍历容器
* 属性:
items:容器对象
var:容器中元素的临时变量
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
(2)JSTL实例学习
下面是完整的jstl代码,可参考。
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入jstl--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--if标签--%>
<c:if test="true">
<h3>真</h3>
</c:if>
<%--choose标签--%>
<%
request.setAttribute("number", 1);
%>
<c:choose>
<c:when test="${number == 1}">星期一</c:when>
<c:when test="${number == 2}">星期二</c:when>
<c:when test="${number == 3}">星期三</c:when>
<c:when test="${number == 4}">星期四</c:when>
<c:when test="${number == 5}">星期五</c:when>
<c:when test="${number == 6}">星期六</c:when>
<c:when test="${number == 7}">星期天</c:when>
<c:otherwise>数字输入有误</c:otherwise>
</c:choose>
<%--foreach语句--%>
<c:forEach begin="1" end="10" var="i" step="2" varStatus="s">
${s.index}<br>
</c:forEach>
<%
List list1 = new ArrayList();
list1.add(1);
list1.add(2);
list1.add(3);
request.setAttribute("list1", list1);
%>
<c:forEach items="${requestScope.list1}" var="num" varStatus="s">
${s.index}<br>
${num}<br>
</c:forEach>
</body>
</html>
2019.12.22