一.EL表达式
作用:从作用域中获取指定属性名和共享数据.
${属性.子属性}
${属性["子属性"]}
User类
@Data
public class User {
private String name;
private int age;
private String[] address;
private List<String> hobbies;
private Map<String, Object> info;
public User() {
this.name = "dusk";
this.age = 18;
this.address = new String[] { "广州", "北京", "深圳", "上海" };
this.hobbies = Arrays.asList("java", "c++", "js", "easyUI");
Map<String, Object> map = new HashMap<>();
map.put("jiguan", "广东");
map.put("hunfou", false);
map.put("www.dusk.com", "dusk官网");
this.info = map;
}
}
el.jsp
<%@page import="com.dusk.smis._01_el.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>EL</title>
</head>
<body>
<%
//将用户对象设置作用域中
request.setAttribute("user", new User());
%>
<h3>获取User对象中所有信息</h3>
获取用户对象:${user }
<br> 获取用户名称:${user["name"] }
<br> 获取用户名称:${user.name }
<br> 获取用户第一个地址:${user.address[0] }
<br> 获取用户第一个爱好:${user.hobbies[0] }
<br> 获取用户籍贯:${user.info.jiguan }
<br> 获取用户官网:${user.info["www.dusk.com"] }
<br>
<%
pageContext.setAttribute("msg", "pageContext");
request.setAttribute("msg", "request");
session.setAttribute("msg", "session");
application.setAttribute("msg", "application");
%>
<h3>需求:从各个作用域中获取共享数据msg</h3>
使用java传统方式:
<br> pageContext:<%=pageContext.getAttribute("msg")%><br>
request:<%=request.getAttribute("msg")%><br> session:<%=session.getAttribute("msg")%><br>
<br> 使用El方式:
<br> pageContext:${pageScope.msg }
<br> request:${requestScope.msg }
<br> session:${sessionScope.msg }
<br> application:${applicationScope.msg}
<br>
</body>
</html>
二.EL表达式常用
- 在EL中获取上下文路径:
${pageContext.request.contextPath}
- 在EL中做运算(算术/比较)
${1 + 2} ${1 >2}
- 在EL中判断空
${empty 属性}
- 获取上下文对比
<h3>EL获取上下文路径:</h3>
写死方式:/mvc<br>
使用java方式:<%=request.getContextPath() %><br>
使用El表达式:${pageContext.request.contextPath}<br>
使用el方法:${pageContext.getRequest().getContextPath()}<br>
三.JSTL标签库(JSP标准标签库)
- 使用JSTL的准备:
- 加入jar包: taglibs-standard-impl-1.2.5.jar, taglibs-standard-spec-1.2.5.jar.
在Tomcat根/webapps/examples/WEB-INF/lib找到. - 通过JSP的taglib指令,引入标签库.
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
- 加入jar包: taglibs-standard-impl-1.2.5.jar, taglibs-standard-spec-1.2.5.jar.
四.分支标签
- 在<c:if> 体中不包括体的使用格式:
- 属性test: if 的条件, 是boolean表达式, 书写方式el表达式
- 属性var: 接收test属性结果
- scope: var 对应的属性放置哪一个作用域:默认page
<c:if test=”checkCondition” var=”varName” scope=”page|request|session|application”/>
- choose , when , otherwise 标签: 等价于java if…else if… else / switch
jstl_if.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">
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>El 的 if</title>
</head>
<body>
<h3>在if体中包括体的使用格式</h3>
需求:如果age大于18岁输出欢迎光临,否则输出18禁<br>
<%
request.setAttribute("age", 16);
%>
<c:if test="${age > 18 }">
欢迎光临
</c:if>
<c:if test="${age < 18 }">
十八禁
</c:if>
<h3>chose, when, otherwise 标签</h3>
<c:choose>
<c:when test="${age > 18 }">
欢迎光临
</c:when>
<c:when test="${age == 18} ">
你再考虑考虑~
</c:when>
<c:otherwise >
18禁
</c:otherwise>
</c:choose>
</body>
</html>
五.迭代标签
- 普通
for(int i = 0; i <= 100; i++)
<c:forEach var="" begin="" end="" step=""></c:forEach>
1. var: 循环的变量, 就是 i
2. begin: 循环变量的初始值: 就是0
3. end: 循环变量结束那个值: 就是100, 注意jsp中等
4. step: 步长, 默认1, 就是 ++
- 增强
for(String s : list)
<c:forEach var="" items="" varStatus=“”></c:forEach>
1. var:循环变量:就是 s
2. items: 循环的集合或者数组, 就是list
3. varStatus:每次循环信息包装对象
jstl_foreach.jsp
<%@page import="java.util.Arrays"%>
<%@ 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">
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jstl foreach</title>
</head>
<body>
<h3>打印0~100</h3>
<c:forEach var="i" begin="0" end="100" step="1">
${i}
</c:forEach>
<h3>遍历一个集合</h3>
<%
request.setAttribute("list", Arrays.asList("腻害","考虑","oop"));
%>
<c:forEach items="${list}" var="s" varStatus="vs">
${vs.index }--${vs.count }--${vs.first }--${vs.last }---${s }<br>
</c:forEach>
</body>
</html>
六.MVC
- 责任分离思想.
- M:Model,数据模型对象.(JavaBean)
- V:View,视图界面.(JSP,Panel,Window freemarker)
- C:Controller,控制器(Servlet)
七.WEB-CRUD
拷贝上一章节的smis
C 类UserServlet
@WebServlet("/userS")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private IUserDAO<User> iuser = new UserDAOImpl();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
// 1)获取参数
// 2)调用业务方法处理
String cmd = req.getParameter("cmd");
if ("delete".equals(cmd)) {
delete(req,resp);
} else if("edit".equals(cmd)) {
edit(req,resp);
}else if("saveOrEdit".equals(cmd)){
saveOrEdit(req,resp);
}else {
list(req,resp);
}
}
//跳转到编辑页面
private void edit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String id = req.getParameter("id");
//如果有id查出来
if (StringUtil.hasLength(id)) {
User user = iuser.query(Long.valueOf(id.trim()));
//设置共享资源
req.setAttribute("user", user);
}
req.getRequestDispatcher("/WEB-INF/views/user/edit.jsp").forward(req, resp);
}
//保存操作
private void saveOrEdit(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
String id = req.getParameter("id");
String username = req.getParameter("username");
String score = req.getParameter("score");
//判断命名和性别是否有有长度
if (StringUtil.hasLength(username) && StringUtil.hasLength(score)) {
User user = new User(null,username,Integer.valueOf(score));
//判断id是否有长度
if (StringUtil.hasLength(id)) {
user.setId(Long.valueOf(id.trim()));
iuser.update(user);
}else {
iuser.insert(user);
}
}
resp.sendRedirect(req.getContextPath() + "/userS");
}
//查询列表操作
private void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<User> list = iuser.queryAll();
// 设置共享参数
req.setAttribute("userList", list);
// 3)控制页面请求
req.getRequestDispatcher("/WEB-INF/views/user/list.jsp").forward(req, resp);
/* req.getRequestDispatcher("/WEB-INF/hello.html").forward(req, resp); */
}
//删除操作
private void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String id = req.getParameter("id").trim();
if (StringUtil.hasLength(id)) {
iuser.delete(Long.valueOf(id));
}
resp.sendRedirect(req.getContextPath() + "/userS");
}
}
V列表list.jsp
<%@page import="com.dusk.smis.domain.User"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>
<h1>学生信息表</h1>
<a href='${pageContext.getRequest().getContextPath()}/userS?cmd=edit'>添加</a>
<table border='1' cellpadding="0" cellspacing="0" width="80%">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>操作</th>
</tr>
<c:forEach items="${userList}" var="user" varStatus="infoU">
<tr>
<td>${user.getId() }</td>
<td>${user.getUsername()}</td>
<td>${user.getScore()}</td>
<td><a href= '${pageContext.getRequest().getContextPath()}/userS?cmd=delete&id=${user.getId()}'>删除</a>
| <a href='${pageContext.getRequest().getContextPath()}/userS?cmd=edit&id=${user.getId()}'>编辑</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
V编辑页面edit.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>
<h3>${empty user ? '添加' : 编辑}学生信息</h3><br>
<form action="${pageContext.getRequest().getContextPath()}/userS?cmd=saveOrEdit" method="post">
<input type="hidden" name='id' value="${user.id}"><br>
姓名:<input type="text" name='username' value='${user.username}'><br>
分数:<input type="text" name='score' value='${user.score}'><br>
<input type='submit' value='提交'><br>
</form>
</body>
</html>
八.细节
- 做完操作返回list.jsp时,不需要携带参数使用重定向,不然一直带参,会出现问题
- 编辑提交时要使用POST提交
- 上下文路径要使用通用方式获取
使用java方式:<%=request.getContextPath() %><br>
使用El表达式:${pageContext.request.contextPath}<br>
使用el方法:${pageContext.getRequest().getContextPath()}<br>
- 编辑和添加文字标题
<h3>${empty user ? '添加' : 编辑}学生信息</h3><br>