1.MVC

一.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表达式常用

  1. 在EL中获取上下文路径:
${pageContext.request.contextPath}
  1. 在EL中做运算(算术/比较)
${1 + 2}   ${1 >2}
  1. 在EL中判断空
${empty 属性}
  1. 获取上下文对比
<h3>EL获取上下文路径:</h3>
写死方式:/mvc<br>

使用java方式:<%=request.getContextPath() %><br>
使用El表达式:${pageContext.request.contextPath}<br>
使用el方法:${pageContext.getRequest().getContextPath()}<br>

三.JSTL标签库(JSP标准标签库)

  1. 使用JSTL的准备:
    1. 加入jar包: taglibs-standard-impl-1.2.5.jar, taglibs-standard-spec-1.2.5.jar.
      在Tomcat根/webapps/examples/WEB-INF/lib找到.
    2. 通过JSP的taglib指令,引入标签库.
      <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

四.分支标签

  1. 在<c:if> 体中不包括体的使用格式:
    1. 属性test: if 的条件, 是boolean表达式, 书写方式el表达式
    2. 属性var: 接收test属性结果
    3. scope: var 对应的属性放置哪一个作用域:默认page
<c:if test=”checkCondition” var=”varName” scope=”page|request|session|application”/>
  1. 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>

五.迭代标签

  1. 普通
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, 就是 ++
  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

  1. 责任分离思想.
  • M:Model,数据模型对象.(JavaBean)
  • V:View,视图界面.(JSP,Panel,Window freemarker)
  • C:Controller,控制器(Servlet)

七.WEB-CRUD

拷贝上一章节的smis

image

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>

八.细节

  1. 做完操作返回list.jsp时,不需要携带参数使用重定向,不然一直带参,会出现问题
  2. 编辑提交时要使用POST提交
  3. 上下文路径要使用通用方式获取
使用java方式:<%=request.getContextPath() %><br>
使用El表达式:${pageContext.request.contextPath}<br>
使用el方法:${pageContext.getRequest().getContextPath()}<br>
  1. 编辑和添加文字标题
<h3>${empty user ? '添加' : 编辑}学生信息</h3><br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值