客户端跳转
概述:
客户端跳转 又叫 做客户端转发 还可以叫做 客户端重定向,
客户端跳转就是每次进行的跳转都是客户端的一个新的请求.
实现客户端的跳转的方式有: 页面的超链接跳转, 表单的提交, js中使用 window.location.href
以上跳转都是在客户端直接实现的, 也可以在 servlet 中实现客户端跳转,
要在 servlet 中实现客户端跳转, 需要使用到 response 内置对象的一个方法 sendRedirect("转发的路径")
特征:
1.浏览器地址栏信息会改变
2.客户端跳转就是发送一次新的请求
3.客户端跳转之后保存在 request 内置对象中的属性不存在了(因为这是新的请求了)
Demo: 客户端转发
从登陆到欢迎页面一共发送了两次请求,
第一次是我们点击登陆按钮发送的请求(客户端请求),
第二次是在 servlet 中使用客户端跳转
1.修改数据表 (增加 pwd 字段)
2.修改 dao 层 (增加登录的 dao 层方法)
1 public interface IEmpDAO extends IBaseDAO<Emp>{ 2 //定义子接口特有的方法 3 public Emp selectLogin(String name,String pwd) throws Exception; 4 }
实现类:
@Override public Emp selectLogin(String name, String pwd) throws Exception { String sql = "SELECT * " + " FROM emp WHERE ename=? AND pwd=?"; List<Emp> list = super.selectList(conn, sql, Emp.class, name,pwd); if (list.size()!=0) { return list.get(0); }else { return null; } }
3.在业务层增加实现登录的操作
接口:
/** * 实现登录的操作 调用数据层的 selectLogin() 方法 * @param name * @param pwd * @return * @throws Exception */ public Emp findLogin(String name,String pwd) throws Exception;
实现类:
@Override public Emp findLogin(String name, String pwd) throws Exception { return this.empDAO.selectLogin(name, pwd); }
4.定义控制层代码
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 //处理中文乱码 8 req.setCharacterEncoding("utf-8"); 9 String pathInfo = req.getPathInfo(); 10 try { 11 if ("/login".equals(pathInfo)) { 12 this.login(req,resp); 13 } 14 } catch (Exception e) { 15 e.printStackTrace(); 16 } 17 } 18 //负责登录的方法 19 public void login(HttpServletRequest req, HttpServletResponse resp) throws Exception { 20 String name = req.getParameter("username"); 21 String pwd = req.getParameter("pwd"); 22 //查询数据库中的用户密码和用户输入的进行对比 23 Emp emp = empservice.findLogin(name, pwd); 24 if (emp != null) { 25 //将用户的信息保存到 seesion 内置对象 26 req.getSession().setAttribute("emp", emp); 27 // 客户端跳转 28 resp.sendRedirect("/MvcPro/pages/welcome.jsp"); 29 } else { 30 // 重新返回登录页面再次登录(服务器端跳转) 31 req.getRequestDispatcher("/login.html").forward(req, resp); 32 } 33 } 34 @Override 35 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 36 this.doGet(req, resp); 37 } 38 }
5.修改 welcome.heml 为 welcome.jsp 和代码
<body> <h1> 欢迎${emp.ename}光临! </h1> </body>