Jsp笔记 包含el表达式,jstl标签库, c标签, fmt 子库的基本使用

分析servlet存在弊端

开发:继承HttpServlet,覆盖service方法。
代码的修改:需要重新编译
对于显示的servlet:所有的html标签都是通过流输出的,麻烦;

JSP(Java Server Page)

 概念:JSP是运行于服务器端 的 生成动态页面的技术,是servlet的升级。
 作用:用于替换现有项目中负责显示的servlet

开发一个jsp

1.创建一个web项目
2。在webroot下创建一个*.jsp的文件//不能放到WEB-INF下 此文件夹受保护
3.编写jsp//html标签与java代码
4.部署项目
5.访问

Jsp与Jsp之间的传值 el表达式 获取 request作用域中 自定义对象 的值

1.第一种形式 <a href=""?1d=></a> param取值 作为get提交方式 传对象不支持
在一个页面用超链接加?属性名=需要传的属性值传值,在另一个页面用 el表达式取值  ${param.属性名} 就可以获取属性对应的值
eg:
Test1.jsp 超链接 跳转 传值 中带值 跳到 Test2.jsp中
<a href="/jsp_day3/Test2.jsp?name=张三&password=123456&birthday=1998-10-10">点我跳转</a>
Test2.jsp取值
${param.name} //输出结果 张三
${param.password}//输出结果 123456
${param.birthday}//输出结果 1998-10-10

eg:  存值跳转 <a href="/t_Book/Test2.jsp?name=a&password=123456&birthday=1992.12.23">点我跳转</a>
     取值
            ${param.name}
            ${param.password}
            ${param.birthday}

2.forward 请求转发

eg:把Test1.jsp中存入的值传到Test2.jsp中
第一步:Test1.jsp中代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="com.entity.T_User1"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试用forward请求转发进行页面间的传值</title>
</head>
<body>

<%
	//相当于java后台代码
    T_User1 user1 = new T_User1 ();
    user1.setUsername ("bbbbbjjfg");
    user1.setPassword ("111111");
	//存值用request作用域
    request.setAttribute ("user1",user1);
  RequestDispatcher requestDispatcher = request.getRequestDispatcher ("/Test2.jsp");
    requestDispatcher.forward (request,response);
%>
</body>
</html>

第二步:Test2.jsp中代码
<%@page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>El表达式取值2</title>
</head>
<body>
    <!-- el表达式 获取 request作用域中 自定义对象 的值-->
    <!-- 方式一-->
    ${requestScope.user1.username}
    <!-- 方式二-->
    ${requestScope.user1.getUsername()}
    <!-- 方式三-->
    ${user1.username}
    ${requestScope.user1.password}
</body>
</html>

el表达式 获取数组的值 用request作用域存取 (其他两种作用域可以使用,此处举其中一列说明)

 //定义一个数组
    String[] ss = {"aa","bb","cc","dd"};
    //用 request 作用域存值
    request.setAttribute ("arr",ss);

<!-- el表达式 获取 request作用域中 数组 的值-->
<c:forEach var="arr" items="${requestScope.arr}">
  ${arr}
</c:forEach>

el表达式 获取 自定义对象的值 用request作用域存取 (其他两种作用域可以使用,此处举其中一列说明)

样例代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="com.entity.T_User1"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title> 获取 自定义对象的值</title>
</head>
<body>

<%
    T_User1 user1 = new T_User1 ();
    user1.setUsername ("bbbbbjjfg");
    user1.setPassword ("111111");
    T_User1 user2 = new T_User1 ("100","cc","222222");
    T_User1 user3 = new T_User1 ("101","d","222222");
    T_User1 user4 = new T_User1 ("102","e","222222");
    T_User1 user5 = new T_User1 ("103","f","222222");
    ArrayList<T_User1> t_user1s = new ArrayList<T_User1> ();
    t_user1s.add (user1);
    t_user1s.add (user2);
    t_user1s.add (user3);
    t_user1s.add (user4);
    t_user1s.add (user5);
    //存值用request作用域
    request.setAttribute ("user1",user1);
    session.setAttribute ("userlist",t_user1s);
