JSP——JavaWeb教案(五)
文章目录JSP介绍内置对象EL表达式运算符获取值语法获取字符串**获取对象**获取集合隐式对象JSTL标签介绍常用标签if**choose**foreach报错三层架构MVCJSP介绍jsp(java server page):java服务器端页面(一个特殊的页面)jsp基于BS架构我们开发的软件是服务端,用的是Tomcat服务器宏观理解:在HTML中嵌套java代码<%内容%><
文章目录
JSP
介绍
- jsp(java server page):java服务器端页面(一个特殊的页面)
- jsp基于BS架构
- 我们开发的软件是服务端,用的是Tomcat服务器
- 宏观理解:在HTML中嵌套java代码<%内容%>
<head>
<title>$Title$</title>
</head>
<body>
</body><p>你好jsp</p>
<%
System.out.println("你好,jsp。我是hello world");
%>
</html>
内置对象
JSP含有9中内置对象
EL表达式
概念:
Expression Language 表达式语言
作用:
替换和简化jsp页面中java代码的编写
语法:
${表达式}
注意:
jsp默认支持el表达式的。如果要忽略el表达式
-
设置jsp中page指令中 : isELIgnored="true"忽略当前jsp页面中所有的el表达式
-
\ ${表达式} : 忽略当前这个el表达式
运算符
-
算数运算符: +, -, * , / (div), %(mod)
-
比较运算符:>,<,>=,<=,==,!=
-
逻辑运算符: &&(and) | |(or) !(not)
-
空运算符: empty
-
-
-
功能:用于判断字符串、集合、数组对象是否为nul1或者长度是否为0
-
${empty list}
-
${not empty list}
-
- 取反
-
-
<h3>算术运算符</h3>
<p>${3+4}</p>
<p>${3/4}</p>
<p>${3 div 4}</p>
<p>${3%4}</p>
<p>${3 mod 4}</p>
<h3>比较运算符</h3>
<p>${3==4}</p>
<h3>逻辑运算符</h3>
<p>${3<=4&&5>=3}</p>
<p>${3<=4 and 5>=3}</p>
<h1>empty运算符<h1>
<%
String s = new String("avc");
List b = new ArrayList();
List c = null;
request.setAttribute("s",s);
request.setAttribute("b",b);
request.setAttribute("c",c);
%>
${empty b} true
${not empty c} false
${empty s} false
获取值
el表达式只能从域对象中获取值
语法
${域名称.键名} :从指定域中获取指定键的值
域名称:
-
pageScope --> pageContext
-
requestScope --> request
-
sessionScope–> session
-
applicationScope --> application (ServletContext)
获取字符串
举例:在request域中存储了name=张三
${requestScope . name}
${键名} :表示依次从最小的域中查找是否有该键对应的值,直到找到为止。(域的大小见域名城1-4)
- 简化书写,适合四个域名所存的键都不一样的数据
注意:以上的这种方式只能获取字符串
//假如在jsp中往servlet中存储
<% session.setAttribute("name","李四");%>
<% request.setAttribute("name","张三");%>
<% session.setAttribute("age","18");%>
//获取
${requestScope.get("name")}; 张三
${sessionScope.get("age")} 18
<%--不存在的--%>
${sessionScope.get("hahaha")} 什么都不显示
${name} 张三。如果想获取李四,还是要加上sessionScope
获取对象
<%
User user = new User();
user.setName("张三");
user.setAge(18);
user.setBirthday(new Date());
request.setAttribute("use",user);
%>
<%--获取user对象。如果获取具体的对象的值,需要获取对象的属性。即set/get之后的名称--%>
${requestScope.use} cn.itcast.doman.User@69dd90f2
${requestScope.use.name} 张三
${requestScope.use.birthday} Mon Jul 20 10:25:41 CST 2020
${requestScope.use.birStr} 2020-29-20 10:07:441
获取集合
List集合:
- ${域名称.键名[索引]}
Map集合:
-
${域名称.键名. key名称}
-
${域名称.键名[“key名称”]}
<%
User user = new User();
user.setName("张展");
user.setAge(18);
user.setBirthday(new Date());
request.setAttribute("use",user);
List a = new ArrayList();
a.add("aaa");
a.add("bbb");
a.add("ccc");
//添加对象到容器
a.add(user);
Map map = new HashMap();
map.put("name","13");
//添加对象到集合
map.put("user",user);
//添加到共享数据
request.setAttribute("list",a);
request.setAttribute("map",map);
%>
<h1>容器和集合</h1>
${list[0]} aaa
${list[1]} bbb
${list[2].name} 张展
${map.age} 13
${map["user"].name}张展
隐式对象
el表达式中有11个隐式对象
- pageContext :获取jsp其他八个内置对象
- ${pageContext . request . contextPath} :动态获取虚拟目录
<h1>动态获取虚拟目录,防止虚拟目录改变时,一步一步的更改虚拟目录</h1>
${pageContext.request.contextPath}
<form action="${pageContext.request.contextPath}" method="post">
</form>
JSTL标签
介绍
概念: JavaServer Pages Tag Library JSP标准标签库。是由Apache组 织提供的开源的免费的jsp标签 <标签>
作用:用于简化和替换jsp页面上的java代码
使用步骤:
-
导入jstl相关jar包
-
引入标签库: taglib指令: <%@ taglib %> <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
-
使用标签
-
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
常用标签
if
属性:
test必须属性,接受boolean表达式
如果表达式为true,则显示if标签体内容,如果为false, 则不显示标签体内容
一般情况下,test属性值会结合el表达式一起使用
注意:
c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签
<%
List array = new ArrayList();
array.add("aa");
request.setAttribute("array",array);
request.setAttribute("number",3);
%>
<%--判断array是否为空,如果不为空,则显示遍历集合--%>
<c:if test="${not empty requestScope.array}">遍历集合</c:if>
<c:if test="${number%2==1}">
<h1>number是奇数<h1>
</c:if>
<c:if test="${number%2==0}">
<h1>number是偶数<h1>
</c:if>
举例:
<div class="layui-input-block">
<c:if test="${requestScope.movement.equals('look')}">
<textarea id="content" disabled="disabled" name="content" required lay-verify="required" placeholder="请输入" class="layui-textarea">${requestScope.blog.content}</textarea>
</c:if>
<c:if test="${requestScope.movement.equals('change')}">
<textarea name="content" required lay-verify="required" placeholder="请输入" class="layui-textarea">${requestScope.blog.content}</textarea>
</c:if>
<c:if test="${requestScope.movement.equals('write')}">
<textarea name="content" required lay-verify="required" placeholder="请输入" class="layui-textarea" >${requestScope.content}</textarea>
</c:if>
</div>
choose
相当于switch
完成数字编号对应星期几案例
-
域中存储一数字
-
使用choose标签取出数字 相当于switch声明
-
使用when标签做数字判断 相当于 case
-
otherwise标签做其他情况的声明 相当于default
<% request.setAttribute("number",1); %>
<c:choose >
<c:when test="${number==1}">星期1</c:when> //星期一
<c:when test="${number==2}">星期2</c:when>
<c:when test="${number==3}">星期3</c:when>
<c:when test="${number==4}">星期4</c:when>
<c:when test="${number==5}">星期5</c:when>
<c:when test="${number==6}">星期6</c:when>
<c:when test="${number==7}">星期7</c:when>
<c:otherwise>输入有误</c:otherwise>
</c:choose>
foreach
相当于for循环
完成重复的操作
属性:
- begin:开始值
- end:结束值
- var:临时变量
- step:步长
- varStatus :循环状态对象
- index:容器中元素的索引,从o开始
- count :循环次数,从1开始
<c:forEach begin="0" end="10" var="b" step="1" varStatus="s">
${b} ${s.index} ${s.count};
<br>
</c:forEach>
遍历容器
List list;
for(User user : list){}
属性:
- items :容器对象
- var:容器中元素的临时变量
- varStatus :循环状态对象
- index :容器中元素的索引,从o开始
- count :循环次数,从1开始
<%
List<String> list =new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list",list);
%>
<c:forEach items="${list}" var="list" varStatus="s">
${s.index} ${s.count} ${list}
</c:forEach>
将数据写到表格
<%
List list= new ArrayList();
list.add(new User("张展",18,new Date()));
list.add(new User("张文",17,new Date()));
list.add(new User("张一闪",28,new Date()));
request.setAttribute("list",list);
%>
<%--设置编号为奇数的背景颜色为黄色,偶数的背景颜色为红色--%>
<table border="2" width="500">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>出生日期</th>
</tr>
<c:forEach items="${list}" var="list" varStatus="s">
<c:if test="${s.count%2==0}">
<tr bgcolor="red">
<td>${s.count}</td>
<td> ${list.name}</td>
<td>${list.age}</td>
<td>${list.birStr}</td>
</tr>
</c:if>
<c:if test="${s.count%2!=0}">
<tr bgcolor="green">
<td>${s.count}</td>
<td> ${list.name}</td>
<td>${list.age}</td>
<td>${list.birStr}</td>
</tr>
</c:if>
<br>
</c:forEach>
</table>
举例
<c:forEach items="${pageSearch.blogs}" var="blog" varStatus="s">
<tr>
<td><input type="checkbox" id="${blog.id}" name="blogId" class="select-message" value="${blog.id}">${s.count}</td>
<td>${blog.title}</td>
<td>${blog.author}</td>
<td>${blog.upDate}</td>
<td><a href="/aishangboke/lookBlogServlet?id=${blog.id}&state=look&now=myblog">查看博客</a></td>
<%-- 单条记录的删除修改--%>
<td>
<button type="button" class="layui-btn"><a href="/aishangboke/lookBlogServlet?id=${blog.id}&state=change">修改</a></button>
<button type="button" class="layui-btn" id="delete-button" >
<%-- <a href="javascript:deleteMessage()">删除</a>--%>
<a href="/aishangboke/deleteBlogServlet?id=${blog.id}&page=${pageSearch.page}&now=myblog">删除</a>
</button>
</td>
</tr>
</c:forEach>
报错
[(103条消息) 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:http://java.sun.com/jsp/jstl/core]_m0_50804764的博客-CSDN博客
三层架构
- View层:表现层,视图层。结构用户提交的请求(Controller)
- Service层:业务层,逻辑层。系统的主要逻辑
- Dao层:持久层,数据访问层。此操作数据库
Service和Dao使用的是面向抽象(接口)编程的思想。
上传对下层的使用是接口,下层对上层的服务是实现。
接口只有一个,但是实现类有多个,但是这些实现类都需要遵从这些接口规范。
MVC
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
-
M model javabean对象
-
V view html/jsp
-
C controller Servlet
-
- 接收请求,javabean封装,调用业务层(service)处理,再访问数据库(dao)
- 业务层返回的数据,返回到javabean当中,通过jsp转发,在浏览器上响应
- 数据的传输使用的是model对象
- 中间的数据封装成model进行传输
更多推荐
所有评论(0)