学习Servlet-day11

1. jsp标签和el表达式

(1)jsp标签是什么?

jsp标签是sun制订的一种用来代替jsp中java代码的
技术规范,语法类似于html标签(有开始标记和结束标记,有属性)。
注:
    因为直接在jsp文件中写java代码,不利于
jsp文件的维护(比如,将包含有java代码的jsp文件交给美工去修改就很不方便),所以,sun才制订了
jsp标签技术规范。
    使用jsp标签的好处:
    a.方便美工去修改。
    b.jsp文件变得更简洁,而且可以实现代码的重用。

(2)el表达式是什么?

是一套简单的运算规则,用来给jsp标签的属性
赋值。
注: el表达式也可以脱离jsp标签,直接使用。

 (3)el表达式的使用

1)读取bean的属性 (e1.jsp,e2.jsp)

注:
    如果一个类满足如下几个条件,就可以称之为
    一个javabean:
    public class
    public 构造器
    有一些属性及对应的get/set方法
    实现Serializable接口
a.方式一
    ${user.username}
    注:
      a1. 执行流程: 容器依次从pageContext,
        request,session,application中查找
        绑订名为"user"的对象,找到了,则调用
        该对象的"getUsername"方法,然后输出。
      a2. 优点:
           跟直接写java代码相比,更简洁。
           会将null转换成""输出。
           如果找不到对应的对象,不会报空指针
           异常。
      a3.如果要指定查找范围,可以使用
        pageScope,requestScope,
        sessionScope,applicationScope
        来指定。
b.方式二
     ${user['username']}
     b1.等价于 ${user.username}。
     b2.[]里面,可以使用绑订名。
     b3.[]里面,可以使用从0开始的下标
    ,用于访问数组中的某个元素。

2)做一些简单的运算。 (e3.jsp)

a.算术运算: +,-,*,/,%
    注: + 只能求和!
b.关系运算: >,>=,<,<=,==,!=
c.逻辑运算: &&,||,!
d.empty运算: empty

3)读取请求参数值 (e4.jsp)

${param.name} 等价于 
    request.getParameter("name");
${paramValues.interest} 等价于
    request.getParameterValues("interest");

(4) jstl (java standard tag lib)

1) 什么是jstl?

 apache开发的一套jsp标签,后来捐献给了sun,
sun将其命名为jstl(java标准标签库)。    

2) 编程步骤

step1.将jstl相关的jar文件放到lib文件夹下。
step2.使用taglib指令引入要使用的jsp标签。
    <%@ taglib uri="" prefix=""%>
    uri属性:指定标签的命名空间。
    prefix属性:命名空间的别名。
注:
    命名空间:为了区分同名的元素而在元素前添加
    的一个限定,通常是一个域名。

3)核心标签

a. if标签  (c1.jsp)
<c:if test="" var="" scope="">
    标签体
</c:if>
注:
    a1. test属性值如果是true,容器会
        执行标签体的内容。
    a2. test属性可以使用el表达式来赋值。
    a3. var属性用来指定绑订名。
    a4. scope属性指定绑订的范围。


b. choose标签  (c2.jsp)
 <c:choose>
    <c:when test="">
    </c:when>
    <c:otherwise>
    </c:otherwise>  
 </c:choose>
 注:
    b1. when可以出现1次或者多次,当test
        属性值为true时,执行标签体的内容。
    b2. otherwise可以出现0次或者1次,用来
        处理例外。

c. forEach标签  (c3.jsp)
   <c:forEach items="" var="" varStatus="">
   </c:forEach> 
    c1. items属性用来指定要遍历的集合或者
    数组。可以使用el表达式来赋值。
    c2. var属性用来指定绑订名。
    注: 该标签每一次从集合或者数组中取一个
        元素,然后将该元素绑订到pageContext
        上,var属性用来指定绑订名。
    c3. varStatus属性用来指定绑订名。 
    注: 绑订范围是pageContext,绑订值是一个
        对象,该对象提供了几个方法,用于获得
        当前遍历的状态:
            getIndex():获得当前正在被遍历的元素的下标(从0开始)。
            getCount():获得当前正在被遍历的元素的序号(从1开始)。

4)标签的执行流程(了解)

容器依据命名空间找到标签的描述文件(.tld文件),
接下来,依据标签的名称找到对应的标签类,然后
将标签类实例化并执行该实例的相应方法。 

练习: Employee类 String ename double salary int age 使用el表达式输出某个员工的各项属性值。

