zoukankan      html  css  js  c++  java
  • request+response

    基本流程

    HttpServletResponse是ServletResponse的子类,代表响应。是doGet/doPost方法的响应参数,是serviceResponse的子接口。
    服务器和客户端的请求流程是这样的,
    客户端先将请求按照http协议封装完毕,然后传给Tomcat服务器,服务器会先解析请求的资源,地址,将请求资源封装request对象,request项目接收到再通过文件复制进响应缓冲区。至此,请求流程结束。而后tomact服务器内核回去response缓冲区获取内容,通过封装这个响应作为一个http响应,(响应头,响应行,响应体),最后浏览器解析http响应显示页面。
    对response的操作,如上文所说,我们可以设置响应行,头,体。


    重定向:1.url地址栏变化,这是不带数据过去的

    response.sendRedirect(request.getContextPath()+"/admin/adminshenpi.jsp");

    请求转发:这是带数据的,需要转值。

    这个可以存取到域里面,在jsp页面进行取值
        //获取域 因为这个方法存取的是String类型 Object类型
            String name=(String)request.getAttribute("name");
    request.getRequestDispatcher("/admin/adminshenpi.jsp").forward(request, response);

    2.请求服务器两次
    响应行:设置状态码。
    response.setStatus(302)
    设置响应头:location
    response.setHeader(“Location”“/WEB03/Servlet02”);
    1、响应体的第一种方式 网页跳转
    就是上文的操作
    2、响应体的第二种方式。
    response.sendReadirect(“/WEB03/Servlet02”);
    跳转时的定时刷新:
    1、利用响应头的Refresh
    response.setHeader("Refresh","5;url="https://www.baidu.com"),5秒后刷新自动跳转到百度,


    2.利用js定时器

    <script type="text/javascript">
    window.onload=function(){
        //获取span元素
        var second=document.getElementById("second");
        //设置秒数
        var time=5;
        //设置定时器                            回调函数
        var timer=setInterval(function(){
            second.innerHTML=time;
            second.style.color="red";
            time--;
            if(time==0){
                clearInterval(timer);
                location.href="https://www.baidu.com";
            }
        }, 1000);
    }
    </script>
    </head>
    <body>
        恭喜你,注册成功,<span id="second">5</span>    秒后跳转,如不跳转,请点击<a href="https://www.baidu.com">这里</a></body>

    效果和上面一样。
    响应体设置文本
    因为码表的不同,response缓冲区的编码是iso8859-1,我们在写中文的时候会出现乱码问题,如果在,所以第一个方式是我们需要声明两个地方吗表,第一个response缓冲区码表,UTF-8,第二个浏览器码表。

    response.setCharacterEncoding("UTF-8");
    response.setHeaader("Content-type","text/html;charset=UTF-8");
    response.getWriter().write("你好.");

    案例展示:

    验证码:

    jsp文件如下:利用js写一个点击刷新功能
    <script type="text/javascript">
    
    window.onclick=function (){
        var obj=document.getElementById("aa");
        obj.src="/WEB03/CheckImgServlet?time="+new Date().getTime();
    }
    </script>
    </head>
    <body>
    <img src="/WEB03/CheckImgServlet"   id="aa">
    
    </body>
    在某一个包下创建一个

     然后将路径修改为jsp对应的文件名

    效果如下:

    第二个方式:正常只写这里也是解决乱码格式,响应乱码
        response.setContentType("text/html;charset=UTF-8");
    案例:文件下载。
    它的流程是明确数据源→通过响应头ServletOutputStream out=response.getOutputStream();获取字节码文件对象,开始定义数组复制,释放资源。
    结合html+java的写法。
    首先我们在html里面定义三个a标签盛放三个文件。

    <a href="/WEB03/DownloadServlet?filename=母鸡的.txt">母鸡的.txt</a>
    <a href="/WEB03/DownloadServlet?filename=2.jpg">2.jpg</a>
    <a href="/WEB03/DownloadServlet?filename=2.zip">2.zip</a>
    filename后面是需要和文件名一致。


    resquest 请求体
    java制作项目的基本流程,也和之前基本一致,先创建实体类,内容和数据库一致。
    创建web类(servlet)创建请求-dao层-service层-web层接受返回值
    dao层一模一样,但是service中转判断,web直接接受(提前判断)
    区别:一个功能写一套,不是一个类写一套,因为请求只能响应一次
    请求转发:
    1.url地址栏不变
    2.请求服务器1次
    java制作项目的基本流程,也和之前基本一致,先创建实体类,内容和数据库一致。
    创建web类(servlet)创建请求-dao层-service层-web层接受返回值
    dao层一模一样,但是service中转判断,web直接接受(提前判断)
    区别:一个功能写一套,不是一个类写一套,因为请求只能响应一次


    论域对象为何不能暂时存储信息,servletContext存储所有的servlet对象,但是会造成存储信息过于乱,两人都收藏了奔驰,谁买怎么调取。

    request请求域,可以每一个人都开一个内存来存储,但是没有一次执行结算servlet就会失败。

    request请求域的流程

  • 相关阅读:
    CodeForces 1294B Collecting Packages(排序+贪心)
    计算系数(组合数)
    垒骰子(矩阵快速幂)
    蒜头君倒水(矩阵快速幂)
    Buy Tickets POJ
    Billboard HDU
    树状数组求逆序对 附HDU1394
    codeforces 1304D Shortest and Longest LIS
    codeforces 1301C Ayoub's function
    Codeforces 1301B Motarack's Birthday(二分)
  • 原文地址:https://www.cnblogs.com/a199706/p/11603260.html
Copyright © 2011-2022 走看看