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.name是直接从pageScope中去找5.取值方式:如果这份值是有下标的,那么直接使用[],即{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.name。6.一般el表达式用的最多的都是从一个对象中取出它的属性值,比如取出某一个学生的姓名。7.El表达式的11个内置对象:除pageContext外其他都是map的用法即用.的方式——{对象名.成员}
-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为遍历的对象
学生管理系统
- 首先写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("用户名或者密码错误!");
}
}
-
创建用户表,里卖弄只要有id,username和password。
-
创建UserDao,定义登录的方法
public interface UserDao {
/**
* 这里简单就返回一个Boolean类型,成功或者失败即可
* 但开发的时候,登录的方法,一旦成功,这里应该返回该用户的个人信息
* @param userName
* @param password
* 返回true表是登录成功
*/
boolean login(String userName, String password);
}
- 创建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;
}
}
- 在LoginServlet里面访问UserDao,判断登录结果,以区分对待
- 创建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>
- 创建学生表,里面字段随意
- 定义学生的Dao即StuDao
public interface StuDao {
/**
* 查找出所有的学生,并返回list集合
* @return
*/
List<Student> findAll();
}
- 对上面定义的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)查询所有学生
2)把这个所有的学生集合存储到作用域中
3)跳转到stu_list.jsp中 - 在stu_list.jsp中,取出域中的集合,然后使用c标签,去遍历集合。