客户端跳转

客户端跳转

概述:
  客户端跳转 又叫 做客户端转发 还可以叫做 客户端重定向,
  客户端跳转就是每次进行的跳转都是客户端的一个新的请求.
  实现客户端的跳转的方式有: 页面的超链接跳转, 表单的提交, 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>

猜你喜欢

转载自www.cnblogs.com/yslf/p/10745522.html