EL与JSTL

EL表达式

1.含义:是为了简化jsp代码,具体一点就是为了简化在jsp里面写的那些java代码
2.写法格式${表达式 }
3.如何使用?
1)取出4个作用域中存放的值

${ pageScope.name }
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }

2)如果域中存的值是数组,取出值

<% 
  String[] a = {“aa”, “bb”, “cc”, “dd”};
	pageContext.setAttribute(“aary”, a);
%>
<!--输出值-->
${array[0]}, ${array[1]}, ${array[2]}, ${array[3]}

3)如果域中存的值是列表,取出值

<% 
    List list = new ArrayList();
	List.add(“11”);list.add(“22”);list.add(“33”);
	pageContext.setAttribute(“li”,list);
%>
<!--输出值-->
${li[0]}, ${li[1]}, ${li[2]}, ${li[3]}

3)如果域中存的值是Map,取出值

<%
    Map map = new HashMap(); 
	map.put(“name”,”zhangsan”);
	map.put(“age”,18);
	map.put(“address”,”beijing”);
	map.put(“address.aa”,”shenzhen”);
	pageContext.setAttribute(“map”, map);
%>
<!--输出值-->
${map.name},${map.age},${map.address},${map[“address.aa”]}

4.作用域的查找顺序:先是page,其次是request,再次是session,最后application。
p a g e S c o p e . n a m e 是 直 接 从 p a g e S c o p e 中 去 找 5. 取 值 方 式 : 如 果 这 份 值 是 有 下 标 的 , 那 么 直 接 使 用 [ ] , 即 {pageScope.name}是直接从pageScope中去找 5.取值方式:如果这份值是有下标的,那么直接使用[],即 pageScope.namepageScope5.使[]{array[0]};如果没有下标,直接使用.的方式去取,即 s e s s i o n S c o p e . n a m e 。 6. 一 般 e l 表 达 式 用 的 最 多 的 都 是 从 一 个 对 象 中 取 出 它 的 属 性 值 , 比 如 取 出 某 一 个 学 生 的 姓 名 。 7. E l 表 达 式 的 11 个 内 置 对 象 : 除 p a g e C o n t e x t 外 其 他 都 是 m a p 的 用 法 即 用 . 的 方 式 — — {sessionScope.name}。 6.一般el表达式用的最多的都是从一个对象中取出它的属性值,比如取出某一个学生的姓名。 7.El表达式的11个内置对象:除pageContext外其他都是map的用法即用.的方式—— sessionScope.name6.el7.El11pageContextmap.{对象名.成员}

-pageContext
-pageScope
-requestScope
-sessionScope
-aplicationScope

以上为作用域相关对象

-header
-headerValues

以上为头信息相关对象

-Param如获取${param.address}
-params

参数相关对象

-initParam
-cookie

全局初始化参数

JSTL

1.全称:java standard tag library。简化jsp的代码编写,替换<%%>,一般与el表达式进行配合使用
2.怎么使用?
1)在WebContent/Web-Inf/lib安装包中安装jstl.jar,standard.jar,
2)在jsp页面中使用taglib指令,引入标签库
3)注意:如果想支持el表达式,那么引入的标签库必须选择1.1的版本,1.0的版本不支持el表达式

<%@ taglib prefix=”c”uri=”http://java.sun.com/jsp/jstl/core”%>

3.常用的jstl有:
<c:set var=”name” value=”zhangsasn” scope=”session”><c:set>//存入session域中——声明一个对象name,对象的值zhangsan,存储到了page(默认)
c:if<c:if test=”${age > 16}”>年龄大于了16岁...<c:if>——判断test里面的表达式是否满足,如果满足,就执行
<c:foreach begin=”1” end=”10” var=”i” step=”1” items=“${list}”>${i}<c:foreach>——从1开始遍历到10,得到的结果赋值给i,并且会存储到page中,step为步数,list为遍历的对象

学生管理系统

在这里插入图片描述

  1. 首先写login.jsp,并且搭建一个LoginServlet去获取登录信息。
<%@ 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>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h3>欢迎使用学生管理系统</h3>
    <form action="loginServlet" mathod="post">
         账号:<input type="text" name="username"/><br>
         密码:<input type="text" name="password"/><br>
              <input type="submit" value="登录">
    </form>