在webapp文件文夹下面建jsp文件;

c1.jsp

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" 
prefix="c" %>
<html>
<head>
</head>
<body style="font-size:30px;">
    性别:
   <c:if test="${user.gender == 'm'}">男</c:if>
   <br/>
   性别: 
   <c:if test="${user.gender == 'm'}">男</c:if>
   <c:if test="${user.gender != 'm'}">女</c:if>
   
   性别:
   <c:if test="${user.gender == 'm'}" 
   var="rs" scope="page">男</c:if>
   <c:if test="${!rs}">女</c:if>
</body>
</html>

c2.jsp

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" 
prefix="c" %>
<html>
<head>
</head>
<body style="font-size:30px;">
  性别: <c:choose>
    <c:when test="${user.gender == 'm'}">男</c:when>
    <c:when test="${user.gender == 'f'}">女</c:when>
    <c:otherwise>保密</c:otherwise>
  </c:choose>
</body>
</html>

c3.jsp

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" 
prefix="c" %>
<html>
<head>
  <style>
    .row1{
      background-color:#fff8dc;
    }
    .row2{
      background-color:#f0f0f0;
    }
    
  </style>
</head>
<body style="font-size:30px;">
    <table width="60%" border="1" 
      cellpadding="0" cellspacing="0">
      <tr>
        <td>用户名</td>
        <td>性别</td>
        <td>下标</td>
        <td>序号</td>
       </tr>
      <c:forEach items="${users}" var="u" 
      varStatus="s">
        <tr class="row${s.index % 2 + 1}">
          <td>${u.username}</td>
          <td>${u.gender}</td>
          <td>${s.index}</td>
          <td>${s.count}</td>
        </tr>
      </c:forEach>
    </table>
</body>
</html>

下面是el表达式:

e1.jsp

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="bean.*" %>
<html>
<head>
</head>
<body style="font-size:30px;">
    <%
      User user = 
        (User)request.getAttribute("user");
    %>
    用户名:<%=user.getUsername()%>
</body>
</html>

e2.jsp

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
    用户名:${user.username}<br/>
  用户名:(指定从session对象中查找):
  ${sessionScope.user.username}<br/>
  
  用户名:${user['username']} <br/>
 
 用户名:${user[s1]}<br/>
 
 爱好:${user.interest[0]}

</body>
</html>

e3.jsp

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<html>
<head>
</head>
<body style="font-size:30px;">
    算术运算:<br/>
    1 + 1 = ${1 + 1} <br/>
    "2" + "3" = ${"2" + "3"} <br/>
    
   关系运算:<br/>
    1 > 2 ${1 > 2} <br/>
  <%
    request.setAttribute("str", "abc");
  %>  
   ${str == "abc"} <br/>
   ${sessionScope.str == "abc"}<br/>
  
  逻辑运算:<br/>
  ${1 < 2 && 2 > 3}
 
 empty运算:<br/>
 <%
  List list = new ArrayList();
  request.setAttribute("list", list);
  
  request.setAttribute("str2", "");
 %>
 空的集合: ${empty list}<br/>
 空字符串: ${empty str2}<br/>
值为null: ${empty null}<br/>
找不到对应的值: ${empty abc}
 
</body>
</html>

e4.jsp

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
    ${param.name}<br/>
    ${paramValues.interest[1]}
    
</body>
</html>

下面在java文件里面写:

user.java

package bean;

public class User {
	private String username;
	private int age;
	private String[] interest;
	
	private String gender;
	
	
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getUsername() {
		return username;
	}
	public String[] getInterest() {
		return interest;
	}
	public void setInterest(String[] interest) {
		this.interest = interest;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

在建的servet里面:

SomeServlet.java

package web;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.User;


public class SomeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		User user = new User();
		user.setUsername("小白");
		user.setAge(22);
		user.setInterest(
				new String[]{"钓鱼","台球"});
		user.setGender("f");
		
		request.setAttribute("user", user);
		
		User user2 = new User();
		user2.setUsername("小黄");
		user2.setAge(32);
		request.getSession().setAttribute(
				"user", user2);
		
		request.setAttribute("s1", "age");
		
		List<User> users = 
				new ArrayList<User>();
		for(int i = 0; i < 8; i ++){
			User u = new User();
			u.setUsername("用户" + i);
			u.setGender("m");
			users.add(u);
		}
		
		request.setAttribute("users", users);
		
		request.getRequestDispatcher("c3.jsp")
		.forward(request, response);
	
	}
	

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值