案例如下:
package dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import entity.Emp;
import util.DBUtil2;
public class EmpDao {
//采用分页查询三条数据(8-10)
public List<Emp> findAll(){
List<Emp> list = new ArrayList<Emp>();
try{
Connection conn = DBUtil2.getConnection();
Statement state = conn.createStatement();
String sql =
"SELECT * FROM("+
"SELECT ROWNUM rw,e.* FROM("+
"SELECT * FROM emp ORDER BY empno) e"+
") WHERE rw BETWEEN 8 AND 10";
ResultSet rs = state.executeQuery(sql);
while(rs.next()){
Emp e = new Emp();
e.setComm(rs.getDouble("comm"));
e.setDeptno(rs.getInt("deptno"));
e.setEmpno(rs.getInt("empno"));
e.setHiredate(rs.getDate("hiredate"));
e.setJob(rs.getString("job"));
e.setMgr(rs.getInt("mgr"));
e.setEname(rs.getString("ename"));
e.setSal(rs.getDouble("sal"));
list.add(e);
}
return list;
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException("数据库访问异常");
}finally{
DBUtil2.closeConnection();
}
}
//模拟增加员工
public void save(Emp e){
System.out.println("增加员工"+e.getEname());
}
//测试dao正确
public static void main(String[] args) {
EmpDao dao = new EmpDao();
List<Emp> list = dao.findAll();
for(Emp e: list){
System.out.println(e);
}
}
}
Servlet实现类
package web;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.EmpDao;
import entity.Emp;
public class FindEmpServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//处理业务查询
EmpDao dao = new EmpDao();
List<Emp> list = dao.findAll();
//转发:让jsp继续完成这个请求
//1.将要转发的数据绑定到request上
req.setAttribute("emps", list);
//将请求提交给jsp让他继续处理,同时请求工具req和res给jsp
//getRequestDispatcher(String url)--获得转发器,输入转发的目的地
//当前:/jsp1/findEmp
//目标"/jsp1/emp_list.jsp
req.getRequestDispatcher("emp_list.jsp").forward(req, res);
}
}
jsp文件:
<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"
import="entity.Emp,java.util.List"%>
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>查寻员工</title>
<style type="text/css">
table{
border:2px solid #CCC;
border-collapse:collapse;
width:70%;
text-align:center;
}
table td{
border:2px solid #CCC;
}
</style>
</head>
<body>
<table>
<tr>
<td>编号</td>
<td>姓名</td>
<td>职位</td>
<td>上级</td>
<td>入职日期</td>
<td>工资</td>
<td>奖金</td>
<td>部门</td>
</tr>
<%
List<Emp> list = (List<Emp>)request.getAttribute("emps");
if(list != null){
for(Emp e : list){
%>
<tr>
<td><%= e.getEmpno() %></td>
<td><%= e.getEname() %></td>
<td><%= e.getJob() %></td>
<td><%= e.getMgr() %></td>
<td><%= e.getHiredate() %></td>
<td><%= e.getSal() %></td>
<td><%= e.getComm() %></td>
<td><%= e.getDeptno() %></td>
</tr>
<%
}
}
%>
</table>
</body>
</html>
总结:
req.setAttribute("emps", list)
List<Emp> list = (List<Emp>)request.getAttribute("emps")
方法中的参数类型都为Object,可以绑定任何类型的数据,在jsp中通过request获取数据时,其类型为Object,需要转换为需要的类型
转发和重定向的对比(*)
1.它们的相同点
- 它们都是用来解决2个WEB组件之间的跳转问题
WEB组件:Servlet/JSP
2.它们的区别(*)
3.建议
- 一般查询时用转发
- 一般增加、修改、删除后,要重定向到查询