• 服务器重定向和客户端重定向


    一、服务器重定向

      服务器重定向又叫做服务器转发和服务器跳转,在大部分的开发中从用户发送请求到看到数据会经历如下过程:

    1.用户发送请求到服务器

    2.服务器会将请求交给对应的控制器(目前是Servlet)处理,在控制器中调用业务层方法取得数据

    3.之后将取得数据保存到request内置对象

    4.然后在跳转到页面将保存在request内置对象中的数据再次取出来之后显示到页面,用户就有能够看到信息

    总结:服务器端重定向(跳转,转发)的特征

    1.实现的方式是调用RequestDispatcher类的forword()方法

    2.服务器端转发浏览器的地址栏信息不会发生改变

    3.使用服务器端转发之后,可以在jsp页面中取得保存在request内置对象中的属性

    4.使用${参数名}在jsp中取得对应的值的方式叫做EL表达式

    服务器重定向简单demo,实现数据库中的雇员信息保存到request内置对象并在jsp中显示

    public class EmpServlet extends HttpServlet{
        //取得业务层实现类对象
        private IEmpService empservice=(IEmpService)ServiceFactory.getInstance(IEmpServiceImpl.class);    
    @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //将雇员信息保存到requset内置对象
            Integer empno = Integer.parseInt(req.getParameter("id"));
            try {
                //将查询到的数据保存到request内置对象
                req.setAttribute("emp", empservice.findEmpById(empno));
                //跳转显示雇员的页面
                //取得实现跳转的对象
                RequestDispatcher dispatcher = req.getRequestDispatcher("/pages/emp.jsp");
                //开始转发
                dispatcher.forward(req, resp);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }    
    }

    jsp代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>
            显示雇员的信息
            ${emp} 
        </h1>
        <table border="1">
            <tr>
            <td>编号</td><td>姓名</td><td>职位</td><td>领导编号</td><td>入职日期</td>
            <td>薪资</td><td>奖金</td><td>部门编号</td>
            </tr>
            <tr>
            <td>${emp.empno}</td>
            <td>${emp.ename}</td>
            <td>${emp.job}</td>
            <td>${emp.mgr}</td>
            <td>${emp.hiredate}</td>
            <td>${emp.sal}</td>
            <td>${emp.comm}</td>
            <td>${emp.deptno}</td>
            </tr>
        </table>
    </body>
    </html>

    二、客户端重定向

      客户端重定向又叫做客户端转发,就是每次进行的转发都是客户端的一个新的请求。实现客户端转发的方式有很多,如页面的超链接转发、表单提交、js中使用window.locatino.href实现 的都是客户端转发,但是以上的的转发是在客户端直接实现的,也可以在servlet中实现客户端转发,要在servlet实现客户端转发需要使用到response内置对象的一个方法sendRedirect("转发的路径")。

    总结:客户端重定向(转发)的特征

    1.浏览器地址栏信息改变,不再是提交表单的路径

    2.客户端转发就是发送了一次新的请求,在整个登录中发送了两次请求,第一次点击登录按钮提交表单时候的请求,第二次在servlet中使用sendRediect方法实现的跳转(跳转到欢迎页面)

    3.客户端转发之后保存在request内置对象中的属性不存在了,因为是一次新的请求,而request只能表示当次表示请求

    与服务器端转发的区别

    1.服务器端转发时浏览器的地址栏信息没有发生改变

    2.服务器端转发欢迎页面(jsp页面)之后依然可以取得保存在request内置对象中的属性

    3.服务器端转发对于客户端来就只发送了一次请求

     客户端转发简单demo,实现验证数据库中ALLEN帐户登录

    public class EmpServlet extends HttpServlet{
        //取得业务层实现类对象
        private IEmpService empservice=(IEmpService)ServiceFactory.getInstance(IEmpServiceImpl.class);
        //客户端转发demo
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String pathInfo=req.getPathInfo();
            try {
                if ("/login".equals(pathInfo)) {
                    this.login(req, resp);
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        /**
         * 负责登录的方法
         * @param req
         * @param resp
         * @throws Exception
         */
        public void login(HttpServletRequest req, HttpServletResponse resp)throws Exception {
            String name = req.getParameter("username");
            String pwd = req.getParameter("pwd");
            //查询数据库中的用户名和密码和用户输入的进行对比
            Emp emp = empservice.findLogin(name, pwd);
            if (emp!=null) {
                System.out.println("登录成功!");
                //跳转到欢迎页面或者首页,客户端跳转
                req.getSession().setAttribute("emp", emp);
                resp.sendRedirect("/MvcPro/pages/welcome.jsp");
            } else {
                System.out.println("用户名和密码不正确!");
                //重新返回登录页面再次登录,服务器端跳转(转发)
                req.getRequestDispatcher("/pages/login.html").forward(req, resp);
            }
        }
        
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doGet(req, resp);
        }
        
    }

    jsp代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>
               欢迎${emp.ename}光临!
        </h1>
        
    </body>
    </html>

     

  • 相关阅读:
    音频、摄像机操作
    调用系统相机及摄像机
    图片的放大缩小
    haxm intelx86加速模拟器的安装
    mac eclipse 下安装subclipse
    文件多线程下载实现
    windows与linux之间传输文件
    ZeroMQ接口函数之 :zmq_setsockopt –设置ZMQ socket的属性
    使用C语言在windows下一口气打开一批网页
    Net-SNMP是线程安全的吗
  • 原文地址:https://www.cnblogs.com/whymoney1000/p/10742580.html
Copyright © 2020-2023  润新知