jstl
jstl其实是取代了脚本元素中的逻辑操作 例如 - 循环 分支(if)
el + jstl 取代了脚本元素
jsp中 html代码 和java代码不可以混搭 必须分开 (编写的难度复杂)
jstl: 标签标签库 , 就是一套接口 , 定义的是方法
重要:接口是sun公司定义的 , 需要导入接口的jar包 , 还需要导入实现类的jar包。
在jsp中引入jstl的jar包
<%-- taglib 专门用来引入第三方类库 prefix=“别名 , 取值无所谓(建议都取名为c)” uri=“引入的标签库地址” --%>
<%-- c标签是一个习惯 --%>
<%–<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>–%>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
forEach
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.llz.domain.User" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%-- taglib 专门用来引入第三方类库 prefix="别名 , 取值无所谓(建议都取名为c)" uri="引入的标签库地址" --%>
<%-- c标签是一个习惯 --%>
<%--<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--
增强循环
for(Object o : 集合){
sout(o)
}
<c:forEach items="放置集合数组的位置,支持el表达式" var="声明当前的临时变量,不需要类型,还会将该数据放入临时域(page)中">
循环体
</c:forEach>
--%>
<h1>增强循环</h1>
<h2>数组</h2>
<%
String [] myArray = {"a" , "b" , "c"};
request.setAttribute("myArray" , myArray);
%>
<c:forEach items="${myArray}" var="tempStr">
${tempStr}<br/>
</c:forEach>
<h2>集合List-字符串</h2>
<%
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
request.setAttribute("list" , list);
%>
<c:forEach items="${list}" var="tempStr">
${tempStr}
</c:forEach>
<h2>集合List-对象</h2>
<%
//矩形编译 alt + 鼠标左键
List<User> javaBeanList = new ArrayList<User>();
javaBeanList.add(new User("jack1" ,"rose1" , "1234"));
javaBeanList.add(new User("jack2" ,"rose2" , "1111"));
javaBeanList.add(new User("jack3" ,"rose3" , "2222"));
request.setAttribute("javaBeanList" , javaBeanList);
%>
<c:forEach items="${javaBeanList}" var="user">
${user} @@ ${user.username2} @@ ${user.nickname} @@ ${user.password} <br/>
</c:forEach>
<h2>集合Map-string,string</h2>
<%
//矩形编译 alt + 鼠标左键
Map<String , String > map = new HashMap<String ,String>();
map.put("a" , "b");
map.put("key1" , "value1");
map.put("xxx" , "张三");
request.setAttribute("map" , map);
%>
<%-- map的遍历有两种方式 1.keySet 2.entrySet--%>
<%--key=value key= value--%>
<c:forEach items="${map}" var="entry">
${entry} @@ ${entry.key} @@ ${entry.value} <br/>
</c:forEach>
<h1>普通循环</h1>
<%--
for(int i =0 ; i < 长度 ; i++){
循环体 sout(i)
}
<c:forEach begin="从哪开始" end= 在哪结束" step="步进,每次增加几" var="变量的名称,将数据放入临时域中"> 支持普通循环
循环体
</c:forEach>
--%>
<c:forEach begin="1" end="9" step="1" var="i">
${i}
</c:forEach>
<h1>扩展</h1>
<%--
varStatus : 当前变量的状态值 , 也会放入临时域中
index:表示,当前变量在集合中的索引值
count: 表示, 当前循环遍历了几次
--%>
<c:forEach items="${myArray}" var="tempStr" varStatus="status" >
${tempStr} @@ ${status.count} @@ ${status.index}<br/>
</c:forEach>
</body>
</html>
if
<%@ page import="com.llz.domain.User" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--
if 条件判断(分支) 顺序 循环 分支
if(条件表达式){
条件成立
}else{
条件不成立
}
el表达式中没有else
var="变量名称,将test中的条件表达式的结果 存入到某个变量中, 当test中的表达式结果为true时,则会执行本体内容"
var flag = ${5>3}
scope="" 将临时变量放入某个域中
<c:if test="条件表达式,支持el表达式" var="非必要属性" scope="非必要属性" >
条件成立
</c:if>
--%>
<c:if test="${5<3}" var="flag" scope="page">
大于
</c:if>
<c:if test="${not flag}">
小于
</c:if>
<%--<c:if test="${5<3}">
小于
</c:if>--%>
<hr/>
<%--
登录案例
--%>
<%
//放入数据 用户登录数据要放入session , 保证多次请求必须共享user数据的 而不是用一次就销毁了
//ServletContext(application) : 一个项目所有人共享同一份数据
//request放入的原因是, 可以演示俩种效果
//request.setAttribute("user" , new User("张三" , "jack" , "1234"));
%>
<c:if test="${empty user}">
对不起,请您登录
</c:if>
<c:if test="${not empty user}">
欢迎您,${user.username2}登录成功
</c:if>
</body>
</html>
MVC和三层(思想)
mvc
控制器Controller:对请求进行处理,负责请求转发;
视图View:界面设计人员进行图形界面设计;
模型Model:编写程序应用的功能(实现算法等等)、数据库管理;
jsp开发模式
在Java中 MVC的演化,jsp开发模式 实际上是 MVC在Java中具体实现