JSP中的369与JSTL(一)

4 篇文章 1 订阅
jsp中的3个指令
1.<%@ page import="java.util.Date,java.util.List"%>
2.Include
静态包含:把其它资源包含到当前页面中。
<%@ include file="/include/1.jsp" %>
动态包含:
<jsp:include page="/include/1.jsp"></jsp:include>
3.taglib
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
需要导入 jar 包
jstl.jar standard.jar
https://mvnrepository.com/
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
2.jsp的6个动作
<jsp:include > 动态包含
<jsp:forward> 请求转发
<jsp:param> 设置请求参数

<jsp:useBean> 创建一个对象
<jsp:setProperty> 给指定的对象属性赋值
<jsp:getProperty> 取出指定对象的属性值
3.jsp的9个内置对象
request  请求对象
response 响应对象
session 域对象
application 全局变量
exception jsp异常处理
page 当前servlet实例 this
config jsp配置信息对象
out  打印输出
pageContext 指当前页面 域对象 然并卵
void setAttribute(String name,Object o);
Object getAttribute(String name);
void removeAttribute(String name);
操作其它域对象的方法
void setAttribute(String name,Object o,int Scope);
Object getAttribute(String name,int Scope);
void removeAttribute(String name,int Scope);
scpoe的值:
PageContext.PAGE_SCOPE  对应于page范围。
PageContext.REQUEST_SCOPE  对应于request范围。
PageContext.SESSION_SCOPE   对应于session范围。
PageContext.APPLICATION_SCOPE  对应于application范围。

findAttribute(String name); 
自动从page request session application依次查找,找到了就取值,结束查找。
3.1EL表达式
实际开发使用的域对象
PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。
ServletRequest: request  存放的数据在一次请求(转发)内有效。使用非常多。
HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息
ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。

1.EL表达式:expression language 表达式语言
要简化jsp中java代码开发。
它不是一种开发语言,是jsp中获取数据的一种规范

2.功能
获取数据
EL表达式能获取存在4个作用域中的数据 
${u} 相当于 pageContext.findAttribute("u");
EL获取对于null这样的数据,在页面中表现为空字符串
3.2 EL表达式 的隐式对象
EL表达式 的隐式对象
1.pageContext(对象)
它是javax.servlet.jsp.PageContext类的实例对象,
pageContext对象提供了对JSP页面所有的对象及命名空间的访问
2.pageScope
表示变量只能在本页面使用
3.requestScope
表示变量能在本次请求中使用
4.sessionScope
表示变量能在本次会话中使用
5.applicationScope
表示变量能在整个应用程序中使用。



headerValues

cookie ${cookie.JSESSIONID.value } 测试不加value
4.JSTL
1.什么是JSTL
JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
2.JSTL的作用
使用JSTL实现JSP页面中逻辑处理。如判断、循环等。
3.使用JSTL
需要在JSP页面添加taglib指令 添加核心库
4.通用标签: set、 out、 remove
<!-- 声明一个变量 num -->
<c:set var="num" value="10" scope="session"></c:set>

输出变量:<%-- <c:out value="${num }"></c:out> --%>${num }

<c:remove var="num" scope="session"/>

输出变量:<c:out value="${num }" default="aaa"></c:out>
5.测试jsp动作标签之转发
     1.转发的同时可以携带请求的参数
     2.在网址后面进行拼接中间不要加注释
1.jsp
<%@ 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>jsp动作标签之转发</title>
</head>
<jsp:forward page="/2.jsp">
     <jsp:param value="wanlong" name ="username"/>
     <jsp:param value="123" name ="password"/>
</jsp:forward>
<!-- 测试 pageContext域 -->
<% /* 只能在本页面有效出了页面获取不到 */
pageContext.setAttribute("page", "pageContext");
%>
<body>
</html>
2.jsp
<%@ 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>Insert title here</title>
</head>
<body>
<%-- 获取转发中的参数 
     request.getAttribute("username")保存在参数中不是域中
--%>
<% pageContext.getAttribute("page");%> 
<%=request.getAttribute("username") %>
<%=request.getParameter("password") %>
<%=request.getParameter("username") %>
</body>
</html>
5.1测试域中的查找顺序
3.jsp
<%@ 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>
<!-- 测试域中的查找顺序 -->
<%
     /* 一般系统方法中 需要一个int参数 一般会是常量
        只要有pageContext 就能向各个域中添加值
        参数三 表示对应域的常量*/
        /* 思考:如何测试 同名时 查询域中值 */
     pageContext.setAttribute("p", "pageContext", PageContext.PAGE_SCOPE);
     pageContext.setAttribute("p", "request", PageContext.REQUEST_SCOPE);
     pageContext.setAttribute("p", "session", PageContext.SESSION_SCOPE);
     pageContext.setAttribute("p", "application", PageContext.APPLICATION_SCOPE);
