• 客户端跳转


    客户端跳转

    概述:
      客户端跳转 又叫 做客户端转发 还可以叫做 客户端重定向,
      客户端跳转就是每次进行的跳转都是客户端的一个新的请求.
      实现客户端的跳转的方式有: 页面的超链接跳转, 表单的提交, 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>
  • 相关阅读:
    Unity3d发布IOS(包含u3d自带IAP内购)的流程-小白篇(四)-Xcode配置发布部分
    U3D获取IOS设备所在时区、是否安装指定APP、判断真机还是模拟器
    Unity3d发布IOS(包含u3d自带IAP内购)的流程-小白篇(三)-u3d配置ios内购部分
    Unity3D 粒子系统
    Unity 3D 之Playerprefs
    物理公式
    C#之Lambda表达式
    C#中的Stack
    C#中的as(转)
    (转) Unity3D常用代码收集总结
  • 原文地址:https://www.cnblogs.com/yslf/p/10745522.html
Copyright © 2020-2023  润新知