%>
<!-- el表达式 获取 request作用域中 自定义对象 的值-->
<!-- 方式一-->
${requestScope.user1.username}
<!-- 方式二-->
${requestScope.user1.getUsername()}
<!-- 方式三-->
${user1.username}
${requestScope.user1.password}
</body>
</html>

el表达式 取Session作用域中取list集合 (其他两种作用域可以使用,此处举其中一列说明)

样例代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="com.entity.T_User1"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试用forward请求转发进行页面间的传值</title>
</head>
<body>

<%
    T_User1 user1 = new T_User1 ();
    user1.setUsername ("bbbbbjjfg");
    user1.setPassword ("111111");
    T_User1 user2 = new T_User1 ("100","cc","222222");
    T_User1 user3 = new T_User1 ("101","d","222222");
    T_User1 user4 = new T_User1 ("102","e","222222");
    T_User1 user5 = new T_User1 ("103","f","222222");
    ArrayList<T_User1> t_user1s = new ArrayList<T_User1> ();
    t_user1s.add (user1);
    t_user1s.add (user2);
    t_user1s.add (user3);
    t_user1s.add (user4);
    t_user1s.add (user5);
    //存值用request作用域
    request.setAttribute ("user1",user1);
    session.setAttribute ("userlist",t_user1s);
%>
<!-- 从 session 作用域中区 list集合中的值-->
<!--遍历输出  并渲染到表格-->
<table width="50%" bgcolor="red" cellspacing="1" cellpadding="1" border="1">
    <tr>
        <td>编号</td>
        <td>用户名</td>
        <td>id</td>
        <td>密码</td>
    </tr>
    <!-- varStatus="stu" 给数据字动编号 -->
<c:forEach var="list" items="${sessionScope.userlist}" varStatus="stu">
    <tr>
        <td>${stu.index+1}</td>
        <td>${list.username}</td>
        <td>${list.id}</td>
        <td>${list.password}</td>
    </tr>
</c:forEach>
</body>
</html>

用 ServletContext 作用域 取 map 集合的值 (其他两种作用域可以使用,此处举其中一列说明)


样例代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="com.entity.T_User1"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Session作用域中取list集合</title>
</head>
<body>
<%
    T_User1 user1 = new T_User1 ();
    user1.setUsername ("bbbbbjjfg");
    user1.setPassword ("111111");
    T_User1 user2 = new T_User1 ("100","cc","222222");
    T_User1 user3 = new T_User1 ("101","d","222222");
    T_User1 user4 = new T_User1 ("102","e","222222");
    T_User1 user5 = new T_User1 ("103","f","222222");
    ArrayList<T_User1> t_user1s = new ArrayList<T_User1> ();
    t_user1s.add (user1);
    t_user1s.add (user2);
    t_user1s.add (user3);
    t_user1s.add (user4);
    t_user1s.add (user5);
    HashMap<String,T_User1> map = new HashMap<String,T_User1> ();
    map.put ("第一个",user1);
    map.put ("第二个",user2);
    map.put ("第三个",user3);
    map.put ("第四个",user4);
    //存值用request作用域
    request.setAttribute ("user1",user1);
    //存值用session作用域
    session.setAttribute ("userlist",t_user1s);
    //存值用 servletContext
    ServletContext servletContext = session.getServletContext ();
    servletContext.setAttribute ("mapname",map);
  /*  RequestDispatcher requestDispatcher = request.getRequestDispatcher ("/Test2.jsp");
    requestDispatcher.forward (request,response);*/
%>

<!--map 集合遍历输出-->
<table width="50%" bgcolor="red" cellspacing="1" cellpadding="1" border="1">
    <tr>
        <td>编号</td>
        <td>用户名</td>
        <td>id</td>
        <td>密码</td>
    </tr>

    <!-- varStatus="stu" 给数据字动编号 -->