%>
    <!-- 从小到大找 -->
   <%-- <%=pageContext.findAttribute("p")  %> --%>
   <!-- 使用el表达式 ,获取域中的数据 报错就重新粘贴一下
        实际上就是使用pageContext.findAttribute这个方法在域中查找-->
   ${p }
</body>
</html>
Demo01类
package com.lanou3g;

import javax.servlet.jsp.PageContext;

public class Demo01 {
      //查看pageCountext中的方法
    public void fun(PageContext pageContext) {
        //强大的pageCounttext可以获取任何域对象
        //从小到大
        pageContext.getRequest();
        pageContext.getSession();
//      pageContext.getServletConfig();
        pageContext.getServletContext();
        //强大的方法(el表达式,就依赖这个方法)
        //该方法会搜索所有的域对象 用key去取值
        //按域的大小 从小到大进行所有 找到就输出对应value
        //request < session < context 这个顺序搜索
        pageContext.findAttribute("key");
        }
}
5.2使用EL表达式读取保存在域中的对象
User类
public class User {
      private String username;
      private String password;
      //添加地址对象
      private Address address;
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + ", address=" + address + "]";
    }
    public User(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
}
Address类
public class Address {
   private String city;

public Address() {
    super();
    // TODO Auto-generated constructor stub
}

public Address(String city) {
    super();
    this.city = city;
}

@Override
public String toString() {
    return "Address [city=" + city + "]";
}

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}
}
4.jsp
<%@page import="com.lanou3g.Address"%>
<%@page import="com.lanou3g.User"%>
<%@ 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>Insert title here</title>
</head>
<body>
<!-- 域中 保存对象 使用el表达式获取 -->
<%
    User user = new User();
    user.setUsername("wanglong");
    user.setPassword("123");
    //添加地址对象
    Address address = new Address();
    address.setCity("zh");
    user.setAddress(address);
    out.print(user);
    out.print(user.getUsername());
    request.setAttribute("u", user);
%>
<!-- 相当于调用了get方法 前提是 必须有get方法
     如果user对象中有个属性也是个对象 -->
${u.username}
<!-- javaBean导航 通过调用get方法获取的直接使用点-->
${u.address.city }

<!-- 使用[]获取值
     使用[]要加引号
     如果域中保存的是一个集合怎么获取 -->
${u["username"] }
${u['username'] }
</body>
</html>
5.jsp
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@ 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>Insert title here</title>
</head>
<body>
<!-- 创建一个list集合 和map集合 添加几个值测试el表达式 -->
 <% 
    ArrayList<String> list = new ArrayList();
    list.add("1");
    list.add("2");
    list.add("3");
    request.setAttribute("list", list);
    HashMap<String,String> map = new HashMap();
    map.put("a", "aaaa");
    map.put("b", "bbbb");
    map.put("c", "cccc");
    request.setAttribute("map", map);
 %>
<!--  如果是集合的话只能使用中括号 -->
 ${list[0] }
 ${map.a }
 ${map['b'] }
</body>
</html>
6.jsp
<%@page import="java.util.ArrayList"%>
<%@ 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>Insert title here</title>
</head>
<body>
<!-- 使用el表达式 判断 empty是否为空 -->
<%
    String str1 = null;
    request.setAttribute("str1", str1);

    String str2 = "";
    request.setAttribute("str2", str2);

    ArrayList<String> list = new ArrayList();
    list.add("aaaa");
    request.setAttribute("list1", list);
    ArrayList<String> list2 = new ArrayList();
    request.setAttribute("list2", list2);

    ArrayList<String> list3 = null;
    request.setAttribute("list3", list3);
    String sex = "nan";
    request.setAttribute("s", sex);
%>
<!-- 判断是否为空 只要没有值就返回true-->
${empty str1 }
${empty str2 }
<!-- 判断集合中指向空 和 不添加值 返回啥 -->
${empty list1 }
${empty list2 }
${empty list3 }
<!-- 支持三目运算符 -->
${empty list3 ? "我是前面的":"我是后面的" }
<br/>
<!-- 根据域中的值 来默认选中男女 checked="checked"-->
<Input type="radio" value="nan" name="sex" ${s=="nan" ?  "checked='checked'" : ""}>男<br/>
<Input type="radio" value="nv" name="sex" ${s=="nv" ?  "checked='checked'" : ""}>女<br/>
</body>
</html>
7.jsp
<%@ 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>Insert title here</title>
</head>
<body>
<!-- 测试隐藏式对象 -->
<%
     pageContext.setAttribute("p", "pageContext", PageContext.PAGE_SCOPE);
     pageContext.setAttribute("p", "request", PageContext.REQUEST_SCOPE);
     pageContext.setAttribute("p", "session", PageContext.SESSION_SCOPE);
     pageContext.setAttribute("p", "application", PageContext.APPLICATION_SCOPE);
  %> 
  ${pageScope.p }
  ${requestScope.p }
  ${sessionScope.p }
  ${applicationScope.p }

</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值