您的位置:首页 > Web前端 > JavaScript

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

2019-03-06 21:06 295 查看

分析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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