<c:forEach var="map" items="${applicationScope.mapname}" varStatus="stu">
    <tr>
        <td>${stu.index+1}</td>
        <td>${map.key}is${map.value.username}</td>
        <td>${map.key}is${map.value.id}</td>
        <td>${map.key}is${map.value.password}</td>           
    </tr>
</c:forEach>
</table>
</body>
</html>

总体样例代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="com.entity.T_User1"%>
<%@ page import="java.net.URL" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>作用域中取值</title>
</head>
<body>
<%
    T_User1 user1 = new T_User1 ();
    user1.setUsername ("bbbbbjjfg");
    user1.setPassword ("111111");
    T_User1 user2 = new T_User1 ("100","cc","222222");
    T_User1 user3 = new T_User1 ("101","d","222222");
    T_User1 user4 = new T_User1 ("102","e","222222");
    T_User1 user5 = new T_User1 ("103","f","222222");
    ArrayList<T_User1> t_user1s = new ArrayList<T_User1> ();
    t_user1s.add (user1);
    t_user1s.add (user2);
    t_user1s.add (user3);
    t_user1s.add (user4);
    t_user1s.add (user5);
    HashMap<String,T_User1> map = new HashMap<String,T_User1> ();
    map.put ("第一个",user1);
    map.put ("第二个",user2);
    map.put ("第三个",user3);
    map.put ("第四个",user4);
    //存值用request作用域
    request.setAttribute ("user1",user1);
    //存值用session作用域
    session.setAttribute ("userlist",t_user1s);
    //存值用 servletContext
    ServletContext servletContext = session.getServletContext ();
    servletContext.setAttribute ("mapname",map);
    //定义一个数组
    String[] ss = {"aa","bb","cc","dd"};
    //用 request 作用域存值
    request.setAttribute ("arr",ss);

  /*  RequestDispatcher requestDispatcher = request.getRequestDispatcher ("/Test2.jsp");
    requestDispatcher.forward (request,response);*/
%>
<!-- el表达式 获取 request作用域中 数组 的值-->
<c:forEach var="arr" items="${requestScope.arr}">
  ${arr}
</c:forEach>

<!-- el表达式 获取 request作用域中 自定义对象 的值-->
<!-- 方式一-->
${requestScope.user1.username}
<!-- 方式二-->
${requestScope.user1.getUsername()}
<!-- 方式三-->
${user1.username}
${requestScope.user1.password}

<!--从applicationScope作用域中取值遍历map集合输出-->
<table width="50%" bgcolor="red" cellspacing="1" cellpadding="1" border="1">
    <tr>
        <td>编号</td>
        <td>用户名</td>
        <td>id</td>
        <td>密码</td>
    </tr>
    <!-- varStatus="stu" 给数据字动编号 -->
<c:forEach var="map" items="${applicationScope.mapname}" varStatus="stu">
    <tr>
        <td>${stu.index+1}</td>
        <td>${map.key}is${map.value.username}</td>
        <td>${map.key}is${map.value.id}</td>
        <td>${map.key}is${map.value.password}</td>
    </tr>
</c:forEach>
</table>
    <!--从session作用域中取值遍历list集合输出-->
<table width="50%" bgcolor="red" cellspacing="1" cellpadding="1" border="1">
    <tr>
        <td>编号</td>
        <td>用户名</td>
        <td>id</td>
        <td>密码</td>
    </tr>
    <!-- varStatus="stu" 给数据字动编号 -->
    <c:forEach var="list" items="${sessionScope.userlist}" varStatus="stu">
        <tr>
            <td>${stu.index+1}</td>
            <td>${list.username}</td>
            <td>${list.id}</td>
            <td>${list.password}</td>
        </tr>
    </c:forEach>
</table>

