服务器端跳转
概述:
服务器端跳转 又叫 做服务器端转发 还可以叫做 服务器端重定向,
客户端发送一次请求之后, 服务器做了多次跳转,
可以在服务器端使用 "req.getRequestDispatcher("跳转路径").forward(req,resp)"
实现服务器端跳转
用户发送请求看到数据的过程:
1.用户发送请求到服务器
2.服务器会将请求交给对应的控制器 (目前是 Servlet 处理),
在控制器中调用业务层方法获取数据
3.将获取的数据保存到 request 内置对象
4.在跳转到页面将保存在 request 内置对象中的数据再次读取出来之后显示到页面 (用户看到信息)
服务器端跳转的特征:
1.浏览器的地址栏信息不会发生改变
2.使用服务器端跳转之后, 可以在 jsp 页面中获取保存在 request 内置对象中的属性
3.对于客户端来说只发送了一次请求
Demo: 服务器端跳转
1.将雇员的信息保存到 request 内置对象
1 @SuppressWarnings("serial") 2 public class EmpServlet extends HttpServlet { 3 //获取业务层实现类对象 4 private IEmpService empservice = (IEmpService)ServiceFactory.getInstance(EmpServiceImpl.class); 5 @Override 6 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 7 Integer empno = Integer.parseInt(req.getParameter("id")); 8 9 try { 10 //将查询的数据保存到 request 内置对象 11 req.setAttribute("emp", empservice.findEmpById(empno)); 12 //跳转到显示雇员的页面 13 //获取实现跳转的对象 14 RequestDispatcher dispatcher = req.getRequestDispatcher("/pages/emp.jsp"); 15 //开始转发 16 dispatcher.forward(req, resp); 17 } catch (Exception e) { 18 e.printStackTrace(); 19 } 20 } 21 @Override 22 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 23 this.doGet(req, resp); 24 } 25 }
2.动态页面:定义 emp.jsp 文件获取雇员信息
在 jsp 中使用 ${key值.对象属性名} 的方式获取保存在 request 内置对象
这种方式叫做 EL 表达式 (Expression language).
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <h1> 11 显示雇员信息 12 ${emp} 13 </h1> 14 <table border="1"> 15 <tr> 16 <td>编号</td><td>姓名</td><td>职位</td><td>薪资</td><td>领导编号</td><td>入职日期</td><td>佣金</td><td>部门编号</td> 17 </tr> 18 <tr> 19 <td>${emp.empno}</td> 20 <td>${emp.ename}</td> 21 <td>${emp.job}</td> 22 <td>${emp.sal}</td> 23 <td>${emp.mgr}</td> 24 <td>${emp.hiredate}</td> 25 <td>${emp.comm}</td> 26 <td>${emp.deptno}</td> 27 </tr> 28 </table> 29 </body> 30 </html>