Java中的jsp以及EL表达式、Jstl标签

本文详细介绍了JSP技术的起源与应用,包括JSP脚本片段、声明、表达式及指令的使用,深入解析了EL表达式如何简化数据访问,并展示了JSTL标签库的增强功能。

一、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中定义好的)

  1. request:HttpServletRequest的对象,代表客户端请求信息,用于接受http传送到服务端的数据(常用)
  2. response:HttpServletResponse的对象,代表客户端的响应(几乎不用)。
  3. session:HttpSession 代表一次会话(常用)
  4. application:ServletContext对象,代表当前web应用(常用)
  5. config:ServletConfig对象,代表当前servlet,用于读取当前servlet配置信息(几乎不用)
  6. out:JspWriter对象,调用print方法,可以把字符串输出到浏览器(不常用)
  7. page:指的是当前jsp对应的servlet对象的引用(几乎不用)
  8. pageContext:页面的上下文,该对象可以获取其他8个内置对象(常用)
  9. exception:异常对象

四、四大作用域

  1. application:最大域范围,范围限于当前web应用
  2. session:范围限于一次回话,浏览器打开到关闭就是一次会话
  3. request:范围限于同一次请求
  4. 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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值