</body>
</html> 
public class LoginServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html;charset=utf-8");
		
		//1.获取客户端提交的信息
		String userName = req.getParameter("username");
		String passWord = req.getParameter("password");
		
		//2.去访问dao,看看是否满足登录
		System.out.println("username="+userName + "-->password=" +passWord );
		UserDao dao = new UserDaoImpl();
		
		//3.针对dao的返回结果,做出响应
		boolean isSuccess = dao.login(userName, passWord);
		if(isSuccess) {
//			resp.getWriter().write("登录成功!");
			//1.查询出所有的学生信息
			StuDao stuDao = new StuDaoImpl();
			List<Student> list = stuDao.findAll();
			
			//2.先把这个集合存到作用域中
			req.getSession().setAttribute("list", list);
			
			//3.重定向
			resp.sendRedirect("stu_list.jsp");
		}else {
			resp.getWriter().write("用户名或者密码错误!");
		}
	}
  1. 创建用户表,里卖弄只要有id,username和password。
    在这里插入图片描述

  2. 创建UserDao,定义登录的方法

public interface UserDao {
	/**
	 * 这里简单就返回一个Boolean类型,成功或者失败即可
	 * 但开发的时候,登录的方法,一旦成功,这里应该返回该用户的个人信息
	 * @param userName
	 * @param password
	 * 返回true表是登录成功
	 */
	boolean login(String userName, String password);
}
  1. 创建UserDaoImpl,实现刚才定义的登录方法
public class UserDaoImpl implements UserDao {
	
	public boolean login(String userName, String password) {
		Connection connection = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			//1.得到链接对象
			connection = JDBCUtil.getConn();
			String sqlString  = "select * from t_user where username=? and password=?";
			//2.创建ps对象
			ps = connection.prepareStatement(sqlString);
			ps.setString(1, userName);
			ps.setString(2, password);
			
			//3.开始执行
			rs = ps.executeQuery();
			//如果能够成功移到下一条记录,那么表明有这个用户
			return rs.next();
			
		}catch(SQLException e){
			e.printStackTrace();
		}finally {
			JDBCUtil.release(connection, ps, rs);
		}
		
		return false;
	}

}
  1. 在LoginServlet里面访问UserDao,判断登录结果,以区分对待
  2. 创建stu_list.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>
<html>
<head>
<meta charset="UTF-8">
<title>学生信息管理系统</title>
</head>
<body>
    <br>学生列表<br>
    <table border="1" width="700">
        <tr align="center">
            <td>编号</td>
            <td>姓名</td>
            <td>年龄</td>
            <td>性别</td>
            <td>住址</td>
        </tr>
        <c:forEach items="${sessionScope.list}" var="stu">
            <tr align="center">
	            <td>${stu.id }</td>
	            <td>${stu.name }</td>
	            <td>${stu.age }</td>
	            <td>${stu.gender }</td>
	            <td>${stu.address }</td>
            </tr>
        </c:forEach>
        
    </table>
</body>
</html>
  1. 创建学生表,里面字段随意
    在这里插入图片描述
  2. 定义学生的Dao即StuDao
public interface StuDao {
	/**
	 * 查找出所有的学生,并返回list集合
	 * @return
	 */
	List<Student> findAll();
}
  1. 对上面定义的StuDao做出实现StuDaoImpl
public class StuDaoImpl implements StuDao{

	public List<Student> findAll() {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Student> list = new ArrayList<Student>();
		
		try {
			//1.得到链接对象
			conn = JDBCUtil.getConn();
			String  sql = "select * from t_stu";
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			
			while(rs.next()) {//10次,10个学生
				Student stu = new Student();
				stu.setId(rs.getInt("id"));
				stu.setAge(rs.getInt("age"));
				stu.setName(rs.getString("name"));
				stu.setGender(rs.getString("gender"));
				stu.setAddress(rs.getString("address"));;
				list.add(stu);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}

}
  1. 在登录成功的时候,完成三件事情
    1)查询所有学生
    2)把这个所有的学生集合存储到作用域中
    3)跳转到stu_list.jsp中
  2. 在stu_list.jsp中,取出域中的集合,然后使用c标签,去遍历集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值