<h15秒后自动跳转</h1>
<% response.setHeader("Refresh","5,URL=t.jsp"); %>
<!--每隔一秒自动刷新-->
<% response.addIntHeader("Refresh",1);%>

<!--c标签 分支判断 只有条件为true时才在页面输出结果-->
<%
    request.setAttribute ("aa",90);
    request.setAttribute ("bb",70);
    request.setAttribute ("cc",30);
%>
<c:if test="${requestScope.aa>80}">优秀</c:if><!-- 结果为true 展示-->
<c:if test="${requestScope.bb>60}">良好</c:if><!-- 结果为true 展示-->
<c:if test="${requestScope.cc>50}">不及格</c:if><!-- 结果为false 展示-->
<c:if test=""></c:if>

<!-- 无效果,包括字符串中所有信息包括body h1 标签-->
<c:out value="<body><h1>ddxxc</h1></body>" escapeXml="true"></c:out>
<!-- 输出有效果-->
<c:out value="<body><h1>ddxxc</h1></body>" escapeXml="false"></c:out>
    Cookie
     <%
        Cookile cookile = new Cookile ("username", "svalue");
    %>
${cookile.username.name}
${cookile.username.value}
//日期输入标签
<input type="date" />
jstl标签库(java standard tag library)
在当前jsp页面导入核心标签库
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
使用标签:<c:标签名字 属性名="属性值"></....>
标签中的属性的值一般是通过 el(${}) 表达式从作用域中取出
1.<c:if></c:if> 作用:做分支判断
	<c:if test="${requestScope.aa>80}">优秀</c:if><!-- 结果为true 展示-->
	<c:if test="${requestScope.bb>60}">良好</c:if><!-- 结果为true 展示-->
	<c:if test="${requestScope.cc>50}">不及格</c:if><!-- 结果为false 展示-->
2.<c:forEach></c:forEach> 作用:遍历集合或数组(遍历集合包括:list、map)
	  <c:forEach var="list" items="${sessionScope.userlist}" varStatus="stu">
        <tr>
            <td>${stu.index+1}</td>
            <td>${list.username}</td>
            <td>${list.id}</td>
            <td>${list.password}</td>
        </tr>
    </c:forEach>
	
3.<c:choose></c:choose> 类似于 switch(){case:}
eg:<c:choose>
	<c:when test="${age>0&&age<12}">少年</c:when>
	<c:when test="${age>=12&&age<=18}">青年</c:when>
	<c:when test="${age>18&&age<=30}">壮年</c:when>
   </c:choose> 
4.<c:set></c:set> 作用:向作用域中存值
解释说明:value="90"向指定作用域中命名属性存值
          var="age"向指定作用域中存储命名属性
          secope="request"指定存储作用域
eg:<c:set value="90" var="age" secope="request"></c:set>
5<c:remove></c:remove>作用:向作用域中移除
解释说明: var="age"移除命名属性  scope="request"移除作用域
eg:<c:remove var="age" scope="request"></c:remove>

6<c:out></c:out> 作用:向页面输出结果 相当于 out.println()
 解释说明:当前值为true会原样输出value指定的值
          当前值为false会按照标签解析输出结果
<c:out value="<body><h1>xxxxx</h1></body>" escapexml="false"></c:out>

7<c:redirect></c:redirect> 作用:重定向
eg:<c:redirect url="/index.jsp"></c:redirect> //jsp重定向jsp之间不需要加(项目名)应用名
8<c:url></c:url> 作用:表示一个url,当浏览器 cookie 被禁用的时候,会自动完成重写

9<c:import url="指定导入目标资源路径"></c:import>

使用 fmt 子库

使用 fmt 子库
第一步 导入该库
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt"%>

<!--日期格式化展示-->
<fmt:formatDate value="${requestScope.date}" pattern="yyyy-MM-dd :hh :mm:ss"></fmt:formatDate>
<!--格式化数字-->
 <fmt:formatNumber var="${1/1}" pattern="0"></fmt:formatNumber>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值