一、jsp的起源
HTML页面时静态页面,而网页内容一般都是动态的,内容不是一成不变的,如果使用servlet程序来输出页面会造成整个servlet程序代码的臃肿,编写和维护都非常麻烦。
为了弥补servlet的缺陷,Sun公司在Servlet的基础上,推出JSP(Java Servlet Pages)技术,JSP是简化Servlet编写的一种技术它将Java代码和HTML语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写。JSP看上去是HTML,其本质是Servlet,Jsp的后缀必须是.jsp。
二、在jsp中写java程序使用的 脚本片断、声明、表达式、及指令
1、JSP脚本片断需嵌套在<% %>中,可以定义变量、执行基本的程序运算、调用其他Java类、访问数据库、访问文件系统等普通Java程序所能实现的功能。
例:在jsp中使用<% %>书写java代码实现请求转发
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一个页面</title>
</head>
<body>
<a href="attr1.jsp">第二个页面</a>
<!-- 如果想让request实现请求转发 -->
<%request.getRequestDispatcher("attr1.jsp").forward(request,response);%>
</body>
</html>
在Jsp页面中可以有多个脚本片断,多个脚本片断可以相互访问,单个脚本片断中的java代码可以是不完整的,但是多个脚本片断组合后的内容必须是完整的java语句
例:
<%if(java条件表达式){%>
其他元素
<%}else{%>
其他元素
<%}%>
2、JSP声明是将java代码封装到<%! %>之中,其中的代码将插入到Servlet的jspServlet方法之外,
例:
<%!
//成员变量
private String name = "Jack";
public void aa() {
System.out.println("hello!");
}
%>
3、jsp表达式:将要输出的内容直接封装到<%= %>之中,表达式中的变量或表达式后不能有分号(;)。
例:
Current time: <%= new java.util.Date() %>
4、jsp指令:是为JSP引擎设计的,他并不直接产生任何可见输出而只是告诉引擎如何处理JSP页面中的其余部分。
格式:<%@ 指令 属性名="值" %> (属性名部分是大小写敏感的)
<%@ page contentType="text/html;charset=UTF-8"%>
三、九大内置对象(没有声明就可以直接使用的对象,jsp中定义好的)
- request:HttpServletRequest的对象,代表客户端请求信息,用于接受http传送到服务端的数据(常用)
- response:HttpServletResponse的对象,代表客户端的响应(几乎不用)。
- session:HttpSession 代表一次会话(常用)
- application:ServletContext对象,代表当前web应用(常用)
- config:ServletConfig对象,代表当前servlet,用于读取当前servlet配置信息(几乎不用)
- out:JspWriter对象,调用print方法,可以把字符串输出到浏览器(不常用)
- page:指的是当前jsp对应的servlet对象的引用(几乎不用)
- pageContext:页面的上下文,该对象可以获取其他8个内置对象(常用)
- exception:异常对象
四、四大作用域
- application:最大域范围,范围限于当前web应用
- session:范围限于一次回话,浏览器打开到关闭就是一次会话
- request:范围限于同一次请求
- pageContext:范围限于当前页面
域对象范围从大到小排序:application > session > request > pageContext
五、EL表达式
EL表达式可以在JSP页面中直接使用,用来替代<%...%> <%=...%>,EL表达式是用来输出的。
1、从作用域中取值
<%
pageContext.setAttribute("name", "pageContext");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
<!-- 方式1 out -->
<%out.print(request.getAttribute("name")); %>
<!-- 方式2 表达式 -->
<%=request.getAttribute("name") %>
<!-- 方式3 el表达式 -->
<!-- 按范围大小输出,范围最小的先输出 -->
${name }<br/>
${sessionScope.name }
${requestScope.name }
${applicationScope.name }
2、从数组中取值
<!-- 数组 -->
<%
String[] names = {"Jack","Rose"};
pageContext.setAttribute("names", names);
%>
${requestScope.names[0] }<br>
${requestScope.names[1] }
3、从List集合中取值
<!-- 集合 -->
<%
List<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
request.setAttribute("list",list);
%>
${sessionScope.list[0] }
${sessionScope.list[1] }<br>
4、从Map集合中取值
<!-- Map集合 -->
<%
Map<String, User> map = new HashMap<>();
map.put("one", new User("c罗",33));
map.put("two", new User("梅西",31));
map.put("three",new User("内马尔",26));
request.setAttribute("map", map);
%>
${requestScope.map.one.name }<br>
5、从bean中取值
<!-- 对象的实例 -->
User user = new User("宋江",30);
session.setAttribute("user", user);
${user.name }
${user.getName() }<br>
六、EL表达式支持的运算符
1、语法:${运算表达式}
2、常见运算符:==(eq) !=(ne) <(lt) >(gt) <=(le) >=(ge) &&(and) ||(or) !(not)
七、JSTL
Jstl是对EL表达式的扩展,Jstl是标签语言,他不是jsp内置标签,使用时需要导包。 下载jstl-1.2.jar
导包后,还需在jsp页面使用taglib导入标签库 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
1、c:out 标签,输出信息到页面,相当于${ }
<!-- c:out 输出信息到页面 default:默认值-->
<%
request.setAttribute("name","zhangsan");
%>
<c:out value="${name1 }" default="张某某"></c:out>
2、c:set 设置值
<!-- c:set 设置属性
scope:可选四大域对象 page、request、session、application
-->
<c:set var="sex" value="男" scope="request"></c:set>
<!-- 取值 -->
<c:out value="${requestScope.sex }"></c:out>
3、c:if 判断
<!-- c:if 判断 -->
<c:if test="${param.age<18 }">
<span style="color:red">未成年</span>
</c:if>
<c:if test="${param.age<40 }">
<span style="color:blue">青年</span>
</c:if>
4、c:choose 判断 相当于if...else if...else...
<c:choose>
<c:when test="${param.age<18 }">
少年
</c:when>
<c:when test="${param.age<40 }">
青年
</c:when>
<c:otherwise>
中老年
</c:otherwise>
</c:choose>
5、c:forEach 遍历

<!-- c:forEach items:遍历的对象 var:每次要遍历的元素 -->
<c:forEach items="${requestScope.array }" var="str">
${str }
</c:forEach>
<hr>
<c:forEach items="${sessionScope.list }" var="list">
${list }
</c:forEach>
<hr>
<c:forEach items="${requestScope.users }" var="user">
${user.name }:${user.age }
</c:forEach>
<hr>
<!-- 遍历map -->
<c:forEach items="${map }" var="entry">
${entry.key }:${entry.value.name }:${entry.value.age }
</c:forEach>
<hr>
<!-- 遍历0-10之内的数 -->
<c:forEach var="i" begin="0" end="10" step="2">
${i }
</c:forEach>
<hr>
<c:forEach items="${users }" var="user" varStatus="status">
${user.name}:${status.index }:${status.count }
</c:forEach>
<hr>
本文详细介绍了JSP技术的起源与应用,包括JSP脚本片段、声明、表达式及指令的使用,深入解析了EL表达式如何简化数据访问,并展示了JSTL标签库的增强功能。
1281

被折叠的 条评论
为什么被折叠?



