zoukankan      html  css  js  c++  java
  • Servlet Java Web开发(3.1) request response

    0.Servlet get 如何发送流

    a.

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter.print(yourString);}

    b

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        byte [] tosend="good king".getBytes();
        response.getOutputStream().write(tosend);}

    注意:两者只能用一个,不可混用。

    1.重定向。

    关键点:2次请求。

    client请求A资源,A资源返回302,还有B的地址。client请求B。

    BServlet中的代码

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setHeader("Location", "/HelloWorld/CServlet");
            response.setStatus(302);
    注意:或者使用response.sendRedirect("/HelloWorld/CServlet");

    注意重定向位置是相对于主机的,比如localhost:8080,当然也可以不加/,response.sendRedirect("http://www.baidu.com");直接重定向到百度。

    BServlet回复内容:

    HTTP/1.1 302 Found

    Server: Apache-Coyote/1.1

    Location: /HelloWorld/CServlet

    Content-Length: 0

    Date: Fri, 08 Jun 2018 12:43:09 GMT

     然后客户端就按照地址直接访问CServlet去了。

    1.1延时重定向

    访问后,客户端等待几秒后再重定向。BServlet代码如下

    PrintWriter w=response.getWriter();
    w.print("welcome to this page..Redirect in 5 seconds.?");
    response.setHeader("Refresh", "5;URL=/HelloWorld/CServlet");

    客户端访问BServlet,BServlet返回

    HTTP/1.1 200 OK

    Server: Apache-Coyote/1.1

    Refresh: 5;URL=/HelloWorld/CServlet

    Content-Length: 50

    Date: Fri, 08 Jun 2018 13:19:37 GMT

     

    welcome to this page..Redirect in 5 seconds.

    客户端5秒后访问CServlet

    2.请求URL的含义

     3.Referer

    String referer=request.getHeader("Referer");
    System.out.println(referer);

    a,如果使用浏览器直接访问,或者直接链接BServlet,referer值为null

     b项目新建一个html文件,位置是项目(HelloWorld)下的hi.html,主要内容

    <a href="/HelloWorld/BServlet">I am a Link</a>此时,点击链接访问BServlet,http协议中的referer就会是:

    4.请求转发和请求包含

    和重定向不同的是,对于客户端来说,只有一个请求。

     相关代码request.getRequestDispatcher("/anotherServlet").forward(request,response);

    请求转发的例子:

    创建BServlet,get方法中代码,BServlet中不应该设置响应体。

    创建CServlet,get方法中代码

    用户访问BServlet,地址栏不会变化,浏览器输出you're now at CServlet

    控制台输出

    i am BServlet
    i am CSerlet

    请求包含的例子

    和请求转发的区别:BServlet中可以设置响应体。

    浏览器输出something in BServletyou're now at CServlet

  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/legion/p/9157581.html
Copyright © 2011-2022 